|
30 | 30 | #include "xtensor/misc/xmanipulation.hpp" |
31 | 31 | #include "xtensor/views/xstrided_view.hpp" |
32 | 32 | #include "xtensor/views/xview.hpp" |
| 33 | +#include "xtensor/views/index_mapper.hpp" |
33 | 34 |
|
34 | 35 | namespace xt |
35 | 36 | { |
@@ -143,6 +144,57 @@ namespace xt |
143 | 144 | } |
144 | 145 | } |
145 | 146 |
|
| 147 | + TEST(xview_mapping, simple) |
| 148 | + { |
| 149 | + view_shape_type shape = {3, 4}; |
| 150 | + xarray<double> a(shape); |
| 151 | + std::vector<double> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; |
| 152 | + std::copy(data.cbegin(), data.cend(), a.template begin<layout_type::row_major>()); |
| 153 | + |
| 154 | + auto view1 = view(a, 1, range(1, 4)); |
| 155 | + |
| 156 | + index_mapper<decltype(view1)> mapper1; |
| 157 | + |
| 158 | + EXPECT_EQ(a(1, 1), mapper1.map(a, view1, 0)); |
| 159 | + EXPECT_EQ(a(1, 2), mapper1.map(a, view1, 1)); |
| 160 | + EXPECT_EQ(size_t(1), mapper1.dimension()); |
| 161 | + //~ XT_EXPECT_ANY_THROW(mapper1.map_at(a, view1, 10)); |
| 162 | + |
| 163 | + auto view0 = view(a, 0, range(0, 3)); |
| 164 | + index_mapper<decltype(view0)> mapper0; |
| 165 | + |
| 166 | + EXPECT_EQ(a(0, 0), mapper0.map(a, view0, 0)); |
| 167 | + EXPECT_EQ(a(0, 1), mapper0.map(a, view0, 1)); |
| 168 | + EXPECT_EQ(size_t(1), mapper0.dimension()); |
| 169 | + |
| 170 | + auto view2 = view(a, range(0, 2), 2); |
| 171 | + index_mapper<decltype(view2)> mapper2; |
| 172 | + EXPECT_EQ(a(0, 2), mapper2.map(a, view2, 0)); |
| 173 | + EXPECT_EQ(a(1, 2), mapper2.map(a, view2, 1)); |
| 174 | + EXPECT_EQ(size_t(1), mapper2.dimension()); |
| 175 | + |
| 176 | + //~ auto view4 = view(a, 1); |
| 177 | + //~ index_mapper<decltype(view4)> mapper4; |
| 178 | + //~ EXPECT_EQ(size_t(1), mapper4.dimension()); |
| 179 | + //~ |
| 180 | + //~ auto view5 = view(view4, 1); |
| 181 | + //~ index_mapper<decltype(view5)> mapper5; |
| 182 | + //~ EXPECT_EQ(size_t(0), mapper5.dimension()); |
| 183 | + |
| 184 | + auto view6 = view(a, 1, all()); |
| 185 | + index_mapper<decltype(view6)> mapper6; |
| 186 | + EXPECT_EQ(a(1, 0), mapper6.map(a, view6, 0)); |
| 187 | + EXPECT_EQ(a(1, 1), mapper6.map(a, view6, 1)); |
| 188 | + EXPECT_EQ(a(1, 2), mapper6.map(a, view6, 2)); |
| 189 | + EXPECT_EQ(a(1, 3), mapper6.map(a, view6, 3)); |
| 190 | + |
| 191 | + auto view7 = view(a, all(), 2); |
| 192 | + index_mapper<decltype(view7)> mapper7; |
| 193 | + EXPECT_EQ(a(0, 2), mapper7.map(a, view7, 0)); |
| 194 | + EXPECT_EQ(a(1, 2), mapper7.map(a, view7, 1)); |
| 195 | + EXPECT_EQ(a(2, 2), mapper7.map(a, view7, 2)); |
| 196 | + } |
| 197 | + |
146 | 198 | TEST(xview, negative_index) |
147 | 199 | { |
148 | 200 | view_shape_type shape = {3, 4}; |
@@ -269,6 +321,29 @@ namespace xt |
269 | 321 | EXPECT_EQ(a(1, 1, 1), view1.element(idx.cbegin(), idx.cend())); |
270 | 322 | } |
271 | 323 |
|
| 324 | + TEST(xview_mapping, three_dimensional) |
| 325 | + { |
| 326 | + view_shape_type shape = {3, 4, 2}; |
| 327 | + std::vector<double> data = {1, 2, 3, 4, 5, 6, 7, 8, |
| 328 | + |
| 329 | + 9, 10, 11, 12, 21, 22, 23, 24, |
| 330 | + |
| 331 | + 25, 26, 27, 28, 29, 210, 211, 212}; |
| 332 | + xarray<double> a(shape); |
| 333 | + std::copy(data.cbegin(), data.cend(), a.template begin<layout_type::row_major>()); |
| 334 | + |
| 335 | + auto view1 = view(a, 1, all(), all()); |
| 336 | + index_mapper<decltype(view1)> mapper1; |
| 337 | + |
| 338 | + EXPECT_EQ(size_t(2), mapper1.dimension()); |
| 339 | + std::cout << "===================================" << std::endl; |
| 340 | + EXPECT_EQ(a(1, 0, 0), mapper1.map(a, view1, 0, 0)); |
| 341 | + EXPECT_EQ(a(1, 0, 1), mapper1.map(a, view1, 0, 1)); |
| 342 | + //~ EXPECT_EQ(a(1, 1, 0), mapper1.map(a, view1, 1, 0)); |
| 343 | + //~ EXPECT_EQ(a(1, 1, 1), mapper1.map(a, view1, 1, 1)); |
| 344 | + //~ XT_EXPECT_ANY_THROW(mapper1.map_at(a, view1, 10, 10)); |
| 345 | + } |
| 346 | + |
272 | 347 | TEST(xview, integral_count) |
273 | 348 | { |
274 | 349 | size_t squeeze1 = integral_count<size_t, size_t, size_t, xrange<size_t>>(); |
|
0 commit comments