histogram_mixed_test.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2015-2017 Hans Dembinski
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // (See accompanying file LICENSE_1_0.txt
  5. // or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. #include <boost/core/lightweight_test.hpp>
  7. #include <boost/histogram/axis/integer.hpp>
  8. #include <boost/histogram/axis/ostream.hpp>
  9. #include <boost/histogram/axis/regular.hpp>
  10. #include <boost/histogram/histogram.hpp>
  11. #include <boost/histogram/literals.hpp>
  12. #include <boost/histogram/ostream.hpp>
  13. #include <boost/histogram/storage_adaptor.hpp>
  14. #include <boost/histogram/unlimited_storage.hpp>
  15. #include <vector>
  16. #include "throw_exception.hpp"
  17. #include "utility_histogram.hpp"
  18. using namespace boost::histogram;
  19. template <typename T1, typename T2>
  20. void run_tests() {
  21. // compare
  22. {
  23. auto a = make(T1{}, axis::regular<>{3, 0, 3}, axis::integer<>(0, 2));
  24. auto b = make_s(T2{}, std::vector<unsigned>(), axis::regular<>{3, 0, 3},
  25. axis::integer<>(0, 2));
  26. BOOST_TEST_EQ(a, b);
  27. auto b2 = make(T2{}, axis::integer<>{0, 3}, axis::integer<>(0, 2));
  28. BOOST_TEST_NE(a, b2);
  29. auto b3 = make(T2{}, axis::regular<>(3, 0, 4), axis::integer<>(0, 2));
  30. BOOST_TEST_NE(a, b3);
  31. }
  32. // operators
  33. {
  34. auto a = make(T1{}, axis::integer<int, use_default, axis::option::none_t>{0, 2});
  35. auto b = make(T2{}, axis::integer<int, use_default, axis::option::none_t>{0, 2});
  36. BOOST_TEST_EQ(a, b);
  37. a(0); // 1 0
  38. b(1); // 0 1
  39. a += b;
  40. BOOST_TEST_EQ(a[0], 1);
  41. BOOST_TEST_EQ(a[1], 1);
  42. a *= b;
  43. BOOST_TEST_EQ(a[0], 0);
  44. BOOST_TEST_EQ(a[1], 1);
  45. a -= b;
  46. BOOST_TEST_EQ(a[0], 0);
  47. BOOST_TEST_EQ(a[1], 0);
  48. a[0] = 2;
  49. a[1] = 4;
  50. b[0] = 2;
  51. b[1] = 2;
  52. a /= b;
  53. BOOST_TEST_EQ(a[0], 1);
  54. BOOST_TEST_EQ(a[1], 2);
  55. BOOST_TEST_THROWS(a += make(T2{}, axis::integer<>{0, 3}), std::invalid_argument);
  56. BOOST_TEST_THROWS(a -= make(T2{}, axis::integer<>{0, 3}), std::invalid_argument);
  57. BOOST_TEST_THROWS(a *= make(T2{}, axis::integer<>{0, 3}), std::invalid_argument);
  58. BOOST_TEST_THROWS(a /= make(T2{}, axis::integer<>{0, 3}), std::invalid_argument);
  59. }
  60. // copy_assign
  61. {
  62. auto a = make(T1{}, axis::regular<>{3, 0, 3}, axis::integer<>{0, 2});
  63. auto b = make_s(T2{}, std::vector<double>(), axis::regular<>{3, 0, 3},
  64. axis::integer<>{0, 2});
  65. a(1, 1);
  66. BOOST_TEST_NE(a, b);
  67. b = a;
  68. BOOST_TEST_EQ(a, b);
  69. }
  70. }
  71. int main() {
  72. run_tests<static_tag, dynamic_tag>();
  73. run_tests<dynamic_tag, static_tag>();
  74. return boost::report_errors();
  75. }