diff --git a/src/language/ast/ASTExecutionStack.cpp b/src/language/ast/ASTExecutionStack.cpp index 48add07ecfc0739bbec88a15fe38153abc6ad1ba..a02759b393536735521e4ef0f406805c490c3c4c 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 315f89d518e0262cdc6b44d3d99f13673d803168..488698bb3ed44fa2f54ab98b3317735b29e9a87d 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 ca8138191bf37e963d56492adb682b3cc66fe161..3cdabe47d1aacb1ef62594c47b9ccf27df0c4583 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 b55de095c9335178bd0dcc92543218a1bde9c14e..111a9526a57eaf4b6ba088ed26adf5b4d97f826f 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 2a11caff89e418956cea81a8f4f64276c93c5756..a3eae8485001fcacadecd51bd65b7cb82f93ae6c 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 8c0ee437d76585d3a0381d136ed70de136ed0cba..147dcd84ea0fa28f33eab7e5c03c7819cad41974 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 960845cf229abb9f436e6016e6202d5b0d8dcb99..2c51b86b8c1445a65bb2bdf0cc774e732ed2d7fd 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 738fad05fa74ff45820a5f4071dff9a91abbc42b..f556c87fa8fe91304b7f712888daa7e281d84229 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 ab2c86f82c7b2b10db0a54555d70a06558460468..b13ec6149538ee9bf4e643360dd52ca5ee3de21e 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 93d1c6806dda456aa17b7f138c6d1f23d8e33315..d49ccb2c118c10bbbd611b31cf6af9cb35cb2ec8 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 73733b9833200f492c5e022ff1b727e57d104640..a288187e0a806e424006d6031fddcbb95240dca1 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 1433eff93265614a36dfd0dcb16d4d9c7db13257..cec1a06489539392ca8a5062c02e148f7268cafd 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 68d02133b26e07382dac7f6588f4554093bd2151..b4844cfa99c995a3e477143567d9045b2aaf9742 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 0eab5884c6a590a8adf8ee656bd62cf3b528deb5..ea370e56dd2e11ccc359afacf3f2880f8e30b1e3 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 235ba29d9f370b53abbf82a5d027797bd834e672..4dd2aa38358a7849490998c1d5535c39585791c7 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 69fa63d729c669dd4aba67f29887699147f428db..b6a04250b5a510bf2a763e90fbbbbc7c5b00745e 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); \ }