diff --git a/tests/test_ArrayUtils.cpp b/tests/test_ArrayUtils.cpp index 9861db42a725f5983e55db3d4caca3b9be6c6a17..8183e7157a2c39d3f27b3fbd703917fcdf567ff1 100644 --- a/tests/test_ArrayUtils.cpp +++ b/tests/test_ArrayUtils.cpp @@ -9,18 +9,88 @@ template class Array<int>; TEST_CASE("ArrayUtils", "[utils]") { - Array<int> a(10); - a[0] =13; - a[1] = 1; - a[2] = 8; - a[3] =-3; - a[4] =23; - a[5] =-1; - a[6] =13; - a[7] = 0; - a[8] =12; - a[9] = 9; - - REQUIRE((ReduceMin(a) == -3)); - REQUIRE((ReduceMax(a) == 23)); + SECTION("checking for reductions") { + using ArrayType = Array<int>; + using data_type = ArrayType::data_type; + + Array<int> a(10); + a[0] =13; + a[1] = 1; + a[2] = 8; + a[3] =-3; + a[4] =23; + a[5] =-1; + a[6] =13; + a[7] = 0; + a[8] =12; + a[9] = 9; + + SECTION("ReduceMin") { + ReduceMin r_min(a); + data_type data; + + r_min.init(data); + REQUIRE(data == std::numeric_limits<data_type>::max()); + + r_min(2,data); + REQUIRE(data == 8); + + r_min(9,data); + REQUIRE(data == 8); + + r_min(5,data); + REQUIRE(data == -1); + + { + data = 0; + data_type r_value{3}; + r_min.join(data, r_value); + REQUIRE(data == 0); + } + + { + data = 0; + data_type r_value{-5}; + r_min.join(data, r_value); + REQUIRE(data == -5); + } + + REQUIRE((r_min == -3)); + + REQUIRE((ReduceMin(a) == -3)); + } + + SECTION("ReduceMax") { + ReduceMax r_max(a); + data_type data; + + r_max.init(data); + REQUIRE(data == -std::numeric_limits<data_type>::max()); + + r_max(3,data); + REQUIRE(data == -3); + r_max(5,data); + REQUIRE(data == -1); + r_max(8,data); + REQUIRE(data == 12); + + { + data = 0; + data_type r_value{3}; + r_max.join(data, r_value); + REQUIRE(data == 3); + } + + { + data = 0; + data_type r_value{-5}; + r_max.join(data, r_value); + REQUIRE(data == 0); + } + + REQUIRE((r_max == 23)); + + REQUIRE((ReduceMax(a) == 23)); + } + } }