diff --git a/unit_tests/data/Test_Interpolation.cpp b/unit_tests/data/Test_Interpolation.cpp
index 5c3b56f02ab17092a6ba238cc74e1bf75e203718..4886885d7d979c7ea4aaa70a33d75cb553b361de 100644
--- a/unit_tests/data/Test_Interpolation.cpp
+++ b/unit_tests/data/Test_Interpolation.cpp
@@ -9,15 +9,21 @@
  *
  ********************************************************************************/
 
-#include <aidge/backend/cpu/data/Interpolation.hpp>
-#include <aidge/data/Interpolation.hpp>
-#include <aidge/data/Tensor.hpp>
-#include <aidge/filler/Filler.hpp>
-#include <aidge/utils/Types.h>
-#include <catch2/catch_test_macros.hpp>
+#include <cmath>   // std::fabs
+#include <cstdlib> // std::abs
 #include <limits>
+#include <memory>
+#include <set>
+#include <vector>
+
+#include <catch2/catch_test_macros.hpp>
 
 #include "aidge/backend/cpu/data/Interpolation.hpp"
+#include "aidge/data/Interpolation.hpp"
+#include "aidge/data/Tensor.hpp"
+#include "aidge/filler/Filler.hpp"
+#include "aidge/utils/Types.h"
+#include "aidge/utils/TensorUtils.hpp"
 
 namespace Aidge {
 
@@ -30,12 +36,12 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
         SECTION("1D") {
             pointsToInterpolateInt =
                 std::set<Interpolation::Point<int>>({{{0}, 10}, {{1}, 20}});
-            CHECK(abs(InterpolationCPU::linear({0.5}, pointsToInterpolateInt) -
+            REQUIRE(std::abs(InterpolationCPU::linear({0.5}, pointsToInterpolateInt) -
                       15) <= std::numeric_limits<int>::epsilon());
 
             pointsToInterpolateFloat = std::set<Interpolation::Point<float>>(
                 {{{0}, .0F}, {{1}, 0.2F}});
-            CHECK(fabs(InterpolationCPU::linear({0.3},
+            REQUIRE(std::fabs(InterpolationCPU::linear({0.3},
                                                 pointsToInterpolateFloat) -
                        .06F) <= 1e-5);
         }
@@ -46,21 +52,21 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
                                         {{14, 21}, 162.F},
                                         {{15, 20}, 210.F},
                                         {{15, 21}, 95.F}};
-            CHECK(fabs(InterpolationCPU::linear<float>(
-                           {14.5F, 20.2F},
-                           pointsToInterpolateFloat) -
-                       146.1) < 1e-5);
+            const Tensor interpolatedValue = Tensor(std::fabs(InterpolationCPU::linear<float>(
+                {14.5F, 20.2F},
+                pointsToInterpolateFloat)));
+            REQUIRE(approxEq<float>(interpolatedValue, Tensor(146.1f)));
             // pointsToInterpolateFloat = {{{0, 0}, .10F},
             //                             {{0, 1}, .20F},
             //                             {{1, 0}, .30F},
             //                             {{1, 1}, .40F}};
-            // CHECK(abs(InterpolationCPU::linear<float>({1.5, 0.5},
+            // REQUIRE(std::abs(InterpolationCPU::linear<float>({1.5, 0.5},
             //                                         pointsToInterpolateInt)
             //                                         -
             //           25) < std::numeric_limits<int>::epsilon());
 
             // pointsToInterpolateFloat = std::vector({0.1F, 0.2F, 0.3F,
-            // 0.4F}); CHECK(InterpolationCPU::linear(pointsToInterpolateFloat)
+            // 0.4F}); REQUIRE(InterpolationCPU::linear(pointsToInterpolateFloat)
             // == .25f);
         }
         SECTION("3D") {
@@ -72,7 +78,7 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
                                         {{1, 0, 1}, .6F},
                                         {{1, 1, 0}, .7F},
                                         {{1, 1, 1}, .8F}};
-            CHECK(fabs(InterpolationCPU::linear({.5, .5, .5},
+            REQUIRE(std::fabs(InterpolationCPU::linear({.5, .5, .5},
                                                 pointsToInterpolateFloat) -
                        .45f) < 1e-5);
         }
@@ -94,7 +100,7 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
                                             {{1, 1, 0, 1}, 1.4F},
                                             {{1, 1, 1, 0}, 1.5F},
                                             {{1, 1, 1, 1}, 1.6F}};
-                CHECK(fabs(InterpolationCPU::linear<float>(
+                REQUIRE(std::fabs(InterpolationCPU::linear<float>(
                                {.5, .5, .5, .5},
                                pointsToInterpolateFloat) -
                            .85f) < 0.0001);
@@ -139,25 +145,25 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
                                                       {{4}, 5.0F}};
 
             SECTION("Floor") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::Floor) == 1);
             }
             SECTION("Ceil") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::Ceil) == 2);
             }
             SECTION("RoundPreferFloor") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::RoundPreferFloor) == 1);
             }
             SECTION("RoundPreferCeil") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::RoundPreferCeil) == 2);
@@ -172,26 +178,26 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
                                    {{3, 3}, 50.0},
                                    {{3, 4}, 60.0}};
             SECTION("Floor") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::Floor) == 30.);
             }
             SECTION("Ceil") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::Ceil) == 60.);
             }
             SECTION("RoundPreferFloor") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::RoundPreferFloor) ==
                       40.);
             }
             SECTION("RoundPreferCeil") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::RoundPreferCeil) == 60.);
@@ -207,26 +213,26 @@ TEST_CASE("Interpolation", "[Interpolation][Data]") {
                                    {{2, 3, 4}, 50.0},
                                    {{3, 3, 4}, 60.0}};
             SECTION("Floor") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::Floor) == 10.);
             }
             SECTION("Ceil") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::Ceil) == 50.);
             }
             SECTION("RoundPreferFloor") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::RoundPreferFloor) ==
                       30.);
             }
             SECTION("RoundPreferCeil") {
-                CHECK(InterpolationCPU::nearest(
+                REQUIRE(InterpolationCPU::nearest(
                           coordToInterpolate,
                           pointsToInterpolate,
                           Interpolation::Mode::RoundPreferCeil) == 30.);
diff --git a/unit_tests/operator/Test_ReduceMeanImpl.cpp b/unit_tests/operator/Test_ReduceMeanImpl.cpp
index 30ffeb0dd0b584f50349c206863c7ab9ac776721..8841d6773dc5ce793ca75244fedc18fdf245ca26 100644
--- a/unit_tests/operator/Test_ReduceMeanImpl.cpp
+++ b/unit_tests/operator/Test_ReduceMeanImpl.cpp
@@ -156,7 +156,7 @@ TEST_CASE("[cpu/operator] ReduceMean(forward)", "[ReduceMean][CPU]") {
     }
     SECTION("KeepDims") {
         SECTION("test 1") {
-            std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array3D<float,3,2,2> {
+            std::shared_ptr<Tensor> myInput = std::make_shared<Tensor>(Array3D<cpptype_t<DataType::Float32>,3,2,2> {
                 {
                     {
                         { 5.0, 1.0 },
@@ -172,12 +172,12 @@ TEST_CASE("[cpu/operator] ReduceMean(forward)", "[ReduceMean][CPU]") {
                     }
                 }
             });
-            Tensor myOutput = Tensor(Array3D<float,3,1,2> {
+            Tensor myOutput = Tensor(Array3D<cpptype_t<DataType::Float32>,3,1,2> {
                 {
 
-                    {{ 12.5, 1.5 }},
-                    {{ 35.0, 1.5 }},
-                    {{ 57.5, 1.5 }}
+                    {{ 12.5f, 1.5f }},
+                    {{ 35.0f, 1.5f }},
+                    {{ 57.5f, 1.5f }}
                 }
             });
 
diff --git a/unit_tests/scheduler/Test_Scheduler.cpp b/unit_tests/scheduler/Test_Scheduler.cpp
index be87e8ac77020b5c05469fb959752a66512e6ffb..eed4185d7ac98107f6811f38d7f37851cb6801af 100644
--- a/unit_tests/scheduler/Test_Scheduler.cpp
+++ b/unit_tests/scheduler/Test_Scheduler.cpp
@@ -482,7 +482,7 @@ TEST_CASE("[cpu/scheduler] Accumulate", "[scheduler]") {
                                  {{2.0, 3.0}, {4.0, 5.0}, {6.0, 7.0}}}});
 
     std::shared_ptr<Tensor> MemInit =
-        std::make_shared<Tensor>(Array2D<float, 3, 2>{
+        std::make_shared<Tensor>(Array2D<cpptype_t<DataType::Float32>, 3, 2>{
             {{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}}});
 
     auto meta = Accumulate(2, "accumulate");
@@ -517,14 +517,14 @@ TEST_CASE("[cpu/scheduler] Accumulate", "[scheduler]") {
     REQUIRE_NOTHROW(scheduler.forward(true));
 
     std::shared_ptr<Tensor> expectedOutput = std::make_shared<Tensor>(
-        Array2D<float, 3, 2>{{{3.0, 5.0}, {7.0, 9.0}, {11.0, 13.0}}});
+        Array2D<cpptype_t<DataType::Float32>, 3, 2>{{{3.0, 5.0}, {7.0, 9.0}, {11.0, 13.0}}});
     std::shared_ptr<Tensor> output = std::static_pointer_cast<OperatorTensor>(pop_o->getOperator())->getOutput(0);
     REQUIRE(*output == *expectedOutput);
 }
 
 TEST_CASE("[cpu/scheduler] Branch", "[scheduler]") {
     std::shared_ptr<Tensor> in = std::make_shared<Tensor>(
-            Array2D<float, 2, 3>{{{1, 2, 3}, {4, 5, 6}}});
+            Array2D<cpptype_t<DataType::Float32>, 2, 3>{{{1, 2, 3}, {4, 5, 6}}});
 
     std::shared_ptr<GraphView> g = Sequential({
         Producer(in, "input"),
@@ -576,7 +576,7 @@ TEST_CASE("[cpu/scheduler] Branch", "[scheduler]") {
 #ifdef WITH_OPENSSL
 TEST_CASE("[cpu/scheduler] Select", "[scheduler]") {
     std::shared_ptr<Tensor> in = std::make_shared<Tensor>(
-            Array2D<float, 2, 3>{{{1, 2, 3}, {4, 5, 6}}});
+            Array2D<cpptype_t<DataType::Float32>, 2, 3>{{{1, 2, 3}, {4, 5, 6}}});
 
     std::shared_ptr<GraphView> g = Sequential({
         Producer(in, "input"),
@@ -605,21 +605,21 @@ TEST_CASE("[cpu/scheduler] Select", "[scheduler]") {
     scheduler.generateScheduling();
     scheduler.saveStaticSchedulingDiagram("select_scheduling");
     REQUIRE_NOTHROW(scheduler.forward(true));
-    
+
     g->save("select_forwarded");
 
     auto expectedOutputHash = std::make_shared<Tensor>(
-        Array1D<uint64_t, 4>{{0x1b7cf58dfe2dae24, 0x3bac903def4ce580, 0x5f5a347389d97f41, 0x2c2dc759abc6b61}});
+        Array1D<cpptype_t<DataType::UInt64>, 4>{{0x1b7cf58dfe2dae24, 0x3bac903def4ce580, 0x5f5a347389d97f41, 0x2c2dc759abc6b61}});
     auto outputHash = std::static_pointer_cast<OperatorTensor>(g->getNode("hash")->getOperator())->getOutput(0);
     REQUIRE(*outputHash == *expectedOutputHash);
 
     auto expectedOutputMod = std::make_shared<Tensor>(
-        Array1D<uint64_t, 4>{{2, 1, 1, 2}});
+        Array1D<cpptype_t<DataType::UInt64>, 4>{{2, 1, 1, 2}});
     auto outputMod = std::static_pointer_cast<OperatorTensor>(g->getNode("mod")->getOperator())->getOutput(0);
     REQUIRE(*outputMod == *expectedOutputMod);
 
     auto expectedOutput = std::make_shared<Tensor>(
-        Array2D<float, 2, 3>{{{std::sqrt(1), std::sqrt(2), std::sqrt(3)}, {std::sqrt(4), std::sqrt(5), std::sqrt(6)}}});
+        Array2D<cpptype_t<DataType::Float32>, 2, 3>{{{std::sqrt(1.0f), std::sqrt(2.0f), std::sqrt(3.0f)}, {std::sqrt(4.0f), std::sqrt(5.0f), std::sqrt(6.0f)}}});
     auto output = std::static_pointer_cast<OperatorTensor>(g->getNode("select")->getOperator())->getOutput(0);
     REQUIRE(*output == *expectedOutput);