/Src/Dependencies/Boost/libs/unordered/test/exception/rehash_exception_tests.cpp

http://hadesmem.googlecode.com/ · C++ · 87 lines · 66 code · 18 blank · 3 comment · 4 complexity · 05943dd7d0f994ac314cead36b3e088a MD5 · raw file

  1. // Copyright 2006-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 "../helpers/prefix.hpp"
  5. #include "./containers.hpp"
  6. #include <string>
  7. #include "../helpers/random_values.hpp"
  8. #include "../helpers/invariants.hpp"
  9. #include "../helpers/strong.hpp"
  10. #include <iostream>
  11. test::seed_t seed(3298597);
  12. template <class T>
  13. struct rehash_test_base : public test::exception_base
  14. {
  15. test::random_values<T> values;
  16. unsigned int n;
  17. rehash_test_base(unsigned int count = 100, unsigned int n = 0)
  18. : values(count), n(n)
  19. {}
  20. typedef T data_type;
  21. typedef test::strong<T> strong_type;
  22. data_type init() const {
  23. T x(values.begin(), values.end(), n);
  24. return x;
  25. }
  26. void check BOOST_PREVENT_MACRO_SUBSTITUTION(T const& x,
  27. strong_type const& strong) const
  28. {
  29. std::string scope(test::scope);
  30. if(scope.find("hash::operator()") == std::string::npos &&
  31. scope.find("equal_to::operator()") == std::string::npos &&
  32. scope != "operator==(object, object)")
  33. strong.test(x);
  34. test::check_equivalent_keys(x);
  35. }
  36. };
  37. template <class T>
  38. struct rehash_test0 : rehash_test_base<T>
  39. {
  40. rehash_test0() : rehash_test_base<T>(0) {}
  41. void run(T& x) const { x.rehash(0); }
  42. };
  43. template <class T>
  44. struct rehash_test1 : rehash_test_base<T>
  45. {
  46. rehash_test1() : rehash_test_base<T>(0) {}
  47. void run(T& x) const { x.rehash(200); }
  48. };
  49. template <class T>
  50. struct rehash_test2 : rehash_test_base<T>
  51. {
  52. rehash_test2() : rehash_test_base<T>(0, 200) {}
  53. void run(T& x) const { x.rehash(0); }
  54. };
  55. template <class T>
  56. struct rehash_test3 : rehash_test_base<T>
  57. {
  58. rehash_test3() : rehash_test_base<T>(10, 0) {}
  59. void run(T& x) const { x.rehash(200); }
  60. };
  61. template <class T>
  62. struct rehash_test4 : rehash_test_base<T>
  63. {
  64. rehash_test4() : rehash_test_base<T>(10, 200) {}
  65. void run(T& x) const { x.rehash(0); }
  66. };
  67. RUN_EXCEPTION_TESTS(
  68. (rehash_test0)(rehash_test1)(rehash_test2)(rehash_test3)(rehash_test4),
  69. CONTAINER_SEQ)