From 4a2d2b3b6b12d030ac58593ec9cb78c7957e0607 Mon Sep 17 00:00:00 2001
From: NAUD Maxence <maxence.naud@cea.fr>
Date: Thu, 29 Feb 2024 18:00:56 +0000
Subject: [PATCH] Remove tests that assessed Tensor functions and not
 TensorImpl functions from Test_TensorImpl

---
 unit_tests/backend/Test_TensorImpl.cpp | 172 +---------------
 unit_tests/data/Test_TensorImpl.cpp    | 266 -------------------------
 2 files changed, 2 insertions(+), 436 deletions(-)
 delete mode 100644 unit_tests/data/Test_TensorImpl.cpp

diff --git a/unit_tests/backend/Test_TensorImpl.cpp b/unit_tests/backend/Test_TensorImpl.cpp
index 2f9deb8d7..fef9c7d20 100644
--- a/unit_tests/backend/Test_TensorImpl.cpp
+++ b/unit_tests/backend/Test_TensorImpl.cpp
@@ -23,182 +23,14 @@
 
 using namespace Aidge;
 
-TEST_CASE("[backend/cpu/data] Tensor", "[Tensor]") {
-    Tensor x;
-
-    SECTION("TensorUtils, constructor from const arrays") {
-        // construction from different types and sizes
-        REQUIRE_NOTHROW(x = Array1D<int, 2>{{1, 2}});
-        x.print();
-        REQUIRE_NOTHROW(x = Array2D<int, 2, 2>{{{1, 2}, {3, 4}}});
-        x.print();
-        REQUIRE_NOTHROW(x = Array3D<std::uint8_t, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}});
-        REQUIRE_NOTHROW(x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}});
-        REQUIRE_NOTHROW(x = Array3D<float, 2, 2, 2>{{{{1.0f, 2.0f}, {3.0f, 4.0f}}, {{5.0f, 6.0f}, {7.0f, 8.0f}}}});
-        REQUIRE_NOTHROW(x = Array3D<double, 2, 2, 2>{{{{1., 2.}, {3., 4.}}, {{5., 6.}, {7., 8.}}}});
-
-        REQUIRE_NOTHROW(x = Array4D<int, 2, 2, 2, 2>{{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}},
-                                                    {{{9,10}, {11,12}}, {{13,14},{15,16}}}}});
-    }
-    x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-
-
-    SECTION("Tensor features") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE(x.nbDims() == 3);
-        REQUIRE(x.dims()[0] == 2);
-        REQUIRE(x.dims()[1] == 2);
-        REQUIRE(x.dims()[2] == 2);
-        REQUIRE(x.size() == 8);
-    }
+TEST_CASE("[backend/cpu/data] Tensor", "[TensorImpl]") {
+    Tensor x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
 
     SECTION("Access to array") {
         x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
         REQUIRE(static_cast<int *>(x.getImpl()->rawPtr())[0] == 1);
         REQUIRE(static_cast<int *>(x.getImpl()->rawPtr())[7] == 8);
     }
-
-    SECTION("get function") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE(x.get<int>({0, 0, 0}) == 1);
-        REQUIRE(x.get<int>({0, 0, 1}) == 2);
-        REQUIRE(x.get<int>({0, 1, 1}) == 4);
-        REQUIRE(x.get<int>({1, 1, 0}) == 7);
-        x.set<int>({1, 1, 1}, 36);
-        REQUIRE(x.get<int>(7) == 36);
-        x.set<int>(7, 40);
-        REQUIRE(x.get<int>({1, 1, 1}) == 40);
-    }
-
-    SECTION("Pretty printing for debug") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE_NOTHROW(x.print());
-    }
-
-    SECTION("Tensor (in)equality") {
-        Tensor xCopy = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        Tensor xFloat = Array3D<float, 2, 2, 2>{{{{1.0f, 2.0f}, {3.0f, 4.0f}}, {{5.0f, 6.0f}, {7.0f, 8.0f}}}};
-
-        REQUIRE(x == xCopy);
-        REQUIRE_FALSE(x == xFloat);
-    }
-
-    constexpr std::uint16_t NBTRIALS = 10;
-
-    // Create a random number generator
-    std::random_device rd;
-    std::mt19937 gen(rd());
-    std::uniform_int_distribution<std::size_t> dist(1, 10);
-    std::uniform_int_distribution<std::size_t> nbDims(1, 5);
-
-    x.setDataType(DataType::Int32);
-    x.setBackend("cpu");
-
-    SECTION("Tensor sharing") {
-        for (std::uint16_t trial = 0; trial < NBTRIALS; ++trial) {
-            // create Tensor
-            const std::size_t nb_dims = nbDims(gen) + 1;
-            std::vector<std::size_t> dims(nb_dims);
-            for (std::size_t i = 0; i < nb_dims; ++i) {
-                dims[i] = dist(gen);
-            }
-            x.resize(dims);
-
-            // copy constructor
-            Tensor xCopyCtor(x);
-            REQUIRE(xCopyCtor.getImpl() == x.getImpl());
-
-            // copy assignment operator
-            Tensor xCopyAssignmentOp = x;
-            REQUIRE(xCopyAssignmentOp.getImpl() == x.getImpl());
-
-            Tensor xCloned = x.clone();
-            REQUIRE(xCloned.getImpl() != x.getImpl());
-            REQUIRE(xCloned == x);
-        }
-    }
-    SECTION("zeros()") {
-        for (std::uint16_t trial = 0; trial < NBTRIALS; ++trial) {
-            // create Tensor
-            constexpr std::size_t nb_dims = 3;
-            const std::size_t dim0 = nbDims(gen);
-            const std::size_t dim1 = nbDims(gen);
-            const std::size_t dim2 = nbDims(gen);
-            const std::vector<std::size_t> dims = {dim0, dim1, dim2};
-            int array0[dim0][dim1][dim2];
-            for (std::size_t i = 0; i < dim0; ++i) {
-                for (std::size_t j = 0; j < dim1; ++j) {
-                    for (std::size_t k = 0; k < dim2; ++k) {
-                        array0[i][j][k] = dist(gen);
-                    }
-                }
-            }
-            x.resize(dims);
-
-            x.zeros();
-            for (std::size_t i = 0; i < dim0; ++i) {
-                for (std::size_t j = 0; j < dim1; ++j) {
-                    const std::size_t idx = (i * dim1 + j) * dim2;
-                    for (std::size_t k = 0; k < dim2; ++k) {
-                        int val = *static_cast<int*>(x.getImpl()->hostPtr(idx + k));
-                        if (val != 0) {
-                            throw std::runtime_error("Value should be 0");
-                        }
-                        // REQUIRE(*static_cast<int*>(x.getImpl()->hostPtr(idx + k)) == 0);
-                    }
-                }
-            }
-        }
-    }
-
-    SECTION("Tensor extract") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        Tensor y;
-        Tensor y0;
-        Tensor y1;
-        Tensor y2;
-        Tensor y3;
-
-        for (std::uint16_t trial = 0; trial < NBTRIALS; ++trial) {
-            // create Tensor
-            const std::size_t nb_dims = 3;
-            const std::size_t dim0 = nbDims(gen) + 1; // dim0 >= 2
-            const std::size_t dim1 = nbDims(gen) + 1;
-            const std::size_t dim2 = nbDims(gen) + 1;
-            std::vector<std::size_t> dims = {dim0, dim1, dim2};
-            int array0[dim0][dim1][dim2];
-            for (std::size_t i = 0; i < dim0; ++i) {
-                for (std::size_t j = 0; j < dim1; ++j) {
-                    for (std::size_t k = 0; k < dim2; ++k) {
-                        array0[i][j][k] = dist(gen);
-                    }
-                }
-            }
-            x.resize(dims);
-
-            REQUIRE(x.isContiguous());
-            // extract Tensor slice from one set of coordinates
-            REQUIRE_NOTHROW(y0 = x.extract({}));
-            REQUIRE_NOTHROW(y1 = x.extract({nbDims(gen)}));
-            REQUIRE_NOTHROW(y2 = x.extract({nbDims(gen), nbDims(gen)}));
-            REQUIRE_NOTHROW(y3 = x.extract({nbDims(gen), nbDims(gen), nbDims(gen)}));
-            REQUIRE_THROWS(y = x.extract({0, dim0 + 1, 0}));
-
-            REQUIRE_NOTHROW(y = x.extract({0, 1}));
-            REQUIRE(y.getImpl() == x.getImpl()); // shared implem
-            REQUIRE(!y.isContiguous());
-
-            Tensor yClone = y.clone(); // when copying data, they are contiguous in memory
-            REQUIRE(yClone.isContiguous());
-            // int yTruth[2][1][1] =
-            REQUIRE(approxEq<int>(yClone, Array3D<int, 2, 1, 1>{{{{4}}, {{8}}}}));
-
-            y = x.extract({0, 1});
-            REQUIRE(y.getImpl() == x.getImpl());
-            REQUIRE(approxEq<int>(y, Array1D<int, 2>{{3, 4}}));
-            REQUIRE(y.isContiguous());
-        }
-    }
 }
 
 TEST_CASE("Tensor fill") {
diff --git a/unit_tests/data/Test_TensorImpl.cpp b/unit_tests/data/Test_TensorImpl.cpp
deleted file mode 100644
index 725565312..000000000
--- a/unit_tests/data/Test_TensorImpl.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/********************************************************************************
- * Copyright (c) 2023 CEA-List
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- ********************************************************************************/
-
-#include <array>
-#include <cstddef>
-#include <cstdint>  //std::uint16_t
-#include <random>
-#include <vector>
-
-#include <catch2/catch_test_macros.hpp>
-
-#include "aidge/data/Tensor.hpp"
-#include "aidge/utils/TensorUtils.hpp"
-#include "aidge/backend/cpu/data/TensorImpl.hpp"
-
-using namespace Aidge;
-
-TEST_CASE("[backend/cpu/data] Tensor", "[Tensor]") {
-    Tensor x;
-
-    SECTION("TensorUtils, constructor from const arrays") {
-        // construction from different types and sizes
-        REQUIRE_NOTHROW(x = Array1D<int, 2>{{1, 2}});
-        x.print();
-        REQUIRE_NOTHROW(x = Array2D<int, 2, 2>{{{1, 2}, {3, 4}}});
-        x.print();
-        REQUIRE_NOTHROW(x = Array3D<std::uint8_t, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}});
-        REQUIRE_NOTHROW(x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}});
-        REQUIRE_NOTHROW(x = Array3D<float, 2, 2, 2>{{{{1.0f, 2.0f}, {3.0f, 4.0f}}, {{5.0f, 6.0f}, {7.0f, 8.0f}}}});
-        REQUIRE_NOTHROW(x = Array3D<double, 2, 2, 2>{{{{1., 2.}, {3., 4.}}, {{5., 6.}, {7., 8.}}}});
-
-        REQUIRE_NOTHROW(x = Array4D<int, 2, 2, 2, 2>{{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}},
-                                                    {{{9,10}, {11,12}}, {{13,14},{15,16}}}}});
-    }
-    x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-
-
-    SECTION("Tensor features") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE(x.nbDims() == 3);
-        REQUIRE(x.dims()[0] == 2);
-        REQUIRE(x.dims()[1] == 2);
-        REQUIRE(x.dims()[2] == 2);
-        REQUIRE(x.size() == 8);
-    }
-
-    SECTION("Access to array") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE(static_cast<int *>(x.getImpl()->rawPtr())[0] == 1);
-        REQUIRE(static_cast<int *>(x.getImpl()->rawPtr())[7] == 8);
-    }
-
-    SECTION("get function") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE(x.get<int>({0, 0, 0}) == 1);
-        REQUIRE(x.get<int>({0, 0, 1}) == 2);
-        REQUIRE(x.get<int>({0, 1, 1}) == 4);
-        REQUIRE(x.get<int>({1, 1, 0}) == 7);
-        x.set<int>({1, 1, 1}, 36);
-        REQUIRE(x.get<int>(7) == 36);
-        x.set<int>(7, 40);
-        REQUIRE(x.get<int>({1, 1, 1}) == 40);
-    }
-
-    SECTION("Pretty printing for debug") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        REQUIRE_NOTHROW(x.print());
-    }
-
-TEST_CASE("Tensor fill") {
-  SECTION("Instantiate batches independantly") {
-    // initialization with 0s
-    std::shared_ptr<Tensor> concatenatedTensor= std::make_shared<Tensor>(Array2D<int, 3, 5>{});
-    //concatenatedTensor->print();
-
-    std::shared_ptr<Tensor> myTensor1 = std::make_shared<Tensor>(Array1D<int, 5>{{1,2,3,4,5}});
-    std::shared_ptr<Tensor> myTensor2 = std::make_shared<Tensor>(Array1D<int, 5>{{6,7,8,9,10}});
-    std::shared_ptr<Tensor> myTensor3 = std::make_shared<Tensor>(Array1D<int, 5>{{11,12,13,14,15}});
-
-    // use copy function from implementation
-    concatenatedTensor->getImpl()->copy(myTensor1->getImpl()->rawPtr(), 5, 0);
-    concatenatedTensor->getImpl()->copy(myTensor2->getImpl()->rawPtr(), 5, 5);
-    concatenatedTensor->getImpl()->copy(myTensor3->getImpl()->rawPtr(), 5, 10);
-    // concatenatedTensor->print();
-
-    std::shared_ptr<Tensor> expectedTensor= std::make_shared<Tensor>(Array2D<int, 3, 5>{
-      {{1,2,3,4,5},
-      {6,7,8,9,10},
-      {11,12,13,14,15}}
-    });
-    // expectedTensor->print();
-
-    REQUIRE(*concatenatedTensor == *expectedTensor);
-  }
-}
-
-TEST_CASE("[core/data] Tensor methods","[Tensor]") {
-  Tensor x = Array3D<int, 2, 2, 2>{{
-    {{1, 2},
-     {3, 4}},
-    {{5, 6},
-     {7, 8}}
-  }};
-
-  Tensor xCopy = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-
-    SECTION("Tensor (in)equality") {
-        Tensor xCopy = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        Tensor xFloat = Array3D<float, 2, 2, 2>{{{{1.0f, 2.0f}, {3.0f, 4.0f}}, {{5.0f, 6.0f}, {7.0f, 8.0f}}}};
-
-        REQUIRE(x == xCopy);
-        REQUIRE_FALSE(x == xFloat);
-    }
-
-    constexpr std::uint16_t NBTRIALS = 10;
-
-    // Create a random number generator
-    std::random_device rd;
-    std::mt19937 gen(rd());
-    std::uniform_int_distribution<std::size_t> dist(1, 10);
-    std::uniform_int_distribution<std::size_t> nbDims(1, 5);
-
-    x.setDataType(DataType::Int32);
-    x.setBackend("cpu");
-
-    SECTION("Tensor sharing") {
-        for (std::uint16_t trial = 0; trial < NBTRIALS; ++trial) {
-            // create Tensor
-            const std::size_t nb_dims = nbDims(gen) + 1;
-            std::vector<std::size_t> dims(nb_dims);
-            for (std::size_t i = 0; i < nb_dims; ++i) {
-                dims[i] = dist(gen);
-            }
-            x.resize(dims);
-
-            // copy constructor
-            Tensor xCopyCtor(x);
-            REQUIRE(xCopyCtor.getImpl() == x.getImpl());
-
-            // copy assignment operator
-            Tensor xCopyAssignmentOp = x;
-            REQUIRE(xCopyAssignmentOp.getImpl() == x.getImpl());
-
-            Tensor xCloned = x.clone();
-            REQUIRE(xCloned.getImpl() != x.getImpl());
-            REQUIRE(xCloned == x);
-        }
-    }
-    SECTION("zeros()") {
-        for (std::uint16_t trial = 0; trial < NBTRIALS; ++trial) {
-            // create Tensor
-            constexpr std::size_t nb_dims = 3;
-            const std::size_t dim0 = nbDims(gen);
-            const std::size_t dim1 = nbDims(gen);
-            const std::size_t dim2 = nbDims(gen);
-            const std::vector<std::size_t> dims = {dim0, dim1, dim2};
-            int array0[dim0][dim1][dim2];
-            for (std::size_t i = 0; i < dim0; ++i) {
-                for (std::size_t j = 0; j < dim1; ++j) {
-                    for (std::size_t k = 0; k < dim2; ++k) {
-                        array0[i][j][k] = dist(gen);
-                    }
-                }
-            }
-            x.resize(dims);
-
-            x.zeros();
-            for (std::size_t i = 0; i < dim0; ++i) {
-                for (std::size_t j = 0; j < dim1; ++j) {
-                    const std::size_t idx = (i * dim1 + j) * dim2;
-                    for (std::size_t k = 0; k < dim2; ++k) {
-                        int val = *static_cast<int*>(x.getImpl()->hostPtr(idx + k));
-                        if (val != 0) {
-                            throw std::runtime_error("Value should be 0");
-                        }
-                        // REQUIRE(*static_cast<int*>(x.getImpl()->hostPtr(idx + k)) == 0);
-                    }
-                }
-            }
-        }
-    }
-
-    SECTION("Tensor extract") {
-        x = Array3D<int, 2, 2, 2>{{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}};
-        Tensor y;
-        Tensor y0;
-        Tensor y1;
-        Tensor y2;
-        Tensor y3;
-
-        for (std::uint16_t trial = 0; trial < NBTRIALS; ++trial) {
-            // create Tensor
-            const std::size_t nb_dims = 3;
-            const std::size_t dim0 = nbDims(gen) + 1; // dim0 >= 2
-            const std::size_t dim1 = nbDims(gen) + 1;
-            const std::size_t dim2 = nbDims(gen) + 1;
-            std::vector<std::size_t> dims = {dim0, dim1, dim2};
-            int array0[dim0][dim1][dim2];
-            for (std::size_t i = 0; i < dim0; ++i) {
-                for (std::size_t j = 0; j < dim1; ++j) {
-                    for (std::size_t k = 0; k < dim2; ++k) {
-                        array0[i][j][k] = dist(gen);
-                    }
-                }
-            }
-            x.resize(dims);
-
-            REQUIRE(x.isContiguous());
-            // extract Tensor slice from one set of coordinates
-            REQUIRE_NOTHROW(y0 = x.extract({}));
-            REQUIRE_NOTHROW(y1 = x.extract({nbDims(gen)}));
-            REQUIRE_NOTHROW(y2 = x.extract({nbDims(gen), nbDims(gen)}));
-            REQUIRE_NOTHROW(y3 = x.extract({nbDims(gen), nbDims(gen), nbDims(gen)}));
-            REQUIRE_THROWS(y = x.extract({0, dim0 + 1, 0}));
-
-            REQUIRE_NOTHROW(y = x.extract({0, 1}));
-            REQUIRE(y.getImpl() == x.getImpl()); // shared implem
-            REQUIRE(!y.isContiguous());
-
-            Tensor yClone = y.clone(); // when copying data, they are contiguous in memory
-            REQUIRE(yClone.isContiguous());
-            // int yTruth[2][1][1] =
-            REQUIRE(approxEq<int>(yClone, Array3D<int, 2, 1, 1>{{{{4}}, {{8}}}}));
-
-            y = x.extract({0, 1});
-            REQUIRE(y.getImpl() == x.getImpl());
-            REQUIRE(approxEq<int>(y, Array1D<int, 2>{{3, 4}}));
-            REQUIRE(y.isContiguous());
-        }
-    }
-}
-
-TEST_CASE("Tensor fill") {
-  SECTION("Instantiate batches independantly") {
-    // initialization with 0s
-    std::shared_ptr<Tensor> concatenatedTensor= std::make_shared<Tensor>(Array2D<int, 3, 5>{});
-    //concatenatedTensor->print();
-
-    std::shared_ptr<Tensor> myTensor1 = std::make_shared<Tensor>(Array1D<int, 5>{{1,2,3,4,5}});
-    std::shared_ptr<Tensor> myTensor2 = std::make_shared<Tensor>(Array1D<int, 5>{{6,7,8,9,10}});
-    std::shared_ptr<Tensor> myTensor3 = std::make_shared<Tensor>(Array1D<int, 5>{{11,12,13,14,15}});
-
-    // use copy function from implementation
-    concatenatedTensor->getImpl()->copy(myTensor1->getImpl()->rawPtr(), 5, 0);
-    concatenatedTensor->getImpl()->copy(myTensor2->getImpl()->rawPtr(), 5, 5);
-    concatenatedTensor->getImpl()->copy(myTensor3->getImpl()->rawPtr(), 5, 10);
-    // concatenatedTensor->print();
-
-    std::shared_ptr<Tensor> expectedTensor= std::make_shared<Tensor>(Array2D<int, 3, 5>{
-      {{1,2,3,4,5},
-      {6,7,8,9,10},
-      {11,12,13,14,15}}
-    });
-    // expectedTensor->print();
-
-    REQUIRE(*concatenatedTensor == *expectedTensor);
-  }
-}
-- 
GitLab