diff --git a/test/Jamfile b/test/Jamfile index fb57c00..5bb62ec 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -39,6 +39,7 @@ rule hash-test ( names + : extras * ) [ hash-test hash_deque_test ] [ hash-test hash_set_test ] [ hash-test hash_map_test ] + [ hash-test hash_complex_test ] [ hash-test link_test link_test_2 ] [ hash-test link_ext_test link_no_ext_test ] [ run container_fwd_test.cpp : : : $(BOOST_ROOT) ] diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 45caa60..4ea69be 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -30,6 +30,7 @@ test-suite functional/hash [ run hash_deque_test.cpp ] [ run hash_set_test.cpp ] [ run hash_map_test.cpp ] + [ run hash_complex_test.cpp ] [ run link_test.cpp link_test_2.cpp ] [ run link_ext_test.cpp link_no_ext_test.cpp ] [ run container_fwd_test.cpp ] diff --git a/test/hash_complex_test.cpp b/test/hash_complex_test.cpp new file mode 100644 index 0000000..da5226f --- /dev/null +++ b/test/hash_complex_test.cpp @@ -0,0 +1,96 @@ + +// (C) Copyright Daniel James 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "./config.hpp" + +#ifdef TEST_EXTENSIONS +# ifdef TEST_STD_INCLUDES +# include +# else +# include +# endif +#endif + +#include + +#ifdef TEST_EXTENSIONS + +#include +#include +#include +#include +#include +#include +#include + +template +void generic_complex_tests(std::complex v) +{ + HASH_NAMESPACE::hash > complex_hasher; + + BOOST_TEST(complex_hasher(v) == complex_hasher(v)); + + HASH_NAMESPACE::hash real_hasher; + T real = v.real(); + T imag = v.imag(); + + BOOST_TEST(real_hasher(real) == complex_hasher(std::complex(real))); + + if(imag != 0 && real_hasher(real) == complex_hasher(v)) { + std::ostringstream os; + os<<"real_hasher("< +void complex_float_tests(Float*) +{ + boost::mt19937 rng; + boost::uniform_real uniform; + boost::variate_generator > + uniform_generator(rng, uniform); + + for(int i = 0; i < 100; ++i) + { + std::complex v(uniform_generator(), uniform_generator()); + generic_complex_tests(v); + } +} + +template +void complex_integral_tests(Integer*) +{ + boost::mt19937 rng; + boost::uniform_int uniform( + (std::numeric_limits::min)(), + (std::numeric_limits::max)()); + boost::variate_generator > + uniform_generator(rng, uniform); + + for(int i = 0; i < 100; ++i) + { + std::complexv(uniform_generator(), uniform_generator()); + generic_complex_tests(v); + } +} + +int main() +{ + complex_float_tests((float*) 0); + complex_float_tests((double*) 0); + complex_float_tests((long double*) 0); + complex_integral_tests((short*) 0); + complex_integral_tests((int*) 0); + complex_integral_tests((long*) 0); + complex_integral_tests((unsigned short*) 0); + complex_integral_tests((unsigned int*) 0); + complex_integral_tests((unsigned long*) 0); +} + +#endif