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
if constexpr (std::is_arithmetic_v<T>) {
return value;
} else {
return false;
return false; // LCOV_EXCL_LINE (only there for compilation purpose unreachable)
}
},
m_node.children[0]->m_value));
......
......@@ -46,6 +46,7 @@ add_executable (unit_tests
test_TinyVector.cpp
test_UnaryExpressionProcessor.cpp
test_Vector.cpp
test_WhileProcessor.cpp
)
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