compare.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. // Copyright 2002 The Trustees of Indiana University.
  2. // Use, modification and distribution is subject to the Boost Software
  3. // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. // Boost.MultiArray Library
  6. // Authors: Ronald Garcia
  7. // Jeremy Siek
  8. // Andrew Lumsdaine
  9. // See http://www.boost.org/libs/multi_array for documentation.
  10. #include <boost/multi_array.hpp>
  11. #include <boost/core/lightweight_test.hpp>
  12. #include <algorithm>
  13. #include <list>
  14. int
  15. main()
  16. {
  17. typedef boost::multi_array<double, 3> array;
  18. typedef array::size_type size_type;
  19. boost::array<size_type,3> sizes = { { 3, 3, 3 } };
  20. const size_type num_elements = 27;
  21. // Copy Constructor
  22. {
  23. array A(sizes);
  24. std::vector<double> vals(num_elements, 4.5);
  25. A.assign(vals.begin(),vals.end());
  26. array B(A);
  27. BOOST_TEST(A == B);
  28. BOOST_TEST(B == A);
  29. BOOST_TEST(A[0] == B[0]);
  30. }
  31. // Assignment Operator
  32. {
  33. array A(sizes), B(sizes);
  34. std::vector<double> vals(num_elements, 4.5);
  35. A.assign(vals.begin(),vals.end());
  36. B = A;
  37. BOOST_TEST(A == B);
  38. BOOST_TEST(B == A);
  39. BOOST_TEST(B[0] == A[0]);
  40. typedef array::index_range range;
  41. array::index_gen indices;
  42. array::array_view<2>::type C = A[indices[2][range()][range()]];
  43. array::array_view<2>::type D = B[indices[2][range()][range()]];
  44. BOOST_TEST(C == D);
  45. }
  46. // Different Arrays
  47. {
  48. array A(sizes), B(sizes);
  49. std::vector<double> valsA(num_elements, 4.5);
  50. std::vector<double> valsB(num_elements, 2.5);
  51. A.assign(valsA.begin(),valsA.end());
  52. B.assign(valsB.begin(),valsB.end());
  53. BOOST_TEST(A != B);
  54. BOOST_TEST(B != A);
  55. BOOST_TEST(A[0] != B[0]);
  56. typedef array::index_range range;
  57. array::index_gen indices;
  58. array::array_view<2>::type C = A[indices[2][range()][range()]];
  59. array::array_view<2>::type D = B[indices[2][range()][range()]];
  60. BOOST_TEST(C != D);
  61. }
  62. // Comparisons galore!
  63. {
  64. array A(sizes), B(sizes);
  65. double valsA[] = {
  66. 0, 0, 0,
  67. 0, 0, 0,
  68. 0, 0, 0,
  69. 1, 1, 1,
  70. 1, 1, 1,
  71. 1, 1, 1,
  72. 2, 2, 2,
  73. 2, 2, 2,
  74. 2, 2, 2
  75. };
  76. double valsB[] = {
  77. 0, 0, 0,
  78. 0, 0, 0,
  79. 0, 0, 0,
  80. 1, 1, 1,
  81. 1, 1, 1,
  82. 1, 1, 1,
  83. 2, 2, 2,
  84. 2, 2, 2,
  85. 2, 2, 1
  86. };
  87. A.assign(valsA,valsA+num_elements);
  88. B.assign(valsB,valsB+num_elements);
  89. BOOST_TEST(B < A);
  90. BOOST_TEST(A > B);
  91. BOOST_TEST(B <= A);
  92. BOOST_TEST(A >= B);
  93. BOOST_TEST(B[0] == A[0]);
  94. BOOST_TEST(B[2] < A[2]);
  95. array C = A;
  96. BOOST_TEST(C <= A);
  97. BOOST_TEST(C >= A);
  98. BOOST_TEST(!(C < A));
  99. BOOST_TEST(!(C > A));
  100. typedef array::index_range range;
  101. array::index_gen indices;
  102. array::array_view<2>::type D = A[indices[2][range()][range()]];
  103. array::array_view<2>::type E = B[indices[2][range()][range()]];
  104. BOOST_TEST(E < D);
  105. BOOST_TEST(E <= D);
  106. }
  107. return boost::report_errors();
  108. }