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));
+    }
+  }
 }