diff --git a/hash/test/Jamfile b/hash/test/Jamfile index ef69bf1..0fb035f 100644 --- a/hash/test/Jamfile +++ b/hash/test/Jamfile @@ -28,6 +28,8 @@ rule hash-test ( name ) [ hash-test hash_string_test ] [ hash-test hash_range_test ] [ hash-test hash_custom_test ] + [ hash-test hash_built_in_array_test ] + [ hash-test hash_built_in_array_empty_test ] [ hash-test hash_vector_test ] [ hash-test hash_list_test ] [ hash-test hash_deque_test ] diff --git a/hash/test/Jamfile.v2 b/hash/test/Jamfile.v2 index 5f67006..e7effa2 100644 --- a/hash/test/Jamfile.v2 +++ b/hash/test/Jamfile.v2 @@ -16,6 +16,8 @@ test-suite functional/hash [ run hash_string_test.cpp framework ] [ run hash_range_test.cpp framework ] [ run hash_custom_test.cpp framework ] + [ run hash_built_in_array_test.cpp framework ] + [ run hash_built_in_array_empty_test.cpp framework ] [ run hash_vector_test.cpp framework ] [ run hash_list_test.cpp framework ] [ run hash_deque_test.cpp framework ] diff --git a/hash/test/hash_built_in_array_empty_test.cpp b/hash/test/hash_built_in_array_empty_test.cpp new file mode 100644 index 0000000..c6b567f --- /dev/null +++ b/hash/test/hash_built_in_array_empty_test.cpp @@ -0,0 +1,32 @@ + +// (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 + +#define BOOST_AUTO_TEST_MAIN +#include + +#ifdef TEST_EXTENSIONS + +BOOST_AUTO_UNIT_TEST(empty_array_test) +{ + int array[0]; + boost::hash hasher; + BOOST_CHECK(hasher(array) == boost::hash_range(array, array)); + BOOST_CHECK(hasher((int*) 0) == boost::hash_range((int*) 0, (int*) 0)); +} + +#endif // TEST_EXTENSIONS + + diff --git a/hash/test/hash_built_in_array_test.cpp b/hash/test/hash_built_in_array_test.cpp new file mode 100644 index 0000000..87baa1f --- /dev/null +++ b/hash/test/hash_built_in_array_test.cpp @@ -0,0 +1,65 @@ + +// (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 + +#define BOOST_AUTO_TEST_MAIN +#include + +#ifdef TEST_EXTENSIONS + +BOOST_AUTO_UNIT_TEST(array_int_test) +{ + const int length1 = 25; + int array1[25] = { + 26, -43, 32, 65, 45, + 12, 67, 32, 12, 23, + 0, 0, 0, 0, 0, + 8, -12, 23, 65, 45, + -1, 93, -54, 987, 3 + }; + boost::hash hasher1; + + const int length2 = 1; + int array2[1] = {3}; + boost::hash hasher2; + + const int length3 = 2; + int array3[2] = {2, 3}; + boost::hash hasher3; + + BOOST_CHECK(hasher1(array1) == boost::hash_range(array1, array1 + length1)); + BOOST_CHECK(hasher2(array2) == boost::hash_range(array2, array2 + length2)); + BOOST_CHECK(hasher3(array3) == boost::hash_range(array3, array3 + length3)); +} + +BOOST_AUTO_UNIT_TEST(two_dimensional_array_test) +{ + int array4[3][2] = {{-5, 6}, {7, -3}, {26, 1}}; + boost::hash hasher4; + + std::size_t seed1 = 0; + for(int i = 0; i < 3; ++i) + { + std::size_t seed2 = 0; + for(int j = 0; j < 2; ++j) + boost::hash_combine(seed2, array4[i][j]); + boost::hash_combine(seed1, seed2); + } + + BOOST_CHECK(hasher4(array4) == seed1); +} + +#endif // TEST_EXTENSIONS +