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

http://hadesmem.googlecode.com/ · C++ · 93 lines · 72 code · 18 blank · 3 comment · 0 complexity · 4463a6d35f5d399d81c557de10a6f889 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 "../helpers/random_values.hpp"
  7. #include "../helpers/invariants.hpp"
  8. #if defined(BOOST_MSVC)
  9. #pragma warning(disable:4512) // assignment operator could not be generated
  10. #endif
  11. test::seed_t seed(12847);
  12. template <class T>
  13. struct self_assign_base : public test::exception_base
  14. {
  15. test::random_values<T> values;
  16. self_assign_base(int count = 0) : values(count) {}
  17. typedef T data_type;
  18. T init() const { return T(values.begin(), values.end()); }
  19. void run(T& x) const { x = x; }
  20. void check BOOST_PREVENT_MACRO_SUBSTITUTION(T const& x) const
  21. { test::check_equivalent_keys(x); }
  22. };
  23. template <class T>
  24. struct self_assign_test1 : self_assign_base<T> {};
  25. template <class T>
  26. struct self_assign_test2 : self_assign_base<T>
  27. {
  28. self_assign_test2() : self_assign_base<T>(100) {}
  29. };
  30. template <class T>
  31. struct assign_base : public test::exception_base
  32. {
  33. const test::random_values<T> x_values, y_values;
  34. const T x,y;
  35. typedef BOOST_DEDUCED_TYPENAME T::hasher hasher;
  36. typedef BOOST_DEDUCED_TYPENAME T::key_equal key_equal;
  37. typedef BOOST_DEDUCED_TYPENAME T::allocator_type allocator_type;
  38. assign_base(unsigned int count1, unsigned int count2, int tag1, int tag2) :
  39. x_values(count1),
  40. y_values(count2),
  41. x(x_values.begin(), x_values.end(), 0, hasher(tag1), key_equal(tag1),
  42. allocator_type(tag1)),
  43. y(y_values.begin(), y_values.end(), 0, hasher(tag2), key_equal(tag2),
  44. allocator_type(tag2))
  45. {}
  46. typedef T data_type;
  47. T init() const { return T(x); }
  48. void run(T& x1) const { x1 = y; }
  49. void check BOOST_PREVENT_MACRO_SUBSTITUTION(T const& x1) const
  50. { test::check_equivalent_keys(x1); }
  51. };
  52. template <class T>
  53. struct assign_test1 : assign_base<T>
  54. {
  55. assign_test1() : assign_base<T>(0, 0, 0, 0) {}
  56. };
  57. template <class T>
  58. struct assign_test2 : assign_base<T>
  59. {
  60. assign_test2() : assign_base<T>(60, 0, 0, 0) {}
  61. };
  62. template <class T>
  63. struct assign_test3 : assign_base<T>
  64. {
  65. assign_test3() : assign_base<T>(0, 60, 0, 0) {}
  66. };
  67. template <class T>
  68. struct assign_test4 : assign_base<T>
  69. {
  70. assign_test4() : assign_base<T>(10, 10, 1, 2) {}
  71. };
  72. RUN_EXCEPTION_TESTS(
  73. (self_assign_test1)(self_assign_test2)
  74. (assign_test1)(assign_test2)(assign_test3)(assign_test4),
  75. CONTAINER_SEQ)