Skip to content
Snippets Groups Projects
Commit c982485b authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add tests for WhileProcessor

parent 173d3d8c
No related branches found
No related tags found
1 merge request!37Feature/language
...@@ -21,7 +21,7 @@ class WhileProcessor final : public INodeProcessor ...@@ -21,7 +21,7 @@ class WhileProcessor final : public INodeProcessor
if constexpr (std::is_arithmetic_v<T>) { if constexpr (std::is_arithmetic_v<T>) {
return value; return value;
} else { } else {
return false; return false; // LCOV_EXCL_LINE (only there for compilation purpose unreachable)
} }
}, },
m_node.children[0]->m_value)); m_node.children[0]->m_value));
......
...@@ -46,6 +46,7 @@ add_executable (unit_tests ...@@ -46,6 +46,7 @@ add_executable (unit_tests
test_TinyVector.cpp test_TinyVector.cpp
test_UnaryExpressionProcessor.cpp test_UnaryExpressionProcessor.cpp
test_Vector.cpp test_Vector.cpp
test_WhileProcessor.cpp
) )
add_executable (mpi_unit_tests add_executable (mpi_unit_tests
......
#include <catch2/catch.hpp>
#include <ASTNodeValueBuilder.hpp>
#include <ASTBuilder.hpp>
#include <ASTNodeDataTypeBuilder.hpp>
#include <ASTNodeDeclarationCleaner.hpp>
#include <ASTNodeDeclarationToAffectationConverter.hpp>
#include <ASTNodeExpressionBuilder.hpp>
#include <ASTNodeAffectationExpressionBuilder.hpp>
#include <ASTSymbolTableBuilder.hpp>
#include <ASTPrinter.hpp>
#include <Demangle.hpp>
#include <PEGGrammar.hpp>
#include <sstream>
#define CHECK_WHILE_PROCESSOR_RESULT(data, variable_name, expected_value) \
{ \
string_input input{data, "test.pgs"}; \
auto ast = ASTBuilder::build(input); \
\
ASTSymbolTableBuilder{*ast}; \
ASTNodeDataTypeBuilder{*ast}; \
ASTNodeValueBuilder{*ast}; \
\
ASTNodeDeclarationToAffectationConverter{*ast}; \
ASTNodeDeclarationCleaner{*ast}; \
\
ASTNodeExpressionBuilder{*ast}; \
ExecUntilBreakOrContinue exec_policy; \
ast->execute(exec_policy); \
\
auto symbol_table = ast->m_symbol_table; \
\
using namespace TAO_PEGTL_NAMESPACE; \
position use_position{internal::iterator{"fixture"}, "fixture"}; \
use_position.byte = 10000; \
auto [symbol, found] = symbol_table->find(variable_name, use_position); \
\
auto attribute = symbol->second; \
auto value = std::get<decltype(expected_value)>(attribute.value()); \
\
REQUIRE(value == expected_value); \
}
TEST_CASE("WhileProcessor", "[language]")
{
SECTION("simple loop")
{
std::string_view data = R"(
N i = 3;
N j = 0;
while(i<10) {
j++;
i += j;
}
)";
CHECK_WHILE_PROCESSOR_RESULT(data, "i", 13ul);
}
SECTION("simple with break")
{
std::string_view data = R"(
N i = 3;
N j = 0;
while(i<10) {
j++;
if (j==2) break;
i += j;
}
)";
CHECK_WHILE_PROCESSOR_RESULT(data, "i", 4ul);
}
SECTION("simple with continue")
{
std::string_view data = R"(
N i = 3;
N j = 0;
while(i<10) {
j++;
if (j<=3) continue;
i += j;
}
)";
CHECK_WHILE_PROCESSOR_RESULT(data, "i", 12ul);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment