diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 19da37a168fdeda6f87010f633d8bc29dd53bc8a..e3cdf5ea9ad08377eb167ef805a10887bdc70e42 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -27,7 +27,10 @@ add_executable (unit_tests test_ASTSymbolTableBuilder.cpp test_ASTSymbolInitializationChecker.cpp test_BreakProcessor.cpp - test_BinaryExpressionProcessor.cpp + test_BinaryExpressionProcessor_arithmetic.cpp + test_BinaryExpressionProcessor_comparison.cpp + test_BinaryExpressionProcessor_equality.cpp + test_BinaryExpressionProcessor_logic.cpp test_BiCGStab.cpp test_ContinueProcessor.cpp test_ConcatExpressionProcessor.cpp diff --git a/tests/test_BinaryExpressionProcessor.cpp b/tests/test_BinaryExpressionProcessor.cpp deleted file mode 100644 index 2e94350397af5a707a1ab1b3011034be2d23a78b..0000000000000000000000000000000000000000 --- a/tests/test_BinaryExpressionProcessor.cpp +++ /dev/null @@ -1,806 +0,0 @@ -#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_BINARY_EXPRESSION_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("BinaryExpressionProcessor", "[language]") -{ - SECTION("arithmetic operators") - { - SECTION("+") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = true + true;)", "z", 2l); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = true + 1;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = true + 1;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = false + 1;)", "n", 1ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = true + 3;)", "z", 4l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false + 3;)", "z", 3l); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = false + 3.6;)", "r", 3.6); - CHECK_BINARY_EXPRESSION_RESULT(R"(R s = -3.3; R r = true + s;)", "r", -2.3); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = n + true;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n + m;)", "n", 6ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = -1; n = n + z;)", "n", 3ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1 + 2.3;)", "n", 3ul); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 + true;)", "z", 0l); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = -3 + n;)", "z", 1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; Z z = -3 + n;)", "z", -1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 1 + 2;)", "z", 3l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 3 + 2.5;)", "z", 5l); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 + true;)", "r", (-1.2 + true)); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 + n;)", "r", (-1.2 + uint64_t{2})); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 + 1;)", "r", (-1.2 + 1)); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 + 2.3;)", "r", (-1.2 + 2.3)); - } - } - - SECTION("-") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = true - false;)", "n", 1ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = true - n;)", "n", 0ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false - 1;)", "z", -1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = true - 1.2;)", "r", (true - 1.2)); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; n = n - true;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n - m;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 5; n = n - 4;)", "n", 1ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 - 2.3;)", "n", 0ul); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 - true;)", "z", -2l); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = 3 - n;)", "z", -1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 7 - 2;)", "z", 5l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 4 - 2.5;)", "z", 1l); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 - true;)", "r", (-1.2 - true)); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 - n;)", "r", (-1.2 - uint64_t{2})); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 - 1;)", "r", (-1.2 - 1)); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 - 2.3;)", "r", (-1.2 - 2.3)); - } - } - - SECTION("*") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = true * false;)", "n", 0ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; n = true * n;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false * 1;)", "z", 0l); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = true * 1.2;)", "r", (true * 1.2)); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; n = n * true;)", "n", 3ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n * m;)", "n", 8ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 5; n = n * 4;)", "n", 20ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 * 2.3;)", "n", 6ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 * 2.5;)", "n", 7ul); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 * true;)", "z", -1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = 3 * n;)", "z", 12l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 7 * 2;)", "z", 14l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 4 * 2.4;)", "z", 9l); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 * true;)", "r", (-1.2 * true)); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 * n;)", "r", (-1.2 * uint64_t{2})); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 * 11;)", "r", (-1.2 * 11)); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 * 2.3;)", "r", (-1.2 * 2.3)); - } - } - - SECTION("/") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = false / true;)", "n", 0ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; n = true / n;)", "n", 0ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false / 1;)", "z", 0l); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = true / 1.2;)", "r", (true / 1.2)); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; n = n / true;)", "n", 3ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n / m;)", "n", 2ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 5; n = n / 4;)", "n", 1ul); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 / 2.3;)", "n", 1ul); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 / true;)", "z", -1l); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = 3 / n;)", "z", 0l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 7 / 2;)", "z", 3l); - CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 4 / 2.4;)", "z", 1l); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 / true;)", "r", (-1.2 / true)); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 / n;)", "r", (-1.2 / uint64_t{2})); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 / 11;)", "r", (-1.2 / 11)); - CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 / 2.3;)", "r", (-1.2 / 2.3)); - } - } - } - - SECTION("logic operators") - { - SECTION("and") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true and n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and -3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and 0.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and -1.7;)", "b", true); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n and m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 0; B b = n and m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n and -1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and -1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and 0.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and 2.3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and 0.;)", "b", false); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 and true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 and n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -3 and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 0 and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 and 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 2;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 and 2.5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 and 0.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 2.5;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 0.;)", "b", false); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 and n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -1.2 and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 0. and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. and n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 0.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 2.3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 0.;)", "b", false); - } - } - - SECTION("or") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false or n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or -3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 0.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or -1.7;)", "b", true); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n or m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 0; B b = n or m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 2; B b = n or m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 0; B b = n or m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n or -1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n or 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or -1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or 0.;)", "b", false); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 or false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -3 or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 0 or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 or n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 or 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 or 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 or 2.5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 or 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 2.5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 0.;)", "b", false); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -1.2 or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 0. or n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. or n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 0.;)", "b", false); - } - } - - SECTION("xor") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true xor true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false xor true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true xor false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false xor false;)", "b", false); - } - } - } - - SECTION("equality operators") - { - SECTION("==") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true == n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true == n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false == n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false == n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == 3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == -1.7;)", "b", false); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n == true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n == false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n == m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n == m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n == 4;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n == 5;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == 2.3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == 1.;)", "b", true); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 == true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 == false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 == true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 == false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 == n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; B b = 3 == n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 == 2;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 11 == 11;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 == 2.5;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 == 3.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 == 3.5;)", "b", false); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. == true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 == false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. == false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 == n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. == n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2. == -2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == 2.3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == -1.2;)", "b", true); - } - } - - SECTION("!=") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true != n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true != n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false != n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false != n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != 3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 0.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != -1.7;)", "b", true); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n != true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n != false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n != m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n != m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n != 4;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n != 5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != 1.;)", "b", false); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 != true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 != false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 != true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 != false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 != n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; B b = 3 != n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 != 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 11 != 11;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 != 2.5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 != 3.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 != 3.5;)", "b", true); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. != true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 != false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. != false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 != n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. != n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2. != -2;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != -1.2;)", "b", false); - } - } - } - - SECTION("comparison operators") - { - SECTION("<") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true < n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true < n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false < n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false < n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < 3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 0.1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < -1.7;)", "b", false); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n < true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n < false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n < m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 2; B b = n < m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 0; B b = n < m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n < 4;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n < 5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < 1.;)", "b", false); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 < true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 < false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 < false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 < n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 < n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 < 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 < 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 < 3.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 < 3.1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 < 2.5;)", "b", false); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. < true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. < false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 < n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. < n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. < 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < -1.1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < -1.2;)", "b", false); - } - } - - SECTION("<=") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true <= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= -1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 0.5;)", "b", false); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = n <= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n <= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n <= m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n <= m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n <= 5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n <= 4;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n <= 3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= 2.3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= 0.5;)", "b", false); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 <= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 <= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 <= false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 4 <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 5 <= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 <= 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 2;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 3.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 3.1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 2.5;)", "b", false); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. <= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.1 <= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. <= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 <= false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2.1 <= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = 0.7 <= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2 <= -2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 <= -2;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= -1.1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= -1.2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. <= -1.2;)", "b", false); - } - } - - SECTION(">") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true > n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > 3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 0;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 0.1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > -1.7;)", "b", true); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = n > true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n > false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n > m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 2; B b = n > m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 0; B b = n > m;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n > 4;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n > 3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > 2.3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > 0.3;)", "b", true); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 > false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 > true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 1 > n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > 2;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 > 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 > 3.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 > 3.1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 > 2.5;)", "b", true); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.2 > true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.2 > false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. > true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. > false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -2.2 > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. > n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.2 > 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. > 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1. > -1.1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 > -1.1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 > -1.2;)", "b", false); - } - } - - SECTION(">=") - { - SECTION("lhs is B") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true >= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true >= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true >= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false >= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false >= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 0;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= -1;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 1.;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 0.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 0.5;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 0.1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 1.5;)", "b", false); - } - - SECTION("lhs is N") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = n >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n >= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n >= m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n >= m;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n >= 5;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n >= 4;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n >= 3;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= 2.3;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= 1.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= 0.5;)", "b", true); - } - - SECTION("lhs is Z") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 >= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 4 >= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 3 >= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 >= 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 3.;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 3.1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 2.5;)", "b", true); - } - - SECTION("lhs is R") - { - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= true;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.1 >= true;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 >= false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. >= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2.1 >= n;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = 0.7 >= n;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2 >= -2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 >= -2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= -1.1;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= -1.2;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. >= -1.2;)", "b", true); - } - } - } -} diff --git a/tests/test_BinaryExpressionProcessor_arithmetic.cpp b/tests/test_BinaryExpressionProcessor_arithmetic.cpp new file mode 100644 index 0000000000000000000000000000000000000000..edfd50dfff4b72e81b374bb092fbc6fe9edd44c3 --- /dev/null +++ b/tests/test_BinaryExpressionProcessor_arithmetic.cpp @@ -0,0 +1,152 @@ +#include <catch2/catch.hpp> + +#include "test_BinaryExpressionProcessor_utils.hpp" + +TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") +{ + SECTION("+") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = true + true;)", "z", 2l); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = true + 1;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = true + 1;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = false + 1;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = true + 3;)", "z", 4l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false + 3;)", "z", 3l); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = false + 3.6;)", "r", 3.6); + CHECK_BINARY_EXPRESSION_RESULT(R"(R s = -3.3; R r = true + s;)", "r", -2.3); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = n + true;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n + m;)", "n", 6ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = -1; n = n + z;)", "n", 3ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1 + 2.3;)", "n", 3ul); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 + true;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = -3 + n;)", "z", 1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; Z z = -3 + n;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 1 + 2;)", "z", 3l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 3 + 2.5;)", "z", 5l); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 + true;)", "r", (-1.2 + true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 + n;)", "r", (-1.2 + uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 + 1;)", "r", (-1.2 + 1)); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 + 2.3;)", "r", (-1.2 + 2.3)); + } + } + + SECTION("-") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = true - false;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; n = true - n;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false - 1;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = true - 1.2;)", "r", (true - 1.2)); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; n = n - true;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n - m;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 5; n = n - 4;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 - 2.3;)", "n", 0ul); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 - true;)", "z", -2l); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = 3 - n;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 7 - 2;)", "z", 5l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 4 - 2.5;)", "z", 1l); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 - true;)", "r", (-1.2 - true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 - n;)", "r", (-1.2 - uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 - 1;)", "r", (-1.2 - 1)); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 - 2.3;)", "r", (-1.2 - 2.3)); + } + } + + SECTION("*") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = true * false;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; n = true * n;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false * 1;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = true * 1.2;)", "r", (true * 1.2)); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; n = n * true;)", "n", 3ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n * m;)", "n", 8ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 5; n = n * 4;)", "n", 20ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 * 2.3;)", "n", 6ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 * 2.5;)", "n", 7ul); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 * true;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = 3 * n;)", "z", 12l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 7 * 2;)", "z", 14l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 4 * 2.4;)", "z", 9l); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 * true;)", "r", (-1.2 * true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 * n;)", "r", (-1.2 * uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 * 11;)", "r", (-1.2 * 11)); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 * 2.3;)", "r", (-1.2 * 2.3)); + } + } + + SECTION("/") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = false / true;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; n = true / n;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = false / 1;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = true / 1.2;)", "r", (true / 1.2)); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; n = n / true;)", "n", 3ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; n = n / m;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 5; n = n / 4;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3 / 2.3;)", "n", 1ul); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = -1 / true;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; Z z = 3 / n;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 7 / 2;)", "z", 3l); + CHECK_BINARY_EXPRESSION_RESULT(R"(Z z = 4 / 2.4;)", "z", 1l); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 / true;)", "r", (-1.2 / true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; R r = -1.2 / n;)", "r", (-1.2 / uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 / 11;)", "r", (-1.2 / 11)); + CHECK_BINARY_EXPRESSION_RESULT(R"(R r = -1.2 / 2.3;)", "r", (-1.2 / 2.3)); + } + } +} diff --git a/tests/test_BinaryExpressionProcessor_comparison.cpp b/tests/test_BinaryExpressionProcessor_comparison.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2a6ba6b9c1b9fa8ff16b3f33ba21fa4d91f933c2 --- /dev/null +++ b/tests/test_BinaryExpressionProcessor_comparison.cpp @@ -0,0 +1,299 @@ +#include <catch2/catch.hpp> + +#include "test_BinaryExpressionProcessor_utils.hpp" + +TEST_CASE("BinaryExpressionProcessor comparison", "[language]") +{ + SECTION("<") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false < 0.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true < -1.7;)", "b", false); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n < m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 2; B b = n < m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 0; B b = n < m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n < 4;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n < 5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n < 1.;)", "b", false); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 < false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 < 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 < 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 < 3.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 < 3.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 < 2.5;)", "b", false); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. < 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < -1.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 < -1.2;)", "b", false); + } + } + + SECTION("<=") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true <= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= -1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false <= 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true <= 0.5;)", "b", false); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = n <= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n <= m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n <= m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n <= 5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n <= 4;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n <= 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n <= 0.5;)", "b", false); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 <= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 4 <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 5 <= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 <= 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 3.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 3.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 <= 2.5;)", "b", false); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.1 <= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2.1 <= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = 0.7 <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2 <= -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 <= -2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= -1.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 <= -1.2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. <= -1.2;)", "b", false); + } + } + + SECTION(">") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true > n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false > 0.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true > -1.7;)", "b", true); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = n > true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n > m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 2; B b = n > m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 0; B b = n > m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n > 4;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n > 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n > 0.3;)", "b", true); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 > true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 1 > n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 > 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 > 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 > 3.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 > 3.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 > 2.5;)", "b", true); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.2 > true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.2 > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -2.2 > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.2 > 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. > 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1. > -1.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 > -1.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 > -1.2;)", "b", false); + } + } + + SECTION(">=") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= -1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 0.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false >= 0.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true >= 1.5;)", "b", false); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = n >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n >= m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n >= m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n >= 5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n >= 4;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n >= 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n >= 0.5;)", "b", true); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 4 >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 3 >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 2 >= 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 3.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 3.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 >= 2.5;)", "b", true); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1.1 >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2.1 >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = 0.7 >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2 >= -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 >= -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= -1.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 >= -1.2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. >= -1.2;)", "b", true); + } + } +} diff --git a/tests/test_BinaryExpressionProcessor_equality.cpp b/tests/test_BinaryExpressionProcessor_equality.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f2b000b2cbb4416590594a5d7acff5796f3251ec --- /dev/null +++ b/tests/test_BinaryExpressionProcessor_equality.cpp @@ -0,0 +1,138 @@ +#include <catch2/catch.hpp> + +#include "test_BinaryExpressionProcessor_utils.hpp" + +TEST_CASE("BinaryExpressionProcessor equality", "[language]") +{ + SECTION("==") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false == 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true == -1.7;)", "b", false); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n == m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n == m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n == 4;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n == 5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n == 1.;)", "b", true); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; B b = 3 == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 == 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 11 == 11;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 == 2.5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 == 3.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 == 3.5;)", "b", false); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2. == -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 == -1.2;)", "b", true); + } + } + + SECTION("!=") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = true != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false != 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true != -1.7;)", "b", true); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n != m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; N m = 2; B b = n != m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n != 4;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n != 5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n != 1.;)", "b", false); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 3; B b = 3 != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 != 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 11 != 11;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 != 2.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 != 3.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 != 3.5;)", "b", true); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1. != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0.1 != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 2. != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -2. != -2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 != -1.2;)", "b", false); + } + } +} diff --git a/tests/test_BinaryExpressionProcessor_logic.cpp b/tests/test_BinaryExpressionProcessor_logic.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a512b5efa35db8a812e7cdcdf5d13dc0d3ef6ec6 --- /dev/null +++ b/tests/test_BinaryExpressionProcessor_logic.cpp @@ -0,0 +1,174 @@ +#include <catch2/catch.hpp> + +#include "test_BinaryExpressionProcessor_utils.hpp" + +TEST_CASE("BinaryExpressionProcessor logic", "[language]") +{ + SECTION("and") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true and n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and -3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true and -1.7;)", "b", true); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n and m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 0; B b = n and m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n and -1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and -1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n and 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n and 0.;)", "b", false); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 and true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 and n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -3 and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 0 and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 and 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 and 2.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 and 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 2.5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 and 0.;)", "b", false); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 and n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -1.2 and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 0. and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. and n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 and 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. and 0.;)", "b", false); + } + } + + SECTION("or") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = true or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = true or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = false or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = false or n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or -3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true or -1.7;)", "b", true); + } + + SECTION("lhs is N") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; N m = 2; B b = n or m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; N m = 0; B b = n or m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 2; B b = n or m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; N m = 0; B b = n or m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n or -1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = n or 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or -1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 1; B b = n or 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = n or 0.;)", "b", false); + } + + SECTION("lhs is Z") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1 or false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = -3 or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -3 or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 4; B b = 0 or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0 or n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 or 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 1 or 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 or 2.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 3 or 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 2.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0 or 0.;)", "b", false); + } + + SECTION("lhs is R") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = -1.2 or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = -1.2 or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 2; B b = 0. or n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(N n = 0; B b = 0. or n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = -1.2 or 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = 0. or 0.;)", "b", false); + } + } + + SECTION("xor") + { + SECTION("lhs is B") + { + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true xor true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false xor true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = true xor false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false xor false;)", "b", false); + } + } +} diff --git a/tests/test_BinaryExpressionProcessor_utils.hpp b/tests/test_BinaryExpressionProcessor_utils.hpp new file mode 100644 index 0000000000000000000000000000000000000000..ddd8ce2c8bff5aaa95c2281082e5acbb185b1f16 --- /dev/null +++ b/tests/test_BinaryExpressionProcessor_utils.hpp @@ -0,0 +1,55 @@ +#ifndef TEST_BINARY_EXPRESSION_PROCESSOR_UTILS_HPP +#define TEST_BINARY_EXPRESSION_PROCESSOR_UTILS_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_BINARY_EXPRESSION_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); \ + } + +#endif // TEST_BINARY_EXPRESSION_PROCESSOR_UTILS_HPP