hash_range_test.cpp 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright 2005-2009 Daniel James.
  2. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  3. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #include "./config.hpp"
  5. #if !defined(BOOST_HASH_TEST_EXTENSIONS)
  6. int main() {}
  7. #else
  8. #ifdef BOOST_HASH_TEST_STD_INCLUDES
  9. # include <functional>
  10. #else
  11. # include <boost/container_hash/hash.hpp>
  12. #endif
  13. #include <boost/core/lightweight_test.hpp>
  14. #include <boost/limits.hpp>
  15. #include <vector>
  16. void hash_range_tests()
  17. {
  18. std::vector<int> empty, values1, values2, values3, values4, values5;
  19. values1.push_back(0);
  20. values2.push_back(10);
  21. values3.push_back(10);
  22. values3.push_back(20);
  23. values4.push_back(15);
  24. values4.push_back(75);
  25. values5.push_back(10);
  26. values5.push_back(20);
  27. values5.push_back(15);
  28. values5.push_back(75);
  29. values5.push_back(10);
  30. values5.push_back(20);
  31. std::vector<int> x;
  32. std::size_t x_seed = 0;
  33. BOOST_TEST(x_seed == BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  34. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(empty.begin(), empty.end())
  35. == BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  36. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(empty.begin(), empty.end())
  37. != BOOST_HASH_TEST_NAMESPACE::hash_range(values1.begin(), values1.end()));
  38. x.push_back(10);
  39. BOOST_HASH_TEST_NAMESPACE::hash_combine(x_seed, 10);
  40. BOOST_TEST(x_seed == BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  41. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(empty.begin(), empty.end())
  42. != BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  43. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(values2.begin(), values2.end())
  44. == BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  45. x.push_back(20);
  46. BOOST_HASH_TEST_NAMESPACE::hash_combine(x_seed, 20);
  47. BOOST_TEST(x_seed == BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  48. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(empty.begin(), empty.end())
  49. != BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  50. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(values2.begin(), values2.end())
  51. != BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  52. BOOST_TEST(BOOST_HASH_TEST_NAMESPACE::hash_range(values3.begin(), values3.end())
  53. == BOOST_HASH_TEST_NAMESPACE::hash_range(x.begin(), x.end()));
  54. std::size_t seed =
  55. BOOST_HASH_TEST_NAMESPACE::hash_range(values3.begin(), values3.end());
  56. BOOST_HASH_TEST_NAMESPACE::hash_range(seed, values4.begin(), values4.end());
  57. BOOST_HASH_TEST_NAMESPACE::hash_range(seed, x.begin(), x.end());
  58. BOOST_TEST(seed ==
  59. BOOST_HASH_TEST_NAMESPACE::hash_range(values5.begin(), values5.end()));
  60. }
  61. int main()
  62. {
  63. hash_range_tests();
  64. return boost::report_errors();
  65. }
  66. #endif // TEST_EXTESNIONS