]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multi_array/test/index_bases.cpp
1 // Copyright 2002 The Trustees of Indiana University.
3 // Use, modification and distribution is subject to the Boost Software
4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
7 // Boost.MultiArray Library
8 // Authors: Ronald Garcia
11 // See http://www.boost.org/libs/multi_array for documentation.
14 // index_bases - test of the index_base modifying facilities.
17 #include "boost/multi_array.hpp"
19 #include "boost/test/minimal.hpp"
21 #include "boost/array.hpp"
25 test_main(int,char*[])
27 typedef boost::multi_array
<double, 3> array
;
28 typedef boost::multi_array_ref
<double, 3> array_ref
;
29 typedef boost::const_multi_array_ref
<double, 3> const_array_ref
;
30 typedef array::array_view
<3>::type array_view
;
32 typedef array::size_type size_type
;
33 typedef array::extent_range range
;
34 typedef array::index_range irange
;
36 array::extent_gen extents
;
37 array::index_gen indices
;
39 // Construct with nonzero bases
42 array
A(extents
[range(1,4)][range(2,5)][range(3,6)]);
43 array
B(extents
[3][3][3]);
47 C(ptr
,extents
[range(1,4)][range(2,5)][range(3,6)]);
50 D(ptr
,extents
[range(1,4)][range(2,5)][range(3,6)]);
52 array_view E
= A
[indices
[irange()][irange()][irange()]];
54 std::vector
<double> vals
;
55 for (int i
= 0; i
< 27; ++i
)
58 A
.assign(vals
.begin(),vals
.end());
59 B
.assign(vals
.begin(),vals
.end());
60 C
.assign(vals
.begin(),vals
.end());
62 boost::array
<int,3> bases
= { { 1, 2, 3 } };
63 for (size_type a
= 0; a
< A
.shape()[0]; ++a
)
64 for (size_type b
= 0; b
< A
.shape()[1]; ++b
)
65 for (size_type c
= 0; c
< A
.shape()[2]; ++c
) {
66 BOOST_CHECK(A
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
67 BOOST_CHECK(C
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
68 BOOST_CHECK(D
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
69 // Test that E does not inherit A's index_base
70 BOOST_CHECK(E
[a
][b
][c
] == B
[a
][b
][c
]);
76 typedef array::size_type size_type
;
77 array
A(extents
[3][3][3]), B(extents
[3][3][3]);
80 array_ref
C(ptr
,extents
[3][3][3]);
81 const_array_ref
D(ptr
,extents
[3][3][3]);
83 array_view E
= B
[indices
[irange()][irange()][irange()]];
85 std::vector
<double> vals
;
86 for (int i
= 0; i
< 27; ++i
)
89 A
.assign(vals
.begin(),vals
.end());
90 B
.assign(vals
.begin(),vals
.end());
91 C
.assign(vals
.begin(),vals
.end());
93 boost::array
<int,3> bases
= { { 1, 2, 3 } };
100 for (size_type a
= 0; a
< A
.shape()[0]; ++a
)
101 for (size_type b
= 0; b
< A
.shape()[1]; ++b
)
102 for (size_type c
= 0; c
< A
.shape()[2]; ++c
) {
103 BOOST_CHECK(A
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
104 BOOST_CHECK(C
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
105 BOOST_CHECK(D
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
106 BOOST_CHECK(E
[a
+bases
[0]][b
+bases
[1]][c
+bases
[2]] == B
[a
][b
][c
]);
112 typedef array::size_type size_type
;
113 array
A(extents
[3][3][3]), B(extents
[3][3][3]);
116 array_ref
C(ptr
,extents
[3][3][3]);
117 const_array_ref
D(ptr
,extents
[3][3][3]);
119 array_view E
= B
[indices
[irange()][irange()][irange()]];
121 std::vector
<double> vals
;
122 for (int i
= 0; i
< 27; ++i
)
125 A
.assign(vals
.begin(),vals
.end());
126 B
.assign(vals
.begin(),vals
.end());
127 C
.assign(vals
.begin(),vals
.end());
129 #ifdef BOOST_NO_SFINAE
130 typedef boost::multi_array_types::index index
;
142 for (size_type a
= 0; a
< A
.shape()[0]; ++a
)
143 for (size_type b
= 0; b
< A
.shape()[1]; ++b
)
144 for (size_type c
= 0; c
< A
.shape()[2]; ++c
) {
145 BOOST_CHECK(A
[a
+1][b
+1][c
+1] == B
[a
][b
][c
]);
146 BOOST_CHECK(C
[a
+1][b
+1][c
+1] == B
[a
][b
][c
]);
147 BOOST_CHECK(D
[a
+1][b
+1][c
+1] == B
[a
][b
][c
]);
148 BOOST_CHECK(E
[a
+1][b
+1][c
+1] == B
[a
][b
][c
]);
152 return boost::exit_success
;