From ba333baaba9bc88f9c2e92e7aa3591458f7f1e43 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Fri, 13 Sep 2024 00:50:28 +0200 Subject: [PATCH] Fix unit tests standalone run --- src/language/ast/ASTExecutionStack.cpp | 3 + tests/test_ConcatExpressionProcessor.cpp | 5 + tests/test_DoWhileProcessor.cpp | 9 + tests/test_ForProcessor.cpp | 10 + tests/test_FunctionProcessor.cpp | 9 + tests/test_IfProcessor.cpp | 9 + tests/test_IncDecExpressionProcessor.cpp | 13 ++ tests/test_IntegrateCellArray.cpp | 24 ++ tests/test_IntegrateCellValue.cpp | 26 +++ tests/test_IntegrateOnCells.cpp | 269 +++++++++++++++++++++++ tests/test_ListAffectationProcessor.cpp | 9 + tests/test_NameProcessor.cpp | 9 + tests/test_PugsFunctionAdapter.cpp | 9 + tests/test_TupleToVectorProcessor.cpp | 9 + tests/test_UnaryExpressionProcessor.cpp | 14 ++ tests/test_WhileProcessor.cpp | 9 + 16 files changed, 436 insertions(+) diff --git a/src/language/ast/ASTExecutionStack.cpp b/src/language/ast/ASTExecutionStack.cpp index 48add07ec..a02759b39 100644 --- a/src/language/ast/ASTExecutionStack.cpp +++ b/src/language/ast/ASTExecutionStack.cpp @@ -74,6 +74,9 @@ ASTExecutionStack::create(const std::shared_ptr<TAO_PEGTL_NAMESPACE::string_inpu void ASTExecutionStack::destroy() { + if (m_instance == nullptr) { + throw UnexpectedError("ASTExecutionStack was not created!"); + } delete m_instance; m_instance = nullptr; } diff --git a/tests/test_ConcatExpressionProcessor.cpp b/tests/test_ConcatExpressionProcessor.cpp index 315f89d51..488698bb3 100644 --- a/tests/test_ConcatExpressionProcessor.cpp +++ b/tests/test_ConcatExpressionProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeAffectationExpressionBuilder.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> @@ -22,6 +23,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -44,6 +47,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } diff --git a/tests/test_DoWhileProcessor.cpp b/tests/test_DoWhileProcessor.cpp index ca8138191..3cdabe47d 100644 --- a/tests/test_DoWhileProcessor.cpp +++ b/tests/test_DoWhileProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeAffectationExpressionBuilder.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> @@ -21,6 +22,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -43,6 +46,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -51,11 +56,15 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ ASTSymbolTableBuilder{*ast}; \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, error_message); \ } diff --git a/tests/test_ForProcessor.cpp b/tests/test_ForProcessor.cpp index b55de095c..111a9526a 100644 --- a/tests/test_ForProcessor.cpp +++ b/tests/test_ForProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeAffectationExpressionBuilder.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> @@ -21,6 +22,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -43,12 +46,17 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } #define CHECK_FOR_PROCESSOR_THROWS_WITH(data, error_message) \ { \ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ + \ + ASTExecutionStack::create(); \ + \ auto ast = ASTBuilder::build(input); \ \ ASTModulesImporter{*ast}; \ @@ -56,6 +64,8 @@ \ ASTSymbolTableBuilder{*ast}; \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, error_message); \ } diff --git a/tests/test_FunctionProcessor.cpp b/tests/test_FunctionProcessor.cpp index 2a11caff8..a3eae8485 100644 --- a/tests/test_FunctionProcessor.cpp +++ b/tests/test_FunctionProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -20,6 +21,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -43,6 +46,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -51,6 +56,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -64,6 +71,8 @@ ASTNodeExpressionBuilder{*ast}; \ ExecutionPolicy exec_policy; \ REQUIRE_THROWS_WITH(ast->execute(exec_policy), error_msg); \ + \ + ASTExecutionStack::destroy(); \ } // clazy:excludeall=non-pod-global-static diff --git a/tests/test_IfProcessor.cpp b/tests/test_IfProcessor.cpp index 8c0ee437d..147dcd84e 100644 --- a/tests/test_IfProcessor.cpp +++ b/tests/test_IfProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -19,6 +20,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -41,6 +44,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -49,11 +54,15 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ ASTSymbolTableBuilder{*ast}; \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, error_message); \ } diff --git a/tests/test_IncDecExpressionProcessor.cpp b/tests/test_IncDecExpressionProcessor.cpp index 960845cf2..2c51b86b8 100644 --- a/tests/test_IncDecExpressionProcessor.cpp +++ b/tests/test_IncDecExpressionProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -19,6 +20,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -41,6 +44,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -49,12 +54,16 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ ASTSymbolTableBuilder{*ast}; \ \ REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, error_message); \ + \ + ASTExecutionStack::destroy(); \ } #define CHECK_INCDEC_THROWS_WITH(data, error_message) \ @@ -62,6 +71,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTSymbolTableBuilder{*ast}; \ ASTNodeDataTypeBuilder{*ast}; \ \ @@ -72,6 +83,8 @@ ExecutionPolicy exec_policy; \ \ REQUIRE_THROWS_WITH(ast->execute(exec_policy), error_message); \ + \ + ASTExecutionStack::destroy(); \ } // clazy:excludeall=non-pod-global-static diff --git a/tests/test_IntegrateCellArray.cpp b/tests/test_IntegrateCellArray.cpp index 738fad05f..f556c87fa 100644 --- a/tests/test_IntegrateCellArray.cpp +++ b/tests/test_IntegrateCellArray.cpp @@ -122,10 +122,14 @@ let g: R^1 -> R, x -> 2 * exp(x[0]) + 3; PUGS_LAMBDA(const CellId cell_id) { cell_integral_array[cell_id][1] = cell_g_integral[cell_id]; }); } + ASTNode::setStackDetails(false); + CellArray<double> integrate_array = IntegrateCellArray<double(TinyVector<Dimension>)>::integrate(function_symbol_id_list, quadrature_descriptor, *mesh_1d); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral_array, integrate_array)); } } @@ -209,10 +213,14 @@ let g: R^2 -> R, x -> 2*exp(x[0])*sin(x[1])+3; PUGS_LAMBDA(const CellId cell_id) { cell_integral_array[cell_id][1] = cell_g_integral[cell_id]; }); } + ASTNode::setStackDetails(false); + CellArray<double> integrate_array = IntegrateCellArray<double(TinyVector<Dimension>)>::integrate(function_symbol_id_list, quadrature_descriptor, *mesh_2d); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral_array, integrate_array)); } } @@ -307,10 +315,14 @@ let g: R^3 -> R, x -> 2 * exp(x[0]) * sin(x[1]) * x[2] + 3; PUGS_LAMBDA(const CellId cell_id) { cell_integral_array[cell_id][1] = cell_g_integral[cell_id]; }); } + ASTNode::setStackDetails(false); + CellArray<double> integrate_array = IntegrateCellArray<double(TinyVector<Dimension>)>::integrate(function_symbol_id_list, quadrature_descriptor, *mesh_3d); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral_array, integrate_array)); } } @@ -418,10 +430,14 @@ let g: R^1 -> R, x -> 2 * exp(x[0]) + 3; PUGS_LAMBDA(const CellId cell_id) { cell_integral_array[cell_id][1] = cell_g_integral[cell_id]; }); } + ASTNode::setStackDetails(false); + Table<const double> integrate_value = IntegrateCellArray<double(TinyVector<Dimension>)>::integrate(function_symbol_id_list, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral_array, integrate_value)); } } @@ -514,10 +530,14 @@ let g: R^2 -> R, x -> 2*exp(x[0])*sin(x[1])+3; PUGS_LAMBDA(const CellId cell_id) { cell_integral_array[cell_id][1] = cell_g_integral[cell_id]; }); } + ASTNode::setStackDetails(false); + Table<const double> integrate_value = IntegrateCellArray<double(TinyVector<Dimension>)>::integrate(function_symbol_id_list, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral_array, integrate_value)); } } @@ -621,10 +641,14 @@ let g: R^3 -> R, x -> 2 * exp(x[0]) * sin(x[1]) * x[2] + 3; PUGS_LAMBDA(const CellId cell_id) { cell_integral_array[cell_id][1] = cell_g_integral[cell_id]; }); } + ASTNode::setStackDetails(false); + Table<const double> integrate_value = IntegrateCellArray<double(TinyVector<Dimension>)>::integrate(function_symbol_id_list, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral_array, integrate_value)); } } diff --git a/tests/test_IntegrateCellValue.cpp b/tests/test_IntegrateCellValue.cpp index ab2c86f82..b13ec6149 100644 --- a/tests/test_IntegrateCellValue.cpp +++ b/tests/test_IntegrateCellValue.cpp @@ -91,10 +91,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * }; CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); + ASTNode::setStackDetails(false); + CellValue<R2x2> integrate_value = IntegrateCellValue<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -150,10 +154,14 @@ let R3_2d: R^2 -> R^3, x -> [2*exp(x[0])*sin(x[1])+3, x[0]-2*x[1], 3]; }; CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); + ASTNode::setStackDetails(false); + CellValue<R3> integrate_value = IntegrateCellValue<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -217,10 +225,14 @@ let scalar_3d: R^3 -> R, x -> 2 * exp(x[0]) * sin(x[1]) * x[2] + 3; auto f = [](const TinyVector<Dimension>& x) -> double { return 2 * exp(x[0]) * sin(x[1]) * x[2] + 3; }; CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); + ASTNode::setStackDetails(false); + CellValue<double> integrate_value = IntegrateCellValue<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -296,10 +308,15 @@ let scalar_1d: R^1 -> R, x -> 2 * exp(x[0]) + 3; auto f = [](const TinyVector<Dimension>& x) -> double { return 2 * std::exp(x[0]) + 3; }; Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateCellValue<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -365,10 +382,15 @@ let R3_2d: R^2 -> R^3, x -> [2*exp(x[0])*sin(x[1])+3, x[0]-2*x[1], 3]; }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateCellValue<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -446,10 +468,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(false); + Array<R2x2> integrate_value = IntegrateCellValue<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } diff --git a/tests/test_IntegrateOnCells.cpp b/tests/test_IntegrateOnCells.cpp index 93d1c6806..d49ccb2c1 100644 --- a/tests/test_IntegrateOnCells.cpp +++ b/tests/test_IntegrateOnCells.cpp @@ -95,9 +95,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<double> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -115,9 +120,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<R3> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -137,9 +147,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<R2x2> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -197,9 +212,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<double> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -219,9 +239,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<R3> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -241,9 +266,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<R2x2> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -311,9 +341,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<double> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -333,9 +368,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<R3> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -356,9 +396,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<R2x2> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -439,10 +484,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -458,10 +508,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * auto f = [](const TinyVector<Dimension>& x) -> R3 { return R3{2 * exp(x[0]) + 3, x[0] - 2, 3}; }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -480,10 +535,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -551,10 +611,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -572,10 +637,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -594,10 +664,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -675,10 +750,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -696,10 +776,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -719,10 +804,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -798,9 +888,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<double> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -818,9 +913,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<R3> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -840,9 +940,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<R2x2> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -900,9 +1005,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<double> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -922,9 +1032,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<R3> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -944,9 +1059,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<R2x2> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1014,9 +1134,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<double> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1036,9 +1161,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<R3> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1059,9 +1189,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<R2x2> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1142,10 +1277,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1161,10 +1301,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * auto f = [](const TinyVector<Dimension>& x) -> R3 { return R3{2 * exp(x[0]) + 3, x[0] - 2, 3}; }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1183,10 +1328,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1254,10 +1404,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1275,10 +1430,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1297,10 +1457,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1378,10 +1543,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1399,10 +1569,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1422,10 +1597,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1501,9 +1681,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<double> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1521,9 +1706,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<R3> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1543,9 +1733,14 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_1d, cell_integral); Array<R2x2> integrate_value(mesh_1d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_1d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1603,9 +1798,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<double> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1625,9 +1825,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<R3> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1647,9 +1852,14 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_2d, cell_integral); Array<R2x2> integrate_value(mesh_2d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_2d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1717,9 +1927,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<double> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<double(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1739,9 +1954,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<R3> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R3(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1762,9 +1982,14 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin CellIntegrator::integrateTo(f, quadrature_descriptor, *mesh_3d, cell_integral); Array<R2x2> integrate_value(mesh_3d->numberOfCells()); + + ASTNode::setStackDetails(false); + IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrateTo(function_symbol_id, quadrature_descriptor, *mesh_3d, integrate_value); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1845,10 +2070,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1864,9 +2094,13 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * auto f = [](const TinyVector<Dimension>& x) -> R3 { return R3{2 * exp(x[0]) + 3, x[0] - 2, 3}; }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1886,10 +2120,15 @@ let R2x2_1d: R^1 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[0]) + 3, sin(x[0] - 2 * Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_1d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_1d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -1957,10 +2196,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -1978,10 +2222,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -2000,10 +2249,15 @@ let R2x2_2d: R^2 -> R^2x2, x -> [[2*exp(x[0])*sin(x[1])+3, sin(x[0]-2*x[1])], [3 Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_2d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_2d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } @@ -2081,10 +2335,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const double> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const double> integrate_value = IntegrateOnCells<double(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -2102,10 +2361,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin }; Array<const R3> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R3> integrate_value = IntegrateOnCells<R3(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } @@ -2125,10 +2389,15 @@ let R2x2_3d: R^3 -> R^2x2, x -> [[2 * exp(x[0]) * sin(x[1]) + 3 * cos(x[2]), sin Array<const R2x2> cell_integral = CellIntegrator::integrate(f, quadrature_descriptor, *mesh_3d, cell_list); + + ASTNode::setStackDetails(false); + Array<const R2x2> integrate_value = IntegrateOnCells<R2x2(TinyVector<Dimension>)>::integrate(function_symbol_id, quadrature_descriptor, *mesh_3d, cell_list); + ASTNode::setStackDetails(true); + REQUIRE(same_item_integral(cell_integral, integrate_value)); } } diff --git a/tests/test_ListAffectationProcessor.cpp b/tests/test_ListAffectationProcessor.cpp index 73733b983..a288187e0 100644 --- a/tests/test_ListAffectationProcessor.cpp +++ b/tests/test_ListAffectationProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -19,6 +20,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -41,6 +44,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -49,6 +54,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -61,6 +68,8 @@ ASTNodeExpressionBuilder{*ast}; \ ExecutionPolicy exec_policy; \ REQUIRE_THROWS_WITH(ast->execute(exec_policy), error_message); \ + \ + ASTExecutionStack::destroy(); \ } // clazy:excludeall=non-pod-global-static diff --git a/tests/test_NameProcessor.cpp b/tests/test_NameProcessor.cpp index 1433eff93..cec1a0648 100644 --- a/tests/test_NameProcessor.cpp +++ b/tests/test_NameProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -30,6 +31,8 @@ n = 2; TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; auto ast = ASTBuilder::build(input); + ASTExecutionStack::create(); + ASTModulesImporter{*ast}; ASTNodeTypeCleaner<language::import_instruction>{*ast}; @@ -49,6 +52,8 @@ n = 2; auto symbol_n = symbol_table->find("n", use_position).first->attributes(); auto value_n = std::get<long unsigned int>(symbol_n.value()); + ASTExecutionStack::destroy(); + REQUIRE(value_n == 2); auto symbol_m = symbol_table->find("m", use_position).first->attributes(); @@ -75,6 +80,8 @@ let m:N, m = n; TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; auto ast = ASTBuilder::build(input); + ASTExecutionStack::create(); + ASTModulesImporter{*ast}; ASTNodeTypeCleaner<language::import_instruction>{*ast}; @@ -87,5 +94,7 @@ let m:N, m = n; ASTNodeExpressionBuilder{*ast}; ExecutionPolicy exec_policy; REQUIRE_THROWS_WITH(ast->execute(exec_policy), "trying to use uninitialized symbol 'n'"); + + ASTExecutionStack::destroy(); } } diff --git a/tests/test_PugsFunctionAdapter.cpp b/tests/test_PugsFunctionAdapter.cpp index 68d02133b..b4844cfa9 100644 --- a/tests/test_PugsFunctionAdapter.cpp +++ b/tests/test_PugsFunctionAdapter.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeExpressionBuilder.hpp> @@ -90,6 +91,8 @@ let R33toR33zero: R^3x3 -> R^3x3, x -> 0; auto ast = ASTBuilder::build(input); + ASTExecutionStack::create(); + ASTModulesImporter{*ast}; ASTNodeTypeCleaner<language::import_instruction>{*ast}; @@ -361,6 +364,8 @@ let R33toR33zero: R^3x3 -> R^3x3, x -> 0; REQUIRE(result == TinyMatrix<3>{0, 0, 0, 0, 0, 0, 0, 0, 0}); } + + ASTExecutionStack::destroy(); } SECTION("Errors calls") @@ -378,6 +383,8 @@ let R33toR22: R^3x3 -> R^2x2, x -> [[x[0,0], x[0,1]+x[0,2]], [x[2,0]*x[1,1], x[2 auto ast = ASTBuilder::build(input); + ASTExecutionStack::create(); + ASTModulesImporter{*ast}; ASTNodeTypeCleaner<language::import_instruction>{*ast}; @@ -492,5 +499,7 @@ let R33toR22: R^3x3 -> R^2x2, x -> [[x[0,0], x[0,1]+x[0,2]], [x[2,0]*x[1,1], x[2 "note: expecting R -> R\n" "note: provided function R33toR22: R^3x3 -> R^2x2"); } + + ASTExecutionStack::destroy(); } } diff --git a/tests/test_TupleToVectorProcessor.cpp b/tests/test_TupleToVectorProcessor.cpp index 0eab5884c..ea370e56d 100644 --- a/tests/test_TupleToVectorProcessor.cpp +++ b/tests/test_TupleToVectorProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -19,6 +20,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -42,6 +45,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -51,6 +56,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -66,6 +73,8 @@ ast->execute(exec_policy); \ }; \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE_THROWS_WITH(eval(), error_message); \ } diff --git a/tests/test_UnaryExpressionProcessor.cpp b/tests/test_UnaryExpressionProcessor.cpp index 235ba29d9..4dd2aa383 100644 --- a/tests/test_UnaryExpressionProcessor.cpp +++ b/tests/test_UnaryExpressionProcessor.cpp @@ -4,6 +4,7 @@ #include <FixturesForBuiltinT.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> #include <language/ast/ASTNodeDeclarationToAffectationConverter.hpp> @@ -29,6 +30,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -51,6 +54,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -59,9 +64,13 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTSymbolTableBuilder{*ast}; \ \ REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, error_message); \ + \ + ASTExecutionStack::destroy(); \ } // clazy:excludeall=non-pod-global-static @@ -82,6 +91,8 @@ TEST_CASE("UnaryExpressionProcessor", "[language]") TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; auto ast = ASTBuilder::build(input); + ASTExecutionStack::create(); + ASTModulesImporter{*ast}; BasicAffectationRegisterFor<EmbeddedData>{ASTNodeDataType::build<ASTNodeDataType::type_id_t>("builtin_t")}; @@ -132,6 +143,9 @@ TEST_CASE("UnaryExpressionProcessor", "[language]") auto embedded_value = std::get<EmbeddedData>(attributes.value()); double value = *dynamic_cast<const DataHandler<const double>&>(embedded_value.get()).data_ptr(); + + ASTExecutionStack::destroy(); + REQUIRE(value == double{-3.2}); } diff --git a/tests/test_WhileProcessor.cpp b/tests/test_WhileProcessor.cpp index 69fa63d72..b6a04250b 100644 --- a/tests/test_WhileProcessor.cpp +++ b/tests/test_WhileProcessor.cpp @@ -2,6 +2,7 @@ #include <catch2/matchers/catch_matchers_all.hpp> #include <language/ast/ASTBuilder.hpp> +#include <language/ast/ASTExecutionStack.hpp> #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeAffectationExpressionBuilder.hpp> #include <language/ast/ASTNodeDataTypeBuilder.hpp> @@ -20,6 +21,8 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTModulesImporter{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ @@ -42,6 +45,8 @@ auto attributes = symbol->attributes(); \ auto value = std::get<decltype(expected_value)>(attributes.value()); \ \ + ASTExecutionStack::destroy(); \ + \ REQUIRE(value == expected_value); \ } @@ -50,7 +55,11 @@ TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ + ASTExecutionStack::create(); \ + \ ASTSymbolTableBuilder{*ast}; \ + \ + ASTExecutionStack::destroy(); \ \ REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, error_message); \ } -- GitLab