hash_std_array_test.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2012 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. #ifdef BOOST_HASH_TEST_EXTENSIONS
  6. # ifdef BOOST_HASH_TEST_STD_INCLUDES
  7. # include <functional>
  8. # else
  9. # include <boost/container_hash/hash.hpp>
  10. # endif
  11. #endif
  12. #include <boost/config.hpp>
  13. #include <boost/core/lightweight_test.hpp>
  14. #if defined(BOOST_HASH_TEST_EXTENSIONS) && !defined(BOOST_NO_CXX11_HDR_ARRAY)
  15. #define TEST_ARRAY
  16. #include <array>
  17. #include <vector>
  18. #endif
  19. #ifdef TEST_ARRAY
  20. template <typename T>
  21. void array_tests(T const& v) {
  22. boost::hash<typename T::value_type> hf;
  23. for(typename T::const_iterator i = v.begin(); i != v.end(); ++i) {
  24. for(typename T::const_iterator j = v.begin(); j != v.end(); ++j) {
  25. if (i != j)
  26. BOOST_TEST(hf(*i) != hf(*j));
  27. else
  28. BOOST_TEST(hf(*i) == hf(*j));
  29. }
  30. }
  31. }
  32. void empty_array_test() {
  33. /*
  34. boost::hash<std::array<int, 0> > empty_array_hash;
  35. std::array<int, 0> empty_array;
  36. BOOST_TEST(empty_array_hash(empty_array) == boost::hash_value(empty_array));
  37. */
  38. }
  39. void int_1_array_test()
  40. {
  41. std::vector<std::array<int, 1> > arrays;
  42. std::array<int, 1> val;
  43. val[0] = 0;
  44. arrays.push_back(val);
  45. val[0] = 1;
  46. arrays.push_back(val);
  47. val[0] = 2;
  48. arrays.push_back(val);
  49. array_tests(arrays);
  50. }
  51. void string_1_array_test()
  52. {
  53. std::vector<std::array<std::string, 1> > arrays;
  54. std::array<std::string, 1> val;
  55. arrays.push_back(val);
  56. val[0] = "one";
  57. arrays.push_back(val);
  58. val[0] = "two";
  59. arrays.push_back(val);
  60. array_tests(arrays);
  61. }
  62. void string_3_array_test()
  63. {
  64. std::vector<std::array<std::string,3 > > arrays;
  65. std::array<std::string, 3> val;
  66. arrays.push_back(val);
  67. val[0] = "one";
  68. arrays.push_back(val);
  69. val[0] = ""; val[1] = "one"; val[2] = "";
  70. arrays.push_back(val);
  71. val[0] = ""; val[1] = ""; val[2] = "one";
  72. arrays.push_back(val);
  73. val[0] = "one"; val[1] = "one"; val[2] = "one";
  74. arrays.push_back(val);
  75. val[0] = "one"; val[1] = "two"; val[2] = "three";
  76. arrays.push_back(val);
  77. array_tests(arrays);
  78. }
  79. #endif // TEST_ARRAY
  80. int main()
  81. {
  82. #ifdef TEST_ARRAY
  83. empty_array_test();
  84. int_1_array_test();
  85. string_1_array_test();
  86. string_3_array_test();
  87. #endif
  88. return boost::report_errors();
  89. }