forked from boostorg/container_hash
Revert hash_value for std::complex
This commit is contained in:
@@ -86,8 +86,8 @@ namespace boost
|
|||||||
{
|
{
|
||||||
static std::size_t fn( T v )
|
static std::size_t fn( T v )
|
||||||
{
|
{
|
||||||
// The bias makes negative numbers that fit into a ssize_t hash to themselves
|
// The bias makes negative numbers that fit into a ssize_t hash to themselves
|
||||||
// E.g. hash_value( -4LL ) == (size_t)-4
|
// E.g. hash_value( -4LL ) == (size_t)-4
|
||||||
|
|
||||||
std::size_t const bias = (std::numeric_limits<std::size_t>::max)() / 4;
|
std::size_t const bias = (std::numeric_limits<std::size_t>::max)() / 4;
|
||||||
|
|
||||||
@@ -252,12 +252,11 @@ namespace boost
|
|||||||
template <class T>
|
template <class T>
|
||||||
std::size_t hash_value( std::complex<T> const& v )
|
std::size_t hash_value( std::complex<T> const& v )
|
||||||
{
|
{
|
||||||
std::size_t seed = 0;
|
std::size_t re = boost::hash<T>()( v.real() );
|
||||||
|
std::size_t im = boost::hash<T>()( v.imag() );
|
||||||
|
|
||||||
boost::hash_combine( seed, v.real() );
|
im ^= re + ( im << 6 ) + ( im >> 2 );
|
||||||
boost::hash_combine( seed, v.imag() );
|
return im;
|
||||||
|
|
||||||
return seed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// pair
|
// pair
|
||||||
|
@@ -53,11 +53,11 @@ void generic_complex_tests(std::complex<T> v)
|
|||||||
|
|
||||||
BOOST_HASH_TEST_NAMESPACE::hash<T> real_hasher;
|
BOOST_HASH_TEST_NAMESPACE::hash<T> real_hasher;
|
||||||
T real = v.real();
|
T real = v.real();
|
||||||
// T imag = v.imag();
|
T imag = v.imag();
|
||||||
|
|
||||||
// BOOST_TEST(real_hasher(real) == complex_hasher(std::complex<T>(real)));
|
BOOST_TEST(real_hasher(real) == complex_hasher(std::complex<T>(real)));
|
||||||
|
|
||||||
if(real_hasher(real) == complex_hasher(v)) {
|
if(imag != 0 && real_hasher(real) == complex_hasher(v)) {
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os<<"real_hasher("<<real<<") == complex_hasher("
|
os<<"real_hasher("<<real<<") == complex_hasher("
|
||||||
<<v.real()<<" + "<<v.imag()<<"i) == "
|
<<v.real()<<" + "<<v.imag()<<"i) == "
|
||||||
@@ -89,10 +89,8 @@ void complex_integral_tests(Integer*)
|
|||||||
generic_complex_tests(complex(Integer(-543),Integer(763)));
|
generic_complex_tests(complex(Integer(-543),Integer(763)));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T> void complex_grid_test()
|
template<class T> void complex_grid_test( short N )
|
||||||
{
|
{
|
||||||
short const N = 16;
|
|
||||||
|
|
||||||
std::set<std::size_t> hashes;
|
std::set<std::size_t> hashes;
|
||||||
|
|
||||||
for( short i = 0; i < N; ++i )
|
for( short i = 0; i < N; ++i )
|
||||||
@@ -122,10 +120,10 @@ int main()
|
|||||||
complex_integral_tests((unsigned int*) 0);
|
complex_integral_tests((unsigned int*) 0);
|
||||||
complex_integral_tests((unsigned long*) 0);
|
complex_integral_tests((unsigned long*) 0);
|
||||||
|
|
||||||
complex_grid_test<int>();
|
complex_grid_test<int>( 16 );
|
||||||
complex_grid_test<float>();
|
complex_grid_test<float>( 7 );
|
||||||
complex_grid_test<double>();
|
complex_grid_test<double>( 16 );
|
||||||
complex_grid_test<long double>();
|
complex_grid_test<long double>( 16 );
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user