static void test_tensor_maps() { int inputs[2 * 3 * 5 * 7]; TensorMap<Tensor<int, 4, DataLayout> > tensor_map(inputs, 2, 3, 5, 7); TensorMap<Tensor<const int, 4, DataLayout> > tensor_map_const(inputs, 2, 3, 5, 7); const TensorMap<Tensor<const int, 4, DataLayout> > tensor_map_const_const( inputs, 2, 3, 5, 7); tensor_map.setRandom(); array<ptrdiff_t, 2> reduction_axis; reduction_axis[0] = 1; reduction_axis[1] = 3; Tensor<int, 2, DataLayout> result = tensor_map.sum(reduction_axis); Tensor<int, 2, DataLayout> result2 = tensor_map_const.sum(reduction_axis); Tensor<int, 2, DataLayout> result3 = tensor_map_const_const.sum(reduction_axis); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 5; ++j) { int sum = 0; for (int k = 0; k < 3; ++k) { for (int l = 0; l < 7; ++l) { sum += tensor_map(i, k, j, l); } } VERIFY_IS_EQUAL(result(i, j), sum); VERIFY_IS_EQUAL(result2(i, j), sum); VERIFY_IS_EQUAL(result3(i, j), sum); } } }
static void test_assign_of_const_tensor() { Tensor<int, 3> random(2,3,7); random.setRandom(); TensorMap<Tensor<const int, 3> > constant1(random.data(), 2, 3, 7); TensorMap<const Tensor<int, 3> > constant2(random.data(), 2, 3, 7); const TensorMap<Tensor<int, 3> > constant3(random.data(), 2, 3, 7); Tensor<int, 2> result1 = constant1.chip(0, 2); Tensor<int, 2> result2 = constant2.chip(0, 2); Tensor<int, 2> result3 = constant3.chip(0, 2); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { VERIFY_IS_EQUAL((result1(i,j)), random(i,j,0)); VERIFY_IS_EQUAL((result2(i,j)), random(i,j,0)); VERIFY_IS_EQUAL((result3(i,j)), random(i,j,0)); } } }
static int f(const TensorMap<Tensor<int, 3> >& tensor) { Tensor<int, 1> result = tensor.sum(); return result(0); }