aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-11-05 14:22:30 -0800
committerGravatar Benoit Steiner <benoit.steiner.goog@gmail.com>2015-11-05 14:22:30 -0800
commit0d15ad80195ec5cd33f057068e34aa7e1dc2b783 (patch)
tree0361e379d2a085193853988e08c17466a93a44df
parentc75a19f81525591631670ded0a551e983677db1f (diff)
Updated the regressions tests that cover full reductions
-rw-r--r--unsupported/test/cxx11_tensor_argmax.cpp16
-rw-r--r--unsupported/test/cxx11_tensor_index_list.cpp16
-rw-r--r--unsupported/test/cxx11_tensor_map.cpp7
-rw-r--r--unsupported/test/cxx11_tensor_reduction.cpp111
-rw-r--r--unsupported/test/cxx11_tensor_reduction_cuda.cpp8
-rw-r--r--unsupported/test/cxx11_tensor_sugar.cpp2
6 files changed, 102 insertions, 58 deletions
diff --git a/unsupported/test/cxx11_tensor_argmax.cpp b/unsupported/test/cxx11_tensor_argmax.cpp
index 6eeecb717..482dfa7de 100644
--- a/unsupported/test/cxx11_tensor_argmax.cpp
+++ b/unsupported/test/cxx11_tensor_argmax.cpp
@@ -61,14 +61,14 @@ static void test_argmax_tuple_reducer()
Tensor<Tuple<DenseIndex, float>, 4, DataLayout> index_tuples(2,3,5,7);
index_tuples = tensor.index_tuples();
- Tensor<Tuple<DenseIndex, float>, 1, DataLayout> reduced(1);
+ Tensor<Tuple<DenseIndex, float>, 0, DataLayout> reduced;
DimensionList<DenseIndex, 4> dims;
reduced = index_tuples.reduce(
dims, internal::ArgMaxTupleReducer<Tuple<DenseIndex, float>>());
- Tensor<float, 1, DataLayout> maxi = tensor.maximum();
+ Tensor<float, 0, DataLayout> maxi = tensor.maximum();
- VERIFY_IS_EQUAL(maxi(0), reduced(0).second);
+ VERIFY_IS_EQUAL(maxi(), reduced(0).second);
array<DenseIndex, 3> reduce_dims;
for (int d = 0; d < 3; ++d) reduce_dims[d] = d;
@@ -93,14 +93,14 @@ static void test_argmin_tuple_reducer()
Tensor<Tuple<DenseIndex, float>, 4, DataLayout> index_tuples(2,3,5,7);
index_tuples = tensor.index_tuples();
- Tensor<Tuple<DenseIndex, float>, 1, DataLayout> reduced(1);
+ Tensor<Tuple<DenseIndex, float>, 0, DataLayout> reduced;
DimensionList<DenseIndex, 4> dims;
reduced = index_tuples.reduce(
dims, internal::ArgMinTupleReducer<Tuple<DenseIndex, float>>());
- Tensor<float, 1, DataLayout> mini = tensor.minimum();
+ Tensor<float, 0, DataLayout> mini = tensor.minimum();
- VERIFY_IS_EQUAL(mini(0), reduced(0).second);
+ VERIFY_IS_EQUAL(mini(), reduced(0).second);
array<DenseIndex, 3> reduce_dims;
for (int d = 0; d < 3; ++d) reduce_dims[d] = d;
@@ -123,7 +123,7 @@ static void test_simple_argmax()
tensor = (tensor + tensor.constant(0.5)).log();
tensor(0,0,0,0) = 10.0;
- Tensor<DenseIndex, 1, DataLayout> tensor_argmax(1);
+ Tensor<DenseIndex, 0, DataLayout> tensor_argmax;
tensor_argmax = tensor.argmax();
@@ -144,7 +144,7 @@ static void test_simple_argmin()
tensor = (tensor + tensor.constant(0.5)).log();
tensor(0,0,0,0) = -10.0;
- Tensor<DenseIndex, 1, DataLayout> tensor_argmin(1);
+ Tensor<DenseIndex, 0, DataLayout> tensor_argmin;
tensor_argmin = tensor.argmin();
diff --git a/unsupported/test/cxx11_tensor_index_list.cpp b/unsupported/test/cxx11_tensor_index_list.cpp
index ca9d18254..7100c1628 100644
--- a/unsupported/test/cxx11_tensor_index_list.cpp
+++ b/unsupported/test/cxx11_tensor_index_list.cpp
@@ -142,7 +142,7 @@ static void test_type2index_list()
}
const Dims4 reduction_axis4;
- Tensor<float, 1> result4 = tensor.sum(reduction_axis4);
+ Tensor<float, 0> result4 = tensor.sum(reduction_axis4);
float expected = 0.0f;
for (int m = 0; m < 11; ++m) {
for (int l = 0; l < 7; ++l) {
@@ -155,7 +155,7 @@ static void test_type2index_list()
}
}
}
- VERIFY_IS_APPROX(result4(0), expected);
+ VERIFY_IS_APPROX(result4(), expected);
}
@@ -236,9 +236,9 @@ static void test_mixed_index_list()
EIGEN_STATIC_ASSERT((internal::indices_statically_known_to_increase<ReductionList>()() == true), YOU_MADE_A_PROGRAMMING_MISTAKE);
#endif
- Tensor<float, 1> result1 = tensor.sum(reduction_axis);
- Tensor<float, 1> result2 = tensor.sum(reduction_indices);
- Tensor<float, 1> result3 = tensor.sum(reduction_list);
+ Tensor<float, 0> result1 = tensor.sum(reduction_axis);
+ Tensor<float, 0> result2 = tensor.sum(reduction_indices);
+ Tensor<float, 0> result3 = tensor.sum(reduction_list);
float expected = 0.0f;
for (int i = 0; i < 2; ++i) {
@@ -250,9 +250,9 @@ static void test_mixed_index_list()
}
}
}
- VERIFY_IS_APPROX(result1(0), expected);
- VERIFY_IS_APPROX(result2(0), expected);
- VERIFY_IS_APPROX(result3(0), expected);
+ VERIFY_IS_APPROX(result1(), expected);
+ VERIFY_IS_APPROX(result2(), expected);
+ VERIFY_IS_APPROX(result3(), expected);
}
diff --git a/unsupported/test/cxx11_tensor_map.cpp b/unsupported/test/cxx11_tensor_map.cpp
index 9e79209bb..a8a095e38 100644
--- a/unsupported/test/cxx11_tensor_map.cpp
+++ b/unsupported/test/cxx11_tensor_map.cpp
@@ -232,8 +232,11 @@ static void test_from_tensor()
static int f(const TensorMap<Tensor<int, 3> >& tensor) {
- Tensor<int, 1> result = tensor.sum();
- return result(0);
+ // Size<0> empty;
+ EIGEN_STATIC_ASSERT((internal::array_size<Sizes<>>::value == 0), YOU_MADE_A_PROGRAMMING_MISTAKE);
+ EIGEN_STATIC_ASSERT((internal::array_size<DSizes<int, 0>>::value == 0), YOU_MADE_A_PROGRAMMING_MISTAKE);
+ Tensor<int, 0> result = tensor.sum();
+ return result();
}
static void test_casting()
diff --git a/unsupported/test/cxx11_tensor_reduction.cpp b/unsupported/test/cxx11_tensor_reduction.cpp
index e8180c061..0ec316991 100644
--- a/unsupported/test/cxx11_tensor_reduction.cpp
+++ b/unsupported/test/cxx11_tensor_reduction.cpp
@@ -14,6 +14,45 @@
using Eigen::Tensor;
template <int DataLayout>
+static void test_trivial_reductions() {
+ {
+ Tensor<float, 0, DataLayout> tensor;
+ tensor.setRandom();
+ array<ptrdiff_t, 0> reduction_axis;
+
+ Tensor<float, 0, DataLayout> result = tensor.sum(reduction_axis);
+ VERIFY_IS_EQUAL(result(), tensor());
+ }
+
+ {
+ Tensor<float, 1, DataLayout> tensor(7);
+ tensor.setRandom();
+ array<ptrdiff_t, 0> reduction_axis;
+
+ Tensor<float, 1, DataLayout> result = tensor.sum(reduction_axis);
+ VERIFY_IS_EQUAL(result.dimension(0), 7);
+ for (int i = 0; i < 7; ++i) {
+ VERIFY_IS_EQUAL(result(i), tensor(i));
+ }
+ }
+
+ {
+ Tensor<float, 2, DataLayout> tensor(2, 3);
+ tensor.setRandom();
+ array<ptrdiff_t, 0> reduction_axis;
+
+ Tensor<float, 2, DataLayout> result = tensor.sum(reduction_axis);
+ VERIFY_IS_EQUAL(result.dimension(0), 2);
+ VERIFY_IS_EQUAL(result.dimension(1), 3);
+ for (int i = 0; i < 2; ++i) {
+ for (int j = 0; j < 3; ++j) {
+ VERIFY_IS_EQUAL(result(i, j), tensor(i, j));
+ }
+ }
+ }
+}
+
+template <int DataLayout>
static void test_simple_reductions() {
Tensor<float, 4, DataLayout> tensor(2, 3, 5, 7);
tensor.setRandom();
@@ -37,18 +76,18 @@ static void test_simple_reductions() {
}
{
- Tensor<float, 1, DataLayout> sum1 = tensor.sum();
- VERIFY_IS_EQUAL(sum1.dimension(0), 1);
+ Tensor<float, 0, DataLayout> sum1 = tensor.sum();
+ VERIFY_IS_EQUAL(sum1.rank(), 0);
array<ptrdiff_t, 4> reduction_axis4;
reduction_axis4[0] = 0;
reduction_axis4[1] = 1;
reduction_axis4[2] = 2;
reduction_axis4[3] = 3;
- Tensor<float, 1, DataLayout> sum2 = tensor.sum(reduction_axis4);
- VERIFY_IS_EQUAL(sum2.dimension(0), 1);
+ Tensor<float, 0, DataLayout> sum2 = tensor.sum(reduction_axis4);
+ VERIFY_IS_EQUAL(sum2.rank(), 0);
- VERIFY_IS_APPROX(sum1(0), sum2(0));
+ VERIFY_IS_APPROX(sum1(), sum2());
}
reduction_axis2[0] = 0;
@@ -69,18 +108,18 @@ static void test_simple_reductions() {
}
{
- Tensor<float, 1, DataLayout> prod1 = tensor.prod();
- VERIFY_IS_EQUAL(prod1.dimension(0), 1);
+ Tensor<float, 0, DataLayout> prod1 = tensor.prod();
+ VERIFY_IS_EQUAL(prod1.rank(), 0);
array<ptrdiff_t, 4> reduction_axis4;
reduction_axis4[0] = 0;
reduction_axis4[1] = 1;
reduction_axis4[2] = 2;
reduction_axis4[3] = 3;
- Tensor<float, 1, DataLayout> prod2 = tensor.prod(reduction_axis4);
- VERIFY_IS_EQUAL(prod2.dimension(0), 1);
+ Tensor<float, 0, DataLayout> prod2 = tensor.prod(reduction_axis4);
+ VERIFY_IS_EQUAL(prod2.rank(), 0);
- VERIFY_IS_APPROX(prod1(0), prod2(0));
+ VERIFY_IS_APPROX(prod1(), prod2());
}
reduction_axis2[0] = 0;
@@ -101,18 +140,18 @@ static void test_simple_reductions() {
}
{
- Tensor<float, 1, DataLayout> max1 = tensor.maximum();
- VERIFY_IS_EQUAL(max1.dimension(0), 1);
+ Tensor<float, 0, DataLayout> max1 = tensor.maximum();
+ VERIFY_IS_EQUAL(max1.rank(), 0);
array<ptrdiff_t, 4> reduction_axis4;
reduction_axis4[0] = 0;
reduction_axis4[1] = 1;
reduction_axis4[2] = 2;
reduction_axis4[3] = 3;
- Tensor<float, 1, DataLayout> max2 = tensor.maximum(reduction_axis4);
- VERIFY_IS_EQUAL(max2.dimension(0), 1);
+ Tensor<float, 0, DataLayout> max2 = tensor.maximum(reduction_axis4);
+ VERIFY_IS_EQUAL(max2.rank(), 0);
- VERIFY_IS_APPROX(max1(0), max2(0));
+ VERIFY_IS_APPROX(max1(), max2());
}
reduction_axis2[0] = 0;
@@ -133,18 +172,18 @@ static void test_simple_reductions() {
}
{
- Tensor<float, 1, DataLayout> min1 = tensor.minimum();
- VERIFY_IS_EQUAL(min1.dimension(0), 1);
+ Tensor<float, 0, DataLayout> min1 = tensor.minimum();
+ VERIFY_IS_EQUAL(min1.rank(), 0);
array<ptrdiff_t, 4> reduction_axis4;
reduction_axis4[0] = 0;
reduction_axis4[1] = 1;
reduction_axis4[2] = 2;
reduction_axis4[3] = 3;
- Tensor<float, 1, DataLayout> min2 = tensor.minimum(reduction_axis4);
- VERIFY_IS_EQUAL(min2.dimension(0), 1);
+ Tensor<float, 0, DataLayout> min2 = tensor.minimum(reduction_axis4);
+ VERIFY_IS_EQUAL(min2.rank(), 0);
- VERIFY_IS_APPROX(min1(0), min2(0));
+ VERIFY_IS_APPROX(min1(), min2());
}
reduction_axis2[0] = 0;
@@ -167,35 +206,35 @@ static void test_simple_reductions() {
}
{
- Tensor<float, 1, DataLayout> mean1 = tensor.mean();
- VERIFY_IS_EQUAL(mean1.dimension(0), 1);
+ Tensor<float, 0, DataLayout> mean1 = tensor.mean();
+ VERIFY_IS_EQUAL(mean1.rank(), 0);
array<ptrdiff_t, 4> reduction_axis4;
reduction_axis4[0] = 0;
reduction_axis4[1] = 1;
reduction_axis4[2] = 2;
reduction_axis4[3] = 3;
- Tensor<float, 1, DataLayout> mean2 = tensor.mean(reduction_axis4);
- VERIFY_IS_EQUAL(mean2.dimension(0), 1);
+ Tensor<float, 0, DataLayout> mean2 = tensor.mean(reduction_axis4);
+ VERIFY_IS_EQUAL(mean2.rank(), 0);
- VERIFY_IS_APPROX(mean1(0), mean2(0));
+ VERIFY_IS_APPROX(mean1(), mean2());
}
{
Tensor<int, 1> ints(10);
std::iota(ints.data(), ints.data() + ints.dimension(0), 0);
- TensorFixedSize<bool, Sizes<1> > all;
+ TensorFixedSize<bool, Sizes<> > all;
all = ints.all();
- VERIFY(!all(0));
+ VERIFY(!all());
all = (ints >= ints.constant(0)).all();
- VERIFY(all(0));
+ VERIFY(all());
- TensorFixedSize<bool, Sizes<1> > any;
+ TensorFixedSize<bool, Sizes<> > any;
any = (ints > ints.constant(10)).any();
- VERIFY(!any(0));
+ VERIFY(!any());
any = (ints < ints.constant(1)).any();
- VERIFY(any(0));
+ VERIFY(any());
}
}
@@ -207,8 +246,8 @@ static void test_full_reductions() {
reduction_axis[0] = 0;
reduction_axis[1] = 1;
- Tensor<float, 1, DataLayout> result = tensor.sum(reduction_axis);
- VERIFY_IS_EQUAL(result.dimension(0), 1);
+ Tensor<float, 0, DataLayout> result = tensor.sum(reduction_axis);
+ VERIFY_IS_EQUAL(result.rank(), 0);
float sum = 0.0f;
for (int i = 0; i < 2; ++i) {
@@ -219,7 +258,7 @@ static void test_full_reductions() {
VERIFY_IS_APPROX(result(0), sum);
result = tensor.square().sum(reduction_axis).sqrt();
- VERIFY_IS_EQUAL(result.dimension(0), 1);
+ VERIFY_IS_EQUAL(result.rank(), 0);
sum = 0.0f;
for (int i = 0; i < 2; ++i) {
@@ -227,7 +266,7 @@ static void test_full_reductions() {
sum += tensor(i, j) * tensor(i, j);
}
}
- VERIFY_IS_APPROX(result(0), sqrtf(sum));
+ VERIFY_IS_APPROX(result(), sqrtf(sum));
}
struct UserReducer {
@@ -418,6 +457,8 @@ static void test_reduce_middle_dims() {
}
void test_cxx11_tensor_reduction() {
+ CALL_SUBTEST(test_trivial_reductions<ColMajor>());
+ CALL_SUBTEST(test_trivial_reductions<RowMajor>());
CALL_SUBTEST(test_simple_reductions<ColMajor>());
CALL_SUBTEST(test_simple_reductions<RowMajor>());
CALL_SUBTEST(test_full_reductions<ColMajor>());
diff --git a/unsupported/test/cxx11_tensor_reduction_cuda.cpp b/unsupported/test/cxx11_tensor_reduction_cuda.cpp
index f426ebbc1..9e06eb126 100644
--- a/unsupported/test/cxx11_tensor_reduction_cuda.cpp
+++ b/unsupported/test/cxx11_tensor_reduction_cuda.cpp
@@ -28,7 +28,7 @@ static void test_full_reductions() {
Tensor<float, 2, DataLayout> in(num_rows, num_cols);
in.setRandom();
- Tensor<float, 1, DataLayout> full_redux(1);
+ Tensor<float, 0, DataLayout> full_redux;
full_redux = in.sum();
std::size_t in_bytes = in.size() * sizeof(float);
@@ -38,16 +38,16 @@ static void test_full_reductions() {
gpu_device.memcpyHostToDevice(gpu_in_ptr, in.data(), in_bytes);
TensorMap<Tensor<float, 2, DataLayout> > in_gpu(gpu_in_ptr, num_rows, num_cols);
- TensorMap<Tensor<float, 1, DataLayout> > out_gpu(gpu_out_ptr, 1);
+ TensorMap<Tensor<float, 0, DataLayout> > out_gpu(gpu_out_ptr);
out_gpu.device(gpu_device) = in_gpu.sum();
- Tensor<float, 1, DataLayout> full_redux_gpu(1);
+ Tensor<float, 0, DataLayout> full_redux_gpu;
gpu_device.memcpyDeviceToHost(full_redux_gpu.data(), gpu_out_ptr, out_bytes);
gpu_device.synchronize();
// Check that the CPU and GPU reductions return the same result.
- VERIFY_IS_APPROX(full_redux(0), full_redux_gpu(0));
+ VERIFY_IS_APPROX(full_redux(), full_redux_gpu());
}
void test_cxx11_tensor_reduction_cuda() {
diff --git a/unsupported/test/cxx11_tensor_sugar.cpp b/unsupported/test/cxx11_tensor_sugar.cpp
index 7848acc8b..98671a986 100644
--- a/unsupported/test/cxx11_tensor_sugar.cpp
+++ b/unsupported/test/cxx11_tensor_sugar.cpp
@@ -14,7 +14,7 @@ static void test_comparison_sugar() {
// make sure we have at least one value == 0
t(0,0,0) = 0;
- Tensor<bool,1> b;
+ Tensor<bool,0> b;
#define TEST_TENSOR_EQUAL(e1, e2) \
b = ((e1) == (e2)).all(); \