diff --git a/src/algebra/IntegrationTools.hpp b/src/algebra/IntegrationTools.hpp
deleted file mode 100644
index 77e79851e0a8000807f6901373c8801c26130bb2..0000000000000000000000000000000000000000
--- a/src/algebra/IntegrationTools.hpp
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifndef INTEGRATION_TOOLS_HPP
-#define INTEGRATION_TOOLS_HPP
-
-#include <language/utils/EvaluateAtPoints.hpp>
-#include <utils/Exceptions.hpp>
-#include <utils/PugsAssert.hpp>
-#include <utils/PugsMacros.hpp>
-#include <utils/Types.hpp>
-
-#include <analysis/QuadratureManager.hpp>
-#include <analysis/QuadratureType.hpp>
-#include <analysis/TensorialGaussLegendreQuadrature.hpp>
-#include <analysis/TensorialGaussLobattoQuadrature.hpp>
-
-#include <cmath>
-
-template <size_t Order, typename T = double>
-class IntegrationTools
-{
- public:
-  using data_type = T;
-  SmallArray<const double> m_weights;
-  SmallArray<const TinyVector<1>> m_quadrature_positions;
-
- public:
-  PUGS_INLINE T
-  integrate(const FunctionSymbolId& function, const double& a, const double& b) const
-  {
-    T result                                  = 0;
-    SmallArray<const TinyVector<1>> positions = quadraturePoints(a, b);
-    SmallArray<const double> weights          = m_weights;
-    SmallArray<T> values(positions.size());
-    EvaluateAtPoints<double(const TinyVector<1>)>::evaluateTo(function, positions, values);
-    Assert(positions.size() == weights.size(), "Wrong number of quadrature points and/or weights in Gauss quadrature");
-    for (size_t i = 0; i < values.size(); ++i) {
-      result += weights[i] * values[i];
-    }
-    return (b - a) / 2 * result;
-  }
-
-  PUGS_INLINE SmallArray<T>
-  integrateFunction(const FunctionSymbolId& function, const SmallArray<TinyVector<1>>& vertices) const
-  {
-    SmallArray<const TinyVector<1>> positions = quadraturePoints(vertices);
-    SmallArray<T> result{vertices.size() - 1};
-    SmallArray<double> interval_size{vertices.size() - 1};
-    SmallArray<const double> weights = m_weights;
-    SmallArray<T> values(positions.size());
-    EvaluateAtPoints<double(const TinyVector<1>)>::evaluateTo(function, positions, values);
-
-    for (size_t i = 0; i < interval_size.size(); ++i) {
-      interval_size[i] = vertices[i + 1][0] - vertices[i][0];
-    }
-    for (size_t i = 0; i < interval_size.size(); ++i) {
-      for (size_t j = 0; j < weights.size(); j++) {
-        result[i] += 0.5 * interval_size[i] * weights[j] * values[i * weights.size() + j];
-      }
-    }
-    return result;
-  }
-
-  PUGS_INLINE T
-  testIntegrate(const double& a, const double& b) const
-  {
-    T result                                  = 0;
-    SmallArray<const TinyVector<1>> positions = quadraturePoints(a, b);
-
-    SmallArray<const double> weights = m_weights;
-
-    SmallArray<T> values(weights.size());
-    for (size_t j = 0; j < weights.size(); ++j) {
-      values[j] = std::pow(positions[j][0], 3.);
-    }
-
-    Assert(positions.size() == weights.size(), "Wrong number of quadrature points and/or weights in Gauss quadrature");
-    for (size_t i = 0; i < values.size(); ++i) {
-      result += weights[i] * values[i];
-    }
-
-    return 0.5 * (b - a) * result;
-  }
-
-  PUGS_INLINE SmallArray<T>
-  testIntegrateFunction(const SmallArray<TinyVector<1>>& vertices) const
-  {
-    SmallArray<const TinyVector<1>> positions = quadraturePoints(vertices);
-    SmallArray<double> interval_size{vertices.size() - 1};
-    SmallArray<const double> weights = this->weights();
-    SmallArray<T> values(positions.size());
-    for (size_t j = 0; j < positions.size(); ++j) {
-      values[j] = std::pow(positions[j][0], 3);
-    }
-
-    for (size_t i = 0; i < interval_size.size(); ++i) {
-      interval_size[i] = vertices[i + 1][0] - vertices[i][0];
-    }
-    SmallArray<T> result{vertices.size() - 1};
-    if constexpr (std::is_arithmetic_v<T>) {
-      result.fill(0);
-    } else if constexpr (is_tiny_vector_v<T> or is_tiny_matrix_v<T>) {
-      result.fill(zero);
-    } else {
-      static_assert(std::is_arithmetic_v<T>, "incorrect data type");
-    }
-    for (size_t i = 0; i < interval_size.size(); ++i) {
-      for (size_t j = 0; j < weights.size(); j++) {
-        result[i] += 0.5 * interval_size[i] * weights[j] * values[i * weights.size() + j];
-      }
-    }
-    return result;
-  }
-
-  PUGS_INLINE SmallArray<const TinyVector<1>>
-  quadraturePoints(const double& a, const double& b) const
-  {
-    SmallArray<TinyVector<1>> points{m_quadrature_positions.size()};
-    double length = b - a;
-    for (size_t i = 0; i < m_quadrature_positions.size(); i++) {
-      TinyVector<1> qpos{m_quadrature_positions[i]};
-      points[i] = 0.5 * (length * qpos + a + b);
-    }
-    return points;
-  }
-
-  PUGS_INLINE
-  SmallArray<TinyVector<1>>
-  quadraturePoints(const SmallArray<TinyVector<1>>& positions) const
-  {
-    size_t number_of_intervals = positions.size() - 1;
-    size_t quadrature_size     = m_quadrature_positions.size();
-    SmallArray<TinyVector<1>> quadratures{quadrature_size * number_of_intervals};
-    for (size_t j = 0; j < number_of_intervals; ++j) {
-      double a                    = positions[j][0];
-      double b                    = positions[j + 1][0];
-      auto intermediate_positions = this->quadraturePoints(a, b);
-      for (size_t k = 0; k < quadrature_size; k++) {
-        quadratures[j * quadrature_size + k] = intermediate_positions[k];
-      }
-    }
-    return quadratures;
-  }
-
-  PUGS_INLINE SmallArray<const double>
-  weights() const
-  {
-    return m_weights;
-  }
-
-  PUGS_INLINE
-  constexpr size_t
-  order() const
-  {
-    return Order;
-  }
-
-  PUGS_INLINE
-  IntegrationTools(QuadratureType quadrature)
-  {
-    switch (quadrature) {
-    case QuadratureType::GaussLobatto: {
-      auto tensorial_gauss_lobatto = QuadratureManager::instance().getLineGaussLobattoFormula(Order);
-
-      m_quadrature_positions = tensorial_gauss_lobatto.pointList();
-      m_weights              = tensorial_gauss_lobatto.weightList();
-      break;
-    }
-    case QuadratureType::GaussLegendre: {
-      auto tensorial_gauss_legendre = QuadratureManager::instance().getLineGaussLegendreFormula(Order);
-
-      m_quadrature_positions = tensorial_gauss_legendre.pointList();
-      m_weights              = tensorial_gauss_legendre.weightList();
-      break;
-    }
-    case QuadratureType::QT__end: {
-      throw NormalError("QuadratureType is not defined!");
-    }
-    default: {
-    }
-    }
-  }
-
-  // One does not use the '=default' constructor to avoid
-  // (zero-initialization) performances issues
-  PUGS_INLINE
-  constexpr IntegrationTools() noexcept {}
-
-  PUGS_INLINE
-  constexpr IntegrationTools(const IntegrationTools&) noexcept = default;
-
-  PUGS_INLINE
-  constexpr IntegrationTools(IntegrationTools&& v) noexcept = default;
-
-  PUGS_INLINE
-  ~IntegrationTools() noexcept = default;
-};
-
-#endif   // INTEGRATION_TOOLS_HPP
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index ba8ceb6c279f71dddff992aa4aebac11a629f79c..edd77f19444d13ec9024241d686eaa66085f6ada 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -73,7 +73,6 @@ add_executable (unit_tests
   test_EmbeddedData.cpp
   test_EmbeddedIDiscreteFunctionUtils.cpp
   test_EscapedString.cpp
-  test_FunctionEvaluation.cpp
   test_Exceptions.cpp
   test_ExecutionPolicy.cpp
   test_FakeProcessor.cpp
diff --git a/tests/test_FunctionEvaluation.cpp b/tests/test_FunctionEvaluation.cpp
deleted file mode 100644
index 5702f2a2a1da295b853c086bdb342d0106d62fce..0000000000000000000000000000000000000000
--- a/tests/test_FunctionEvaluation.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-#include <catch2/catch_approx.hpp>
-#include <catch2/catch_test_macros.hpp>
-
-#include <algebra/IntegrationTools.hpp>
-#include <algebra/TinyVector.hpp>
-#include <language/utils/EvaluateAtPoints.hpp>
-#include <language/utils/FunctionSymbolId.hpp>
-#include <language/utils/SymbolTable.hpp>
-#include <utils/PugsAssert.hpp>
-
-// clazy:excludeall=non-pod-global-static
-
-TEST_CASE("IntegrationTools", "[integration]")
-{
-  IntegrationTools<2> integrationtools(QuadratureType::GaussLobatto);
-  double a = 1;
-  double b = 2;
-
-  SmallArray<TinyVector<1>> vertices(4);
-  for (size_t i = 0; i < 4; i++) {
-    vertices[0] = {a};
-    vertices[1] = {b};
-    vertices[2] = {b};
-    vertices[3] = {a};
-  }
-  SECTION("Order")
-  {
-    size_t order = integrationtools.order();
-    REQUIRE(order == 2);
-  }
-  SECTION("QuadraturePoints")
-  {
-    SmallArray<const TinyVector<1>> quadratures = integrationtools.quadraturePoints(a, b);
-    REQUIRE(quadratures[0] == 1);
-    REQUIRE(quadratures[1] == 1.5);
-    REQUIRE(quadratures[2] == 2);
-  }
-  SECTION("Weights")
-  {
-    SmallArray<const double> weights = integrationtools.weights();
-    REQUIRE(((weights[0] == 1. / 3.) and (weights[1] == 4. / 3.) and (weights[2] == 1. / 3.)));
-  }
-  SECTION("TestOrder3")
-  {
-    double result = integrationtools.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtools.testIntegrateFunction(vertices);
-    REQUIRE(results.size() == 3);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<5> integrationtools5(QuadratureType::GaussLobatto);
-  SECTION("TestOrder5")
-  {
-    double result = integrationtools5.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtools.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<7> integrationtools7(QuadratureType::GaussLobatto);
-  SECTION("TestOrder7")
-  {
-    double result = integrationtools7.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtools.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<9> integrationtools9(QuadratureType::GaussLobatto);
-  SECTION("TestOrder9")
-  {
-    double result = integrationtools9.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtools.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<11> integrationtools11(QuadratureType::GaussLobatto);
-  SECTION("TestOrder11")
-  {
-    double result = integrationtools11.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtools.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-
-  IntegrationTools<2> integrationtoolslegendre(QuadratureType::GaussLegendre);
-  SECTION("Order-Legendre")
-  {
-    size_t order = integrationtools.order();
-    REQUIRE(order == 2);
-  }
-  SECTION("TestOrder3-Legendre")
-  {
-    double result = integrationtoolslegendre.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtoolslegendre.testIntegrateFunction(vertices);
-    REQUIRE(results.size() == 3);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<5> integrationtoolslegendre5(QuadratureType::GaussLegendre);
-  SECTION("TestOrder5-Legendre")
-  {
-    double result = integrationtoolslegendre5.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtoolslegendre5.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<7> integrationtoolslegendre7(QuadratureType::GaussLegendre);
-  SECTION("TestOrder7-Legendre")
-  {
-    double result = integrationtoolslegendre7.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtoolslegendre7.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-  IntegrationTools<9> integrationtoolslegendre9(QuadratureType::GaussLegendre);
-  SECTION("TestOrder9-Legendre")
-  {
-    double result = integrationtoolslegendre9.testIntegrate(a, b);
-    REQUIRE(result == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    SmallArray<double> results = integrationtoolslegendre9.testIntegrateFunction(vertices);
-    REQUIRE(results[0] == Catch::Approx((0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-    REQUIRE(results[1] == 0);
-    REQUIRE(results[2] == Catch::Approx((-0.25 * (std::pow(2, 4) - std::pow(1, 4)))).epsilon(1E-14));
-  }
-}