Add mulxp_hash to benchmark/unordered.cpp

This commit is contained in:
Peter Dimov
2022-11-25 20:24:59 +02:00
parent 8ab83c1cd4
commit ce166d1030

View File

@@ -3,6 +3,7 @@
// https://www.boost.org/LICENSE_1_0.txt // https://www.boost.org/LICENSE_1_0.txt
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
#define _SILENCE_CXX20_CISO646_REMOVED_WARNING
#include <boost/container_hash/hash.hpp> #include <boost/container_hash/hash.hpp>
#include <boost/unordered_set.hpp> #include <boost/unordered_set.hpp>
@@ -12,6 +13,9 @@
#ifdef HAVE_ABSEIL #ifdef HAVE_ABSEIL
# include "absl/hash/hash.h" # include "absl/hash/hash.h"
#endif #endif
#ifdef HAVE_MULXP_HASH
# include "mulxp_hash.hpp"
#endif
#include <cstddef> #include <cstddef>
#include <cstdio> #include <cstdio>
#include <cstdint> #include <cstdint>
@@ -188,6 +192,44 @@ public:
} }
}; };
// mulxp_hash
#ifdef HAVE_MULXP_HASH
struct mulxp0_hash_
{
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp0_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
struct mulxp1_hash_
{
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp1_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
struct mulxp2_hash_
{
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp2_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
struct mulxp3_hash_
{
std::size_t operator()( std::string const& st ) const BOOST_NOEXCEPT
{
return mulxp3_hash( (unsigned char const*)st.data(), st.size(), 0 );
}
};
#endif
// test_hash_speed // test_hash_speed
template<class H, class V> void test_hash_speed( int N, V const& v ) template<class H, class V> void test_hash_speed( int N, V const& v )
@@ -351,6 +393,12 @@ int main()
#ifdef HAVE_ABSEIL #ifdef HAVE_ABSEIL
test_hash_speed<absl::Hash<std::string> >( N * 16, v ); test_hash_speed<absl::Hash<std::string> >( N * 16, v );
#endif #endif
#ifdef HAVE_MULXP_HASH
test_hash_speed<mulxp0_hash_>( N * 16, v );
test_hash_speed<mulxp1_hash_>( N * 16, v );
test_hash_speed<mulxp2_hash_>( N * 16, v );
test_hash_speed<mulxp3_hash_>( N * 16, v );
#endif
std::puts( "" ); std::puts( "" );
@@ -378,6 +426,12 @@ int main()
test_hash_collision<std::hash<std::string> >( N * 16, v, n ); test_hash_collision<std::hash<std::string> >( N * 16, v, n );
#ifdef HAVE_ABSEIL #ifdef HAVE_ABSEIL
test_hash_collision<absl::Hash<std::string> >( N * 16, v, n ); test_hash_collision<absl::Hash<std::string> >( N * 16, v, n );
#endif
#ifdef HAVE_MULXP_HASH
test_hash_collision<mulxp0_hash_>( N * 16, v, n );
test_hash_collision<mulxp1_hash_>( N * 16, v, n );
test_hash_collision<mulxp2_hash_>( N * 16, v, n );
test_hash_collision<mulxp3_hash_>( N * 16, v, n );
#endif #endif
} }
@@ -396,6 +450,12 @@ int main()
#ifdef HAVE_ABSEIL #ifdef HAVE_ABSEIL
test_container_speed<K, absl::Hash<std::string> >( N, v ); test_container_speed<K, absl::Hash<std::string> >( N, v );
#endif #endif
#ifdef HAVE_MULXP_HASH
test_container_speed<K, mulxp0_hash_>( N, v );
test_container_speed<K, mulxp1_hash_>( N, v );
test_container_speed<K, mulxp2_hash_>( N, v );
test_container_speed<K, mulxp3_hash_>( N, v );
#endif
std::puts( "" ); std::puts( "" );
} }