diff --git a/src/language/ASTNodeDataTypeBuilder.cpp b/src/language/ASTNodeDataTypeBuilder.cpp index f01f50d82ed58e4ef534a31e6579f07ae90315d3..07e32c1f26cbbfcbca2a11fa2353f744085d0460 100644 --- a/src/language/ASTNodeDataTypeBuilder.cpp +++ b/src/language/ASTNodeDataTypeBuilder.cpp @@ -110,8 +110,8 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const } else if (n.is_type<language::cout_kw>() or n.is_type<language::cerr_kw>() or n.is_type<language::clog_kw>()) { n.m_data_type = ASTNodeDataType::void_t; } else if (n.is_type<language::var_declaration>()) { - auto& type_node = *(n.children[0]); - auto& name_node = *(n.children[1]); + auto& name_node = *(n.children[0]); + auto& type_node = *(n.children[1]); type_node.m_data_type = _buildDeclarationNodeDataTypes(type_node, name_node); n.m_data_type = type_node.m_data_type; diff --git a/src/language/ASTNodeDeclarationToAffectationConverter.cpp b/src/language/ASTNodeDeclarationToAffectationConverter.cpp index aa790cb91fda1c7c5bad0edffd4997462a4b213e..de5afaf5bdcdfb72d58b74713f5417b53deaf56a 100644 --- a/src/language/ASTNodeDeclarationToAffectationConverter.cpp +++ b/src/language/ASTNodeDeclarationToAffectationConverter.cpp @@ -7,9 +7,9 @@ void ASTNodeDeclarationToAffectationConverter::_convertNodeDeclaration(ASTNode& n) { if (n.is_type<language::var_declaration>()) { - if (n.children.size() == 3) { - n.children[0] = std::move(n.children[1]); - n.children[1] = std::move(n.children[2]); + if (n.children.size() == 4) { + n.children[0] = std::move(n.children[2]); + n.children[1] = std::move(n.children[3]); n.children.resize(2); n.set_type<language::eq_op>(); } diff --git a/src/language/ASTSymbolInitializationChecker.cpp b/src/language/ASTSymbolInitializationChecker.cpp index dcd8ca5e53cbb138c1d1a9a67d519bec42748691..7f0e417e0fd789a4f67f3a627ddc7040a09722fe 100644 --- a/src/language/ASTSymbolInitializationChecker.cpp +++ b/src/language/ASTSymbolInitializationChecker.cpp @@ -8,22 +8,53 @@ void ASTSymbolInitializationChecker::_checkSymbolInitialization(ASTNode& node) { if (node.is_type<language::var_declaration>()) { - auto check_if_initialized = [&](ASTNode& name_node) { + auto set_is_initialized = [&](ASTNode& name_node) { const std::string& symbol = name_node.string(); auto [i_symbol, found] = node.m_symbol_table->find(symbol, name_node.begin()); Assert(found, "unexpected error, should have been detected through declaration checking"); - if (node.children.size() == 3) { - this->_checkSymbolInitialization(*node.children[2]); - i_symbol->attributes().setIsInitialized(); + i_symbol->attributes().setIsInitialized(); + }; + + auto check_correct_name_in_definition = [](ASTNode& decl_name_node, ASTNode& def_name_node) { + if (decl_name_node.string() != def_name_node.string()) { + std::ostringstream os; + os << "invalid identifier, expecting '" << decl_name_node.string() << "'" << std::ends; + throw parse_error(os.str(), std::vector{def_name_node.begin()}); } }; - if (node.children[1]->is_type<language::name>()) { - check_if_initialized(*node.children[1]); - } else if (node.children[1]->is_type<language::name_list>()) { - ASTNode& name_list_node = *node.children[1]; - for (auto& child_node : name_list_node.children) { - check_if_initialized(*child_node); + if (node.children[0]->is_type<language::name>()) { + if (node.children.size() == 4) { + this->_checkSymbolInitialization(*node.children[3]); + check_correct_name_in_definition(*node.children[0], *node.children[2]); + set_is_initialized(*node.children[0]); + } + } else if (node.children[0]->is_type<language::name_list>()) { + if (node.children.size() == 4) { + ASTNode& decl_name_list_node = *node.children[0]; + ASTNode& def_name_list_node = *node.children[2]; + Assert(def_name_list_node.is_type<language::name_list>()); + ASTNode& expression_list_node = *node.children[3]; + Assert(expression_list_node.is_type<language::expression_list>()); + + if (decl_name_list_node.children.size() != def_name_list_node.children.size()) { + std::ostringstream os; + os << "invalid number of definition identifiers, expecting " << decl_name_list_node.children.size() + << " found " << def_name_list_node.children.size() << std::ends; + throw parse_error(os.str(), std::vector{def_name_list_node.begin()}); + } + if (def_name_list_node.children.size() != expression_list_node.children.size()) { + std::ostringstream os; + os << "invalid number of definition expressions, expecting " << decl_name_list_node.children.size() + << " found " << expression_list_node.children.size() << std::ends; + throw parse_error(os.str(), std::vector{expression_list_node.begin()}); + } + + this->_checkSymbolInitialization(expression_list_node); + for (size_t i = 0; i < decl_name_list_node.children.size(); ++i) { + check_correct_name_in_definition(*decl_name_list_node.children[i], *def_name_list_node.children[i]); + set_is_initialized(*decl_name_list_node.children[i]); + } } } } else if (node.is_type<language::fct_declaration>()) { diff --git a/src/language/ASTSymbolTableBuilder.cpp b/src/language/ASTSymbolTableBuilder.cpp index 3a326b53995ed9c37c2ed3fedf7007a07239d646..136efd2f38c5b838eb222371b088fa3420fba21b 100644 --- a/src/language/ASTSymbolTableBuilder.cpp +++ b/src/language/ASTSymbolTableBuilder.cpp @@ -50,11 +50,11 @@ ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable> } }; - if (n.children[1]->is_type<language::name>()) { - register_symbol(*n.children[1]); + if (n.children[0]->is_type<language::name>()) { + register_symbol(*n.children[0]); } else { // treats the case of list of parameters - Assert(n.children[1]->is_type<language::name_list>()); - for (auto& child : n.children[1]->children) { + Assert(n.children[0]->is_type<language::name_list>()); + for (auto& child : n.children[0]->children) { register_symbol(*child); } } diff --git a/src/language/PEGGrammar.hpp b/src/language/PEGGrammar.hpp index deed6014f01c6909d7104904df86324d6d912f77..e65f96f1007ac4c2a0945595f5fa42cc1c24e5c8 100644 --- a/src/language/PEGGrammar.hpp +++ b/src/language/PEGGrammar.hpp @@ -76,7 +76,8 @@ struct type_specifier : sor< vector_type, basic_type >{}; struct TYPE_SPECIFIER : seq< type_specifier, ignored >{}; -struct type_expression : list< TYPE_SPECIFIER, seq< one< '*' >, ignored > >{}; +struct type_expression : list_must< type_specifier, seq< ignored, one< '*' >, ignored > >{}; +struct TYPE_EXPRESSION : seq< type_expression, ignored >{}; struct and_kw : TAO_PEGTL_KEYWORD("and") {}; struct or_kw : TAO_PEGTL_KEYWORD("or") {}; @@ -236,15 +237,17 @@ struct affectation : seq< sor< lvalue_expression, lvalue_list >, if_must< affect struct name_list; -struct var_declaration : seq< type_expression, sor< NAME, name_list>, opt< if_must< seq< one< '=' >, ignored >, sor< expression_list, expression > > > >{}; +struct var_definition : seq< sor< NAME, name_list>, one< '=' >, ignored, sor< expression_list, expression > >{}; -struct type_mapping : seq< type_expression, RIGHT_ARROW, type_expression >{}; +struct var_declaration : seq< LET, sor< NAME, name_list>, COLUMN, TYPE_EXPRESSION, opt< if_must< COMMA, var_definition > > >{}; + +struct type_mapping : seq< TYPE_EXPRESSION, RIGHT_ARROW, TYPE_EXPRESSION >{}; struct name_list : seq< open_parent, list_must< NAME, COMMA >, close_parent >{}; struct function_definition : seq< sor< name_list, NAME >, RIGHT_ARROW, sor< expression_list, expression > >{}; -struct fct_declaration : if_must< LET, NAME, COLUMN, type_mapping, COMMA, function_definition >{}; +struct fct_declaration : seq< LET, NAME, COLUMN, type_mapping, COMMA, function_definition >{}; struct open_brace : seq< one< '{' >, ignored >{}; struct close_brace : seq< one< '}' >, ignored >{}; @@ -286,8 +289,8 @@ struct instruction if_must< BREAK, semicol >, if_must< CONTINUE, semicol >, block, - if_must< var_declaration, semicol >, if_must< fct_declaration, semicol >, + if_must< var_declaration, semicol >, if_must< affectation, semicol >, if_must< expression, semicol >, semicol> diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp index 84726760b13616b9e181e4a7af4d44ac1dcc0b69..8226db8316b2f45f20fff9850077f3728ad6f6df 100644 --- a/src/language/PugsParser.cpp +++ b/src/language/PugsParser.cpp @@ -63,14 +63,6 @@ parser(const std::string& filename) ASTNodeDataTypeBuilder{*root_node}; - { - std::string dot_filename{"parse_tree.dot"}; - std::ofstream fout(dot_filename); - ASTDotPrinter dot_printer{*root_node}; - fout << dot_printer; - std::cout << " AST dot file: " << dot_filename << '\n'; - } - ASTNodeDataTypeChecker{*root_node}; ASTNodeJumpPlacementChecker{*root_node}; @@ -81,6 +73,14 @@ parser(const std::string& filename) ASTNodeTypeCleaner<language::var_declaration>{*root_node}; ASTNodeTypeCleaner<language::fct_declaration>{*root_node}; + { + std::string dot_filename{"parse_tree.dot"}; + std::ofstream fout(dot_filename); + ASTDotPrinter dot_printer{*root_node}; + fout << dot_printer; + std::cout << " AST dot file: " << dot_filename << '\n'; + } + ASTNodeEmptyBlockCleaner{*root_node}; ASTNodeExpressionBuilder{*root_node}; diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp index bf64540f3dd0edf0fbcebc957e427f983c690045..b21455bffc79c54a24ae9099eadfc74da48dfb42 100644 --- a/tests/test_ASTBuilder.cpp +++ b/tests/test_ASTBuilder.cpp @@ -26,32 +26,37 @@ TEST_CASE("ASTBuilder", "[language]") SECTION("declarations with init") { std::string_view data = R"( -N n = 2; -Z z = 3; -R r = 2.3e-5; -B b = false; -string s = "foo"; +let n:N, n = 2; +let z:Z, z = 3; +let r :R,r= 2.3e-5; +let b: B ,b = false; +let s : string, s = "foo"; )"; std::string_view result = R"( (root) +-(language::var_declaration) + | +-(language::name:n) | +-(language::N_set) | +-(language::name:n) | `-(language::integer:2) +-(language::var_declaration) + | +-(language::name:z) | +-(language::Z_set) | +-(language::name:z) | `-(language::integer:3) +-(language::var_declaration) + | +-(language::name:r) | +-(language::R_set) | +-(language::name:r) | `-(language::real:2.3e-5) +-(language::var_declaration) + | +-(language::name:b) | +-(language::B_set) | +-(language::name:b) | `-(language::false_kw) `-(language::var_declaration) + +-(language::name:s) +-(language::string_type) +-(language::name:s) `-(language::literal:"foo") @@ -62,42 +67,42 @@ string s = "foo"; SECTION("affectations") { std::string_view data = R"( -N n; n = 2; -Z z; z = 3; -R r; r = 2.3e-5; -B b; b = false; -string s; s = "foo"; +let n:N; n = 2; +let z:Z; z = 3; +let r:R; r = 2.3e-5; +let b:B; b = false; +let s:string; s = "foo"; )"; std::string_view result = R"( (root) +-(language::var_declaration) - | +-(language::N_set) - | `-(language::name:n) + | +-(language::name:n) + | `-(language::N_set) +-(language::eq_op) | +-(language::name:n) | `-(language::integer:2) +-(language::var_declaration) - | +-(language::Z_set) - | `-(language::name:z) + | +-(language::name:z) + | `-(language::Z_set) +-(language::eq_op) | +-(language::name:z) | `-(language::integer:3) +-(language::var_declaration) - | +-(language::R_set) - | `-(language::name:r) + | +-(language::name:r) + | `-(language::R_set) +-(language::eq_op) | +-(language::name:r) | `-(language::real:2.3e-5) +-(language::var_declaration) - | +-(language::B_set) - | `-(language::name:b) + | +-(language::name:b) + | `-(language::B_set) +-(language::eq_op) | +-(language::name:b) | `-(language::false_kw) +-(language::var_declaration) - | +-(language::string_type) - | `-(language::name:s) + | +-(language::name:s) + | `-(language::string_type) `-(language::eq_op) +-(language::name:s) `-(language::literal:"foo") @@ -420,9 +425,9 @@ if (a > 0) { { std::string_view data = R"( if (a > 0) { - R b = a; + let b:R, b = a; } else { - R c = 2*a; + let c:R, c = 2*a; } )"; @@ -434,11 +439,13 @@ if (a > 0) { | `-(language::integer:0) +-(language::block) | `-(language::var_declaration) + | +-(language::name:b) | +-(language::R_set) | +-(language::name:b) | `-(language::name:a) `-(language::block) `-(language::var_declaration) + +-(language::name:c) +-(language::R_set) +-(language::name:c) `-(language::multiply_op) @@ -452,9 +459,9 @@ if (a > 0) { { std::string_view data = R"( if (a > 0) { - R b = a; + let b:R, b = a; } else { - R c = 2*a; + let c:R, c = 2*a; ++a; } )"; @@ -467,11 +474,13 @@ if (a > 0) { | `-(language::integer:0) +-(language::block) | `-(language::var_declaration) + | +-(language::name:b) | +-(language::R_set) | +-(language::name:b) | `-(language::name:a) `-(language::block) +-(language::var_declaration) + | +-(language::name:c) | +-(language::R_set) | +-(language::name:c) | `-(language::multiply_op) @@ -487,10 +496,10 @@ if (a > 0) { { std::string_view data = R"( if (a > 0) { - R b = a; + let b:R, b = a; ++b; } else { - R c = 2*a; + let c:R, c = 2*a; } )"; @@ -502,6 +511,7 @@ if (a > 0) { | `-(language::integer:0) +-(language::block) | +-(language::var_declaration) + | | +-(language::name:b) | | +-(language::R_set) | | +-(language::name:b) | | `-(language::name:a) @@ -509,6 +519,7 @@ if (a > 0) { | `-(language::name:b) `-(language::block) `-(language::var_declaration) + +-(language::name:c) +-(language::R_set) +-(language::name:c) `-(language::multiply_op) @@ -521,7 +532,7 @@ if (a > 0) { SECTION("for-statements simplification") { std::string_view data = R"( -for(N i=0; i<10; ++i) { +for(let i:N, i=0; i<10; ++i) { i += 3; } )"; @@ -530,6 +541,7 @@ for(N i=0; i<10; ++i) { (root) `-(language::for_statement) +-(language::var_declaration) + | +-(language::name:i) | +-(language::N_set) | +-(language::name:i) | `-(language::integer:0) @@ -548,9 +560,9 @@ for(N i=0; i<10; ++i) { SECTION("for-statements simplification (complex block)") { std::string_view data = R"( -for(N i=0; i<10; ++i) { +for(let i:N, i=0; i<10; ++i) { i += 3; - R j=i/5.; + let j:R, j=i/5.; } )"; @@ -558,6 +570,7 @@ for(N i=0; i<10; ++i) { (root) `-(language::for_statement) +-(language::var_declaration) + | +-(language::name:i) | +-(language::N_set) | +-(language::name:i) | `-(language::integer:0) @@ -571,6 +584,7 @@ for(N i=0; i<10; ++i) { | +-(language::name:i) | `-(language::integer:3) `-(language::var_declaration) + +-(language::name:j) +-(language::R_set) +-(language::name:j) `-(language::divide_op) diff --git a/tests/test_ASTDotPrinter.cpp b/tests/test_ASTDotPrinter.cpp index c9f24580223247b5e844ace411be1df1f6da1a1b..458ce5edf8a01a2efea456e4cf08197a162cae48 100644 --- a/tests/test_ASTDotPrinter.cpp +++ b/tests/test_ASTDotPrinter.cpp @@ -23,7 +23,7 @@ TEST_CASE("ASTDotPrinter", "[language]") rang::setControlMode(rang::control::Off); std::string_view data = R"( -N n = 2 + 3; +let n:N, n = 2 + 3; )"; std::string_view result = R"( @@ -31,14 +31,15 @@ digraph parse_tree { x0 [ label="root \nundefined" ] x0 -> { x1 } - x1 [ label="language::var_declaration\nN n = 2 + 3\nundefined" ] - x1 -> { x2, x3, x4 } - x2 [ label="language::N_set\nN\nundefined" ] - x3 [ label="language::name\nn\nundefined" ] - x4 [ label="language::plus_op\nundefined" ] - x4 -> { x5, x6 } - x5 [ label="language::integer\n2\nundefined" ] - x6 [ label="language::integer\n3\nundefined" ] + x1 [ label="language::var_declaration\nlet n:N, n = 2 + 3\nundefined" ] + x1 -> { x2, x3, x4, x5 } + x2 [ label="language::name\nn\nundefined" ] + x3 [ label="language::N_set\nN\nundefined" ] + x4 [ label="language::name\nn\nundefined" ] + x5 [ label="language::plus_op\nundefined" ] + x5 -> { x6, x7 } + x6 [ label="language::integer\n2\nundefined" ] + x7 [ label="language::integer\n3\nundefined" ] } )"; CHECK_DOT(data, result); diff --git a/tests/test_ASTNodeAffectationExpressionBuilder.cpp b/tests/test_ASTNodeAffectationExpressionBuilder.cpp index 3e3f3168cb78dc8c2b26c868e49f49b2b3efe7af..c0711fe871338f0db8047eae982edcdcdba65302 100644 --- a/tests/test_ASTNodeAffectationExpressionBuilder.cpp +++ b/tests/test_ASTNodeAffectationExpressionBuilder.cpp @@ -70,7 +70,7 @@ TEST_CASE("ASTNodeAffectationExpressionBuilder", "[language]") SECTION("B <- B") { std::string_view data = R"( -B b=true; +let b:B, b=true; )"; std::string_view result = R"( @@ -89,7 +89,7 @@ B b=true; SECTION("N <- B") { std::string_view data = R"( -N n=true; +let n:N, n=true; )"; std::string_view result = R"( @@ -105,7 +105,7 @@ N n=true; SECTION("N <- N") { std::string_view data = R"( -N m; N n=m; +let m : N; let n:N, n=m; )"; std::string_view result = R"( @@ -121,7 +121,7 @@ N m; N n=m; SECTION("N <- Z") { std::string_view data = R"( -Z z; N n=z; +let z:Z; let n :N, n=z; )"; std::string_view result = R"( @@ -140,7 +140,7 @@ Z z; N n=z; SECTION("Z <- B") { std::string_view data = R"( -Z z=true; +let z : Z, z=true; )"; std::string_view result = R"( @@ -156,7 +156,7 @@ Z z=true; SECTION("Z <- N") { std::string_view data = R"( -N m; Z z=m; +let m : N; let z : Z, z=m; )"; std::string_view result = R"( @@ -172,7 +172,7 @@ N m; Z z=m; SECTION("Z <- Z") { std::string_view data = R"( -Z q; Z z=q; +let q : Z; let z : Z, z=q; )"; std::string_view result = R"( @@ -191,7 +191,7 @@ Z q; Z z=q; SECTION("R <- B") { std::string_view data = R"( -R r=true; +let r : R, r=true; )"; std::string_view result = R"( @@ -207,7 +207,7 @@ R r=true; SECTION("R <- N") { std::string_view data = R"( -N m; R r=m; +let m : N; let r : R, r=m; )"; std::string_view result = R"( @@ -223,7 +223,7 @@ N m; R r=m; SECTION("R <- Z") { std::string_view data = R"( -Z z; R r=z; +let z : Z; let r : R, r=z; )"; std::string_view result = R"( @@ -239,7 +239,7 @@ Z z; R r=z; SECTION("R <- R") { std::string_view data = R"( -R s; R r=s; +let s : R; let r : R, r=s; )"; std::string_view result = R"( @@ -258,8 +258,8 @@ R s; R r=s; SECTION("R^1 <- R^1") { std::string_view data = R"( -R^1 x; -R^1 y = x; +let x : R^1; +let y : R^1, y = x; )"; std::string_view result = R"( @@ -275,7 +275,7 @@ R^1 y = x; SECTION("R^1 <- R") { std::string_view data = R"( -R^1 x = 1.3; +let x : R^1, x = 1.3; )"; std::string_view result = R"( @@ -291,7 +291,7 @@ R^1 x = 1.3; SECTION("R^1 <- Z") { std::string_view data = R"( -R^1 x = -1; +let x : R^1, x = -1; )"; std::string_view result = R"( @@ -308,8 +308,8 @@ R^1 x = -1; SECTION("R^1 <- N") { std::string_view data = R"( -N n; -R^1 x = n; +let n : N; +let x : R^1, x = n; )"; std::string_view result = R"( @@ -325,8 +325,8 @@ R^1 x = n; SECTION("R^1 <- B") { std::string_view data = R"( -B b; -R^1 x = b; +let b : B; +let x : R^1, x = b; )"; std::string_view result = R"( @@ -342,7 +342,7 @@ R^1 x = b; SECTION("R^1 <- 0") { std::string_view data = R"( -R^1 x = 0; +let x : R^1, x = 0; )"; std::string_view result = R"( @@ -358,8 +358,8 @@ R^1 x = 0; SECTION("R^2 <- R^2") { std::string_view data = R"( -R^2 x; -R^2 y = x; +let x : R^2; +let y : R^2, y = x; )"; std::string_view result = R"( @@ -375,7 +375,7 @@ R^2 y = x; SECTION("R^2 <- (.,.)") { std::string_view data = R"( -R^2 y = (0,1); +let y : R^2, y = (0,1); )"; std::string_view result = R"( @@ -393,7 +393,7 @@ R^2 y = (0,1); SECTION("R^2 <- 0") { std::string_view data = R"( -R^2 x = 0; +let x : R^2, x = 0; )"; std::string_view result = R"( @@ -409,8 +409,8 @@ R^2 x = 0; SECTION("R^3 <- R^3") { std::string_view data = R"( -R^3 x; -R^3 y = x; +let x : R^3; +let y : R^3, y = x; )"; std::string_view result = R"( @@ -426,7 +426,7 @@ R^3 y = x; SECTION("R^3 <- 0") { std::string_view data = R"( -R^3 x = 0; +let x : R^3, x = 0; )"; std::string_view result = R"( @@ -442,7 +442,7 @@ R^3 x = 0; SECTION("R^3 <- (.,.)") { std::string_view data = R"( -R^3 y = (1,2,3); +let y : R^3, y = (1,2,3); )"; std::string_view result = R"( @@ -464,7 +464,7 @@ R^3 y = (1,2,3); SECTION("string <- B") { std::string_view data = R"( -string s=true; +let s : string, s=true; )"; std::string result = R"( @@ -481,7 +481,7 @@ string s=true; SECTION("string <- N") { std::string_view data = R"( -N n; string s=n; +let n : N; let s : string, s=n; )"; std::string result = R"( @@ -498,7 +498,7 @@ N n; string s=n; SECTION("string <- Z") { std::string_view data = R"( -Z z; string s=z; +let z : Z; let s : string, s=z; )"; std::string result = R"( @@ -516,7 +516,7 @@ Z z; string s=z; SECTION("string <- R") { std::string_view data = R"( -R r; string s=r; +let r : R; let s : string, s=r; )"; std::string result = R"( @@ -534,7 +534,7 @@ R r; string s=r; SECTION("string <- string") { std::string_view data = R"( -string s="foo"; +let s : string, s="foo"; )"; std::string result = R"( @@ -555,7 +555,7 @@ string s="foo"; SECTION("N += N") { std::string_view data = R"( -N n=1; n+=n; +let n : N, n=1; n+=n; )"; std::string_view result = R"( @@ -574,7 +574,7 @@ N n=1; n+=n; SECTION("R += N") { std::string_view data = R"( -R x=1; x+=2; +let x : R, x=1; x+=2; )"; std::string_view result = R"( @@ -593,7 +593,7 @@ R x=1; x+=2; SECTION("string += N") { std::string_view data = R"( -string s="foo"; s+=2; +let s : string, s="foo"; s+=2; )"; std::string result = R"( @@ -615,8 +615,8 @@ string s="foo"; s+=2; SECTION("R^1 += R^1") { std::string_view data = R"( -R^1 x; -R^1 y; +let x : R^1; +let y : R^1; x += y; )"; @@ -633,8 +633,8 @@ x += y; SECTION("R^2 += R^2") { std::string_view data = R"( -R^2 x; -R^2 y; +let x : R^2; +let y : R^2; x += y; )"; @@ -651,8 +651,8 @@ x += y; SECTION("R^3 += R^3") { std::string_view data = R"( -R^3 x; -R^3 y; +let x : R^3; +let y : R^3; x += y; )"; @@ -672,7 +672,7 @@ x += y; SECTION("Z -= Z") { std::string_view data = R"( -Z z=1; z-=2; +let z : Z, z=1; z-=2; )"; std::string_view result = R"( @@ -691,7 +691,7 @@ Z z=1; z-=2; SECTION("R -= R") { std::string_view data = R"( -R x=1; x-=2.3; +let x : R, x=1; x-=2.3; )"; std::string_view result = R"( @@ -710,8 +710,8 @@ R x=1; x-=2.3; SECTION("R^1 -= R^1") { std::string_view data = R"( -R^1 x; -R^1 y; +let x : R^1; +let y : R^1; x -= y; )"; @@ -728,8 +728,8 @@ x -= y; SECTION("R^2 -= R^2") { std::string_view data = R"( -R^2 x; -R^2 y; +let x : R^2; +let y : R^2; x -= y; )"; @@ -746,8 +746,8 @@ x -= y; SECTION("R^3 -= R^3") { std::string_view data = R"( -R^3 x; -R^3 y; +let x : R^3; +let y : R^3; x -= y; )"; @@ -767,7 +767,7 @@ x -= y; SECTION("Z *= Z") { std::string_view data = R"( -Z z=1; z*=2; +let z : Z, z=1; z*=2; )"; std::string_view result = R"( @@ -786,7 +786,7 @@ Z z=1; z*=2; SECTION("R *= R") { std::string_view data = R"( -R x=1; x*=2.3; +let x : R, x=1; x*=2.3; )"; std::string_view result = R"( @@ -805,7 +805,7 @@ R x=1; x*=2.3; SECTION("R^1 *= R") { std::string_view data = R"( -R^1 x; x*=2.3; +let x : R^1; x*=2.3; )"; std::string_view result = R"( @@ -821,7 +821,7 @@ R^1 x; x*=2.3; SECTION("R^2 *= R") { std::string_view data = R"( -R^2 x; x*= 6.2; +let x : R^2; x*= 6.2; )"; std::string_view result = R"( @@ -837,7 +837,7 @@ R^2 x; x*= 6.2; SECTION("R^3 *= R") { std::string_view data = R"( -R^3 x; x*= 3.1; +let x : R^3; x*= 3.1; )"; std::string_view result = R"( @@ -853,7 +853,7 @@ R^3 x; x*= 3.1; SECTION("R *= Z") { std::string_view data = R"( -R x=1; x*=2; +let x : R, x=1; x*=2; )"; std::string_view result = R"( @@ -872,7 +872,7 @@ R x=1; x*=2; SECTION("R^1 *= Z") { std::string_view data = R"( -R^1 x; x *= 3; +let x : R^1; x *= 3; )"; std::string_view result = R"( @@ -888,7 +888,7 @@ R^1 x; x *= 3; SECTION("R^2 *= Z") { std::string_view data = R"( -R^2 x; x *= 6; +let x : R^2; x *= 6; )"; std::string_view result = R"( @@ -904,7 +904,7 @@ R^2 x; x *= 6; SECTION("R^3 *= Z") { std::string_view data = R"( -R^3 x; x *= 4; +let x : R^3; x *= 4; )"; std::string_view result = R"( @@ -920,7 +920,7 @@ R^3 x; x *= 4; SECTION("R *= N") { std::string_view data = R"( -N n=2; R x=1; x *= n; +let n : N, n=2; let x : R, x=1; x *= n; )"; std::string_view result = R"( @@ -942,8 +942,8 @@ N n=2; R x=1; x *= n; SECTION("R^1 *= N") { std::string_view data = R"( -N n; -R^1 x; x *= n; +let n : N; +let x : R^1; x *= n; )"; std::string_view result = R"( @@ -959,8 +959,8 @@ R^1 x; x *= n; SECTION("R^2 *= N") { std::string_view data = R"( -N n; -R^2 x; x *= n; +let n : N; +let x : R^2; x *= n; )"; std::string_view result = R"( @@ -976,8 +976,8 @@ R^2 x; x *= n; SECTION("R^3 *= N") { std::string_view data = R"( -N n; -R^3 x; x *= n; +let n : N; +let x : R^3; x *= n; )"; std::string_view result = R"( @@ -993,7 +993,7 @@ R^3 x; x *= n; SECTION("R *= B") { std::string_view data = R"( -R x=1; x *= true; +let x : R, x=1; x *= true; )"; std::string_view result = R"( @@ -1012,7 +1012,7 @@ R x=1; x *= true; SECTION("R^1 *= B") { std::string_view data = R"( -R^1 x; x *= true; +let x : R^1; x *= true; )"; std::string_view result = R"( @@ -1028,7 +1028,7 @@ R^1 x; x *= true; SECTION("R^2 *= B") { std::string_view data = R"( -R^2 x; x *= false; +let x : R^2; x *= false; )"; std::string_view result = R"( @@ -1044,7 +1044,7 @@ R^2 x; x *= false; SECTION("R^3 *= B") { std::string_view data = R"( -B b; R^3 x; x *= b; +let b : B; let x : R^3; x *= b; )"; std::string_view result = R"( @@ -1063,7 +1063,7 @@ B b; R^3 x; x *= b; SECTION("Z /= Z") { std::string_view data = R"( -Z z=6; z/=2; +let z : Z, z=6; z/=2; )"; std::string_view result = R"( @@ -1082,7 +1082,7 @@ Z z=6; z/=2; SECTION("R /= R") { std::string_view data = R"( -R x=1; x/=2.3; +let x : R, x=1; x/=2.3; )"; std::string_view result = R"( @@ -1146,7 +1146,7 @@ R x=1; x/=2.3; SECTION("string -= string") { std::string_view data = R"( -string s="foo"; s-="bar"; +let s : string, s="foo"; s-="bar"; )"; std::string error_message = "invalid operator for string affectation"; @@ -1157,7 +1157,7 @@ string s="foo"; s-="bar"; SECTION("string *= Z") { std::string_view data = R"( -string s="foo"; s*=2; +let s : string, s="foo"; s*=2; )"; std::string error_message = "invalid operator for string affectation"; @@ -1168,7 +1168,7 @@ string s="foo"; s*=2; SECTION("string /= string") { std::string_view data = R"( -string s="foo"; s/="bar"; +let s : string, s="foo"; s/="bar"; )"; std::string error_message = "invalid operator for string affectation"; @@ -1182,7 +1182,7 @@ string s="foo"; s/="bar"; SECTION("R^3 <- R^1") { std::string_view data = R"( -R^3 x; R^1 y; x = y; +let x : R^3; let y : R^1; x = y; )"; std::string error_message = "incompatible dimensions in affectation"; @@ -1193,7 +1193,7 @@ R^3 x; R^1 y; x = y; SECTION("R^3 <- R^2") { std::string_view data = R"( -R^3 x; R^2 y; x = y; +let x : R^3; let y : R^2; x = y; )"; std::string error_message = "incompatible dimensions in affectation"; @@ -1204,7 +1204,7 @@ R^3 x; R^2 y; x = y; SECTION("R^2 <- R^1") { std::string_view data = R"( -R^2 x; R^1 y; x = y; +let x : R^2; let y : R^1; x = y; )"; std::string error_message = "incompatible dimensions in affectation"; @@ -1215,7 +1215,7 @@ R^2 x; R^1 y; x = y; SECTION("R^2 <- R^3") { std::string_view data = R"( -R^2 x; R^3 y; x = y; +let x : R^2; let y : R^3; x = y; )"; std::string error_message = "incompatible dimensions in affectation"; @@ -1226,7 +1226,7 @@ R^2 x; R^3 y; x = y; SECTION("R^1 <- R^2") { std::string_view data = R"( -R^1 x; R^2 y; x = y; +let x : R^1; let y : R^2; x = y; )"; std::string error_message = "incompatible dimensions in affectation"; @@ -1237,7 +1237,7 @@ R^1 x; R^2 y; x = y; SECTION("R^1 <- R^3") { std::string_view data = R"( -R^1 x; R^2 y; x = y; +let x : R^1; let y : R^2; x = y; )"; std::string error_message = "incompatible dimensions in affectation"; @@ -1251,7 +1251,7 @@ R^1 x; R^2 y; x = y; SECTION("R^3 <- Z") { std::string_view data = R"( -R^3 x = 3; +let x : R^3, x = 3; )"; std::string error_message = "invalid implicit conversion: Z -> R^3"; @@ -1262,7 +1262,7 @@ R^3 x = 3; SECTION("R^2 <- Z") { std::string_view data = R"( -R^2 x = 2; +let x : R^2, x = 2; )"; std::string error_message = "invalid implicit conversion: Z -> R^2"; @@ -1276,7 +1276,7 @@ R^2 x = 2; SECTION("R^3 <- R^3") { std::string_view data = R"( -R^3 x; R^3 y; x /= y; +let x : R^3; let y : R^3; x /= y; )"; std::string error_message = "invalid affectation operator for R^3"; @@ -1287,7 +1287,7 @@ R^3 x; R^3 y; x /= y; SECTION("R^2 <- R^2") { std::string_view data = R"( -R^2 x; R^2 y; x /= y; +let x : R^2; let y : R^2; x /= y; )"; std::string error_message = "invalid affectation operator for R^2"; @@ -1298,7 +1298,7 @@ R^2 x; R^2 y; x /= y; SECTION("R^1 <- R^1") { std::string_view data = R"( -R^1 x; R^1 y; x /= y; +let x : R^1; let y : R^1; x /= y; )"; std::string error_message = "invalid affectation operator for R^1"; @@ -1312,7 +1312,7 @@ R^1 x; R^1 y; x /= y; SECTION("R^3 <- R^3") { std::string_view data = R"( -R^3 x; R^3 y; x *= y; +let x : R^3; let y : R^3; x *= y; )"; std::string error_message = "expecting scalar operand type"; @@ -1323,7 +1323,7 @@ R^3 x; R^3 y; x *= y; SECTION("R^2 <- R^2") { std::string_view data = R"( -R^2 x; R^2 y; x *= y; +let x : R^2; let y : R^2; x *= y; )"; std::string error_message = "expecting scalar operand type"; @@ -1334,7 +1334,7 @@ R^2 x; R^2 y; x *= y; SECTION("R^1 <- R^1") { std::string_view data = R"( -R^1 x; R^1 y; x *= y; +let x : R^1; let y : R^1; x *= y; )"; std::string error_message = "expecting scalar operand type"; diff --git a/tests/test_ASTNodeBinaryOperatorExpressionBuilder.cpp b/tests/test_ASTNodeBinaryOperatorExpressionBuilder.cpp index 741182f8a2f36b7325cfb5b8180ab466c293e05f..09bbc86ce0b435bcb3517ade4d01ff642dd2534a 100644 --- a/tests/test_ASTNodeBinaryOperatorExpressionBuilder.cpp +++ b/tests/test_ASTNodeBinaryOperatorExpressionBuilder.cpp @@ -64,7 +64,7 @@ TEST_CASE("ASTNodeBinaryOperatorExpressionBuilder", "[language]") SECTION("B") { std::string_view data = R"( -B b; +let b : B; b*true; false*b*true; )"; @@ -87,8 +87,8 @@ false*b*true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n*m*n; )"; @@ -107,7 +107,7 @@ n*m*n; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a*3*a; )"; @@ -146,7 +146,7 @@ a*3*a; SECTION("R^1") { std::string_view data = R"( -R^1 x = 3.7; +let x : R^1, x = 3.7; 2*x; )"; @@ -166,7 +166,7 @@ R^1 x = 3.7; SECTION("R^2") { std::string_view data = R"( -R^2 x = (3.2,6); +let x : R^2, x = (3.2,6); 2*x; )"; @@ -188,7 +188,7 @@ R^2 x = (3.2,6); SECTION("R^3") { std::string_view data = R"( -R^3 x = (3.2,6,1.2); +let x : R^3, x = (3.2,6,1.2); 2*x; )"; @@ -214,7 +214,7 @@ R^3 x = (3.2,6,1.2); SECTION("B") { std::string_view data = R"( -B b; +let b : B; b/true; false/b/true; )"; @@ -237,8 +237,8 @@ false/b/true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n/m/n; )"; @@ -257,7 +257,7 @@ n/m/n; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a/3/a; )"; @@ -299,7 +299,7 @@ a/3/a; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b+true; false+b+true; )"; @@ -322,8 +322,8 @@ false+b+true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n+m+n; )"; @@ -342,7 +342,7 @@ n+m+n; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a+3+a; )"; @@ -381,8 +381,8 @@ a+3+a; SECTION("R^1") { std::string_view data = R"( -R^1 x = 1; -R^1 y = 2; +let x : R^1, x = 1; +let y : R^1, y = 2; x+y; )"; @@ -405,8 +405,8 @@ x+y; SECTION("R^2") { std::string_view data = R"( -R^2 x = (1,2); -R^2 y = (0.3,0.7); +let x : R^2, x = (1,2); +let y : R^2, y = (0.3,0.7); x+y; )"; @@ -433,8 +433,8 @@ x+y; SECTION("R^3") { std::string_view data = R"( -R^3 x = (1,2,3); -R^3 y = (4,3,2); +let x : R^3, x = (1,2,3); +let y : R^3, y = (4,3,2); x+y; )"; @@ -479,7 +479,7 @@ x+y; SECTION("string concatenate N") { std::string_view data = R"( -N n=0; +let n : N, n=0; "foo"+n; )"; @@ -553,7 +553,7 @@ N n=0; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b-true; false-b-true; )"; @@ -576,8 +576,8 @@ false-b-true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n-m-n; )"; @@ -596,7 +596,7 @@ n-m-n; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a-3-a; )"; @@ -635,8 +635,8 @@ a-3-a; SECTION("R^1") { std::string_view data = R"( -R^1 x = 1; -R^1 y = 2; +let x : R^1, x = 1; +let y : R^1, y = 2; x-y; )"; @@ -659,8 +659,8 @@ x-y; SECTION("R^2") { std::string_view data = R"( -R^2 x = (1,2); -R^2 y = (0.3,0.7); +let x : R^2, x = (1,2); +let y : R^2, y = (0.3,0.7); x-y; )"; @@ -687,8 +687,8 @@ x-y; SECTION("R^3") { std::string_view data = R"( -R^3 x = (1,2,3); -R^3 y = (4,3,2); +let x : R^3, x = (1,2,3); +let y : R^3, y = (4,3,2); x-y; )"; @@ -720,7 +720,7 @@ x-y; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b or true; false or b or true; )"; @@ -746,7 +746,7 @@ false or b or true; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b and true; false and b and true; )"; @@ -772,7 +772,7 @@ false and b and true; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b xor true; false xor b xor true; )"; @@ -798,7 +798,7 @@ false xor b xor true; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b > true; )"; @@ -815,8 +815,8 @@ b > true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n > m; )"; @@ -833,7 +833,7 @@ n > m; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a > 3; )"; @@ -869,7 +869,7 @@ a > 3; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b < true; )"; @@ -886,8 +886,8 @@ b < true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n < m; )"; @@ -904,7 +904,7 @@ n < m; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a < 3; )"; @@ -939,7 +939,7 @@ a < 3; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b >= true; )"; @@ -956,8 +956,8 @@ b >= true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n >= m; )"; @@ -974,7 +974,7 @@ n >= m; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a >= 3; )"; @@ -1010,7 +1010,7 @@ a >= 3; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b <= true; )"; @@ -1027,8 +1027,8 @@ b <= true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n <= m; )"; @@ -1045,7 +1045,7 @@ n <= m; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a <= 3; )"; @@ -1081,7 +1081,7 @@ a <= 3; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b == true; )"; @@ -1098,8 +1098,8 @@ b == true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n == m; )"; @@ -1116,7 +1116,7 @@ n == m; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a == 3; )"; @@ -1168,8 +1168,8 @@ a == 3; SECTION("R^1") { std::string_view data = R"( -R^1 x = 1; -R^1 y = 2; +let x : R^1, x = 1; +let y : R^1, y = 2; x==y; )"; @@ -1192,8 +1192,8 @@ x==y; SECTION("R^2") { std::string_view data = R"( -R^2 x = (1,2); -R^2 y = (0.3,0.7); +let x : R^2, x = (1,2); +let y : R^2, y = (0.3,0.7); x==y; )"; @@ -1220,8 +1220,8 @@ x==y; SECTION("R^3") { std::string_view data = R"( -R^3 x = (1,2,3); -R^3 y = (4,3,2); +let x : R^3, x = (1,2,3); +let y : R^3, y = (4,3,2); x==y; )"; @@ -1253,7 +1253,7 @@ x==y; SECTION("B") { std::string_view data = R"( -B b; +let b : B; b != true; )"; @@ -1270,8 +1270,8 @@ b != true; SECTION("N") { std::string_view data = R"( -N n; -N m; +let n : N; +let m : N; n != m; )"; @@ -1288,7 +1288,7 @@ n != m; SECTION("Z") { std::string_view data = R"( -Z a; +let a : Z; a != 3; )"; @@ -1321,8 +1321,8 @@ a != 3; SECTION("R^1") { std::string_view data = R"( -R^1 x = 1; -R^1 y = 2; +let x : R^1, x = 1; +let y : R^1, y = 2; x!=y; )"; @@ -1345,8 +1345,8 @@ x!=y; SECTION("R^2") { std::string_view data = R"( -R^2 x = (1,2); -R^2 y = (0.3,0.7); +let x : R^2, x = (1,2); +let y : R^2, y = (0.3,0.7); x!=y; )"; @@ -1373,8 +1373,8 @@ x!=y; SECTION("R^3") { std::string_view data = R"( -R^3 x = (1,2,3); -R^3 y = (4,3,2); +let x : R^3, x = (1,2,3); +let y : R^3, y = (4,3,2); x!=y; )"; @@ -1906,8 +1906,8 @@ x!=y; SECTION("invalid operator R^1 > R^1") { std::string_view data = R"( -R^1 x = 0; -R^1 y = 0; +let x : R^1, x = 0; +let y : R^1, y = 0; x > y; )"; @@ -1917,8 +1917,8 @@ x > y; SECTION("invalid operator R^1 >= R^1") { std::string_view data = R"( -R^1 x = 0; -R^1 y = 0; +let x : R^1, x = 0; +let y : R^1, y = 0; x >= y; )"; @@ -1928,8 +1928,8 @@ x >= y; SECTION("invalid operator R^1 < R^1") { std::string_view data = R"( -R^1 x = 0; -R^1 y = 0; +let x : R^1, x = 0; +let y : R^1, y = 0; x < y; )"; @@ -1939,8 +1939,8 @@ x < y; SECTION("invalid operator R^1 <= R^1") { std::string_view data = R"( -R^1 x = 0; -R^1 y = 1; +let x : R^1, x = 0; +let y : R^1, y = 1; x <= y; )"; @@ -1950,8 +1950,8 @@ x <= y; SECTION("invalid operator R^1 * R^1") { std::string_view data = R"( -R^1 x = 0; -R^1 y = 0; +let x : R^1, x = 0; +let y : R^1, y = 0; x * y; )"; @@ -1961,8 +1961,8 @@ x * y; SECTION("invalid operator R^1 / R^1") { std::string_view data = R"( -R^1 x = 0; -R^1 y = 0; +let x : R^1, x = 0; +let y : R^1, y = 0; x / y; )"; @@ -1972,8 +1972,8 @@ x / y; SECTION("invalid operator R^2 > R^2") { std::string_view data = R"( -R^2 x = 0; -R^2 y = 0; +let x : R^2, x = 0; +let y : R^2, y = 0; x > y; )"; @@ -1983,8 +1983,8 @@ x > y; SECTION("invalid operator R^2 >= R^2") { std::string_view data = R"( -R^2 x = 0; -R^2 y = 0; +let x : R^2, x = 0; +let y : R^2, y = 0; x >= y; )"; @@ -1994,8 +1994,8 @@ x >= y; SECTION("invalid operator R^2 < R^2") { std::string_view data = R"( -R^2 x = 0; -R^2 y = 0; +let x : R^2, x = 0; +let y : R^2, y = 0; x < y; )"; @@ -2005,8 +2005,8 @@ x < y; SECTION("invalid operator R^2 <= R^2") { std::string_view data = R"( -R^2 x = 0; -R^2 y = 0; +let x : R^2, x = 0; +let y : R^2, y = 0; x <= y; )"; @@ -2016,8 +2016,8 @@ x <= y; SECTION("invalid operator R^2 * R^2") { std::string_view data = R"( -R^2 x = 0; -R^2 y = 0; +let x : R^2, x = 0; +let y : R^2, y = 0; x * y; )"; @@ -2027,8 +2027,8 @@ x * y; SECTION("invalid operator R^2 / R^2") { std::string_view data = R"( -R^2 x = 0; -R^2 y = 0; +let x : R^2, x = 0; +let y : R^2, y = 0; x / y; )"; @@ -2038,8 +2038,8 @@ x / y; SECTION("invalid operator R^3 > R^3") { std::string_view data = R"( -R^3 x = 0; -R^3 y = 0; +let x : R^3, x = 0; +let y : R^3, y = 0; x > y; )"; @@ -2049,8 +2049,8 @@ x > y; SECTION("invalid operator R^3 >= R^3") { std::string_view data = R"( -R^3 x = 0; -R^3 y = 0; +let x : R^3, x = 0; +let y : R^3, y = 0; x >= y; )"; @@ -2060,8 +2060,8 @@ x >= y; SECTION("invalid operator R^3 < R^3") { std::string_view data = R"( -R^3 x = 0; -R^3 y = 0; +let x : R^3, x = 0; +let y : R^3, y = 0; x < y; )"; @@ -2071,8 +2071,8 @@ x < y; SECTION("invalid operator R^3 <= R^3") { std::string_view data = R"( -R^3 x = 0; -R^3 y = 0; +let x : R^3, x = 0; +let y : R^3, y = 0; x <= y; )"; @@ -2082,8 +2082,8 @@ x <= y; SECTION("invalid operator R^3 * R^3") { std::string_view data = R"( -R^3 x = 0; -R^3 y = 0; +let x : R^3, x = 0; +let y : R^3, y = 0; x * y; )"; @@ -2093,8 +2093,8 @@ x * y; SECTION("invalid operator R^3 / R^3") { std::string_view data = R"( -R^3 x = 0; -R^3 y = 0; +let x : R^3, x = 0; +let y : R^3, y = 0; x / y; )"; @@ -2107,8 +2107,8 @@ x / y; SECTION("incompatible operand dimensions") { std::string_view data = R"( -R^3 x = 0; -R^1 y = 0; +let x : R^3, x = 0; +let y : R^1, y = 0; x + y; )"; @@ -2118,8 +2118,8 @@ x + y; SECTION("incompatible operand dimensions") { std::string_view data = R"( -R^1 x = 0; -R^2 y = 0; +let x : R^1, x = 0; +let y : R^2, y = 0; x - y; )"; @@ -2129,8 +2129,8 @@ x - y; SECTION("incompatible operand dimensions") { std::string_view data = R"( -R^3 x = 0; -R^2 y = 0; +let x : R^3, x = 0; +let y : R^2, y = 0; x == y; )"; @@ -2140,8 +2140,8 @@ x == y; SECTION("incompatible operand dimensions") { std::string_view data = R"( -R^1 x = 0; -R^2 y = 0; +let x : R^1, x = 0; +let y : R^2, y = 0; x != y; )"; diff --git a/tests/test_ASTNodeCFunctionExpressionBuilder.cpp b/tests/test_ASTNodeCFunctionExpressionBuilder.cpp index 665136bee8a087ebade4f484a516808503a972db..8d6534fa6342b6b525e1aa3f765fe36221fc8a40 100644 --- a/tests/test_ASTNodeCFunctionExpressionBuilder.cpp +++ b/tests/test_ASTNodeCFunctionExpressionBuilder.cpp @@ -166,7 +166,7 @@ RtoR(1); SECTION("from N") { std::string_view data = R"( -N n = 1; +let n : N, n = 1; RtoR(n); )"; @@ -218,7 +218,7 @@ ZtoR(1); SECTION("from N") { std::string_view data = R"( -N n = 1; +let n : N, n = 1; ZtoR(n); )"; @@ -270,7 +270,7 @@ NtoR(1); SECTION("from N") { std::string_view data = R"( -N n = 1; +let n : N, n = 1; NtoR(n); )"; diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp index 1a92afb708b84460fed3cee5e9b7c49d54f7cae5..10a551a019975e6eb0577607508f7206ebf5b314 100644 --- a/tests/test_ASTNodeDataTypeBuilder.cpp +++ b/tests/test_ASTNodeDataTypeBuilder.cpp @@ -232,22 +232,22 @@ false; SECTION("declaration") { std::string_view data = R"( -R*B*N*string (x,b,n,s); +let (x,b,n,s) : R*B*N*string; )"; std::string_view result = R"( (root:void) `-(language::var_declaration:typename) - +-(language::type_expression:typename) - | +-(language::R_set:typename) - | +-(language::B_set:typename) - | +-(language::N_set:typename) - | `-(language::string_type:typename) - `-(language::name_list:void) - +-(language::name:x:R) - +-(language::name:b:B) - +-(language::name:n:N) - `-(language::name:s:string) + +-(language::name_list:void) + | +-(language::name:x:R) + | +-(language::name:b:B) + | +-(language::name:n:N) + | `-(language::name:s:string) + `-(language::type_expression:typename) + +-(language::R_set:typename) + +-(language::B_set:typename) + +-(language::N_set:typename) + `-(language::string_type:typename) )"; CHECK_AST(data, result); @@ -258,7 +258,7 @@ R*B*N*string (x,b,n,s); SECTION("invalid array subscript") { std::string_view data = R"( -R x; x[2]; +let x : R; x[2]; )"; string_input input{data, "test.pgs"}; @@ -271,35 +271,35 @@ R x; x[2]; SECTION("too many variables") { std::string_view data = R"( -R*B*N*string (x,b,n,s,t); +let (x,b,n,s,t) : R*B*N*string; )"; string_input input{data, "test.pgs"}; auto ast = ASTBuilder::build(input); ASTSymbolTableBuilder{*ast}; - REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, "number of product spaces (4) R*B*N*string differs from " - "number of variables (5) (x,b,n,s,t)"); + REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, "number of product spaces (4) R*B*N*string differs from " + "number of variables (5) (x,b,n,s,t) "); } SECTION("too few variables") { std::string_view data = R"( -R*B*N*string (x,b,n); +let (x,b,n) : R*B*N*string; )"; string_input input{data, "test.pgs"}; auto ast = ASTBuilder::build(input); ASTSymbolTableBuilder{*ast}; - REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, "number of product spaces (4) R*B*N*string differs from " - "number of variables (3) (x,b,n)"); + REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, "number of product spaces (4) R*B*N*string differs from " + "number of variables (3) (x,b,n) "); } SECTION("unexpected variable list") { std::string_view data = R"( -R (x,y); +let (x,y) : R; )"; string_input input{data, "test.pgs"}; @@ -590,7 +590,7 @@ let f : R -> R*R, x -> x*x*x; { std::string_view data = R"( let f : R^2 -> R^2, x -> (x[0]+1, x[1]-2); -R^2 x = (1,2); +let x : R^2, x = (1,2); x = f(x); )"; @@ -599,6 +599,7 @@ x = f(x); +-(language::fct_declaration:void) | `-(language::name:f:function) +-(language::var_declaration:R^2) + | +-(language::name:x:R^2) | +-(language::vector_type:typename) | | +-(language::R_set:typename) | | `-(language::integer:2:Z) @@ -623,7 +624,7 @@ x = f(x); { std::string_view data = R"( let incr : R -> R, x -> x+1; -R x = incr(3); +let x : R, x = incr(3); )"; std::string_view result = R"( @@ -631,6 +632,7 @@ R x = incr(3); +-(language::fct_declaration:void) | `-(language::name:incr:function) `-(language::var_declaration:R) + +-(language::name:x:R) +-(language::R_set:typename) +-(language::name:x:R) `-(language::function_evaluation:R) @@ -645,7 +647,7 @@ R x = incr(3); { std::string_view data = R"( let substract : R*R -> R, (x,y) -> x-y; -R diff = substract(3,2); +let diff : R, diff = substract(3,2); )"; std::string_view result = R"( @@ -653,6 +655,7 @@ R diff = substract(3,2); +-(language::fct_declaration:void) | `-(language::name:substract:function) `-(language::var_declaration:R) + +-(language::name:diff:R) +-(language::R_set:typename) +-(language::name:diff:R) `-(language::function_evaluation:R) @@ -670,7 +673,7 @@ R diff = substract(3,2); { std::string_view data = R"( let incr : Z -> Z, z -> z+1; -Z z = incr(3); +let z : Z, z = incr(3); )"; std::string_view result = R"( @@ -678,6 +681,7 @@ Z z = incr(3); +-(language::fct_declaration:void) | `-(language::name:incr:function) `-(language::var_declaration:Z) + +-(language::name:z:Z) +-(language::Z_set:typename) +-(language::name:z:Z) `-(language::function_evaluation:Z) @@ -692,7 +696,7 @@ Z z = incr(3); { std::string_view data = R"( let double : N -> N, n -> 2*n; -N n = double(3); +let n : N, n = double(3); )"; std::string_view result = R"( @@ -700,6 +704,7 @@ N n = double(3); +-(language::fct_declaration:void) | `-(language::name:double:function) `-(language::var_declaration:N) + +-(language::name:n:N) +-(language::N_set:typename) +-(language::name:n:N) `-(language::function_evaluation:N) @@ -714,7 +719,7 @@ N n = double(3); { std::string_view data = R"( let greater_than_2 : R -> B, x -> x>2; -B b = greater_than_2(3); +let b : B, b = greater_than_2(3); )"; std::string_view result = R"( @@ -722,6 +727,7 @@ B b = greater_than_2(3); +-(language::fct_declaration:void) | `-(language::name:greater_than_2:function) `-(language::var_declaration:B) + +-(language::name:b:B) +-(language::B_set:typename) +-(language::name:b:B) `-(language::function_evaluation:B) @@ -736,7 +742,7 @@ B b = greater_than_2(3); { std::string_view data = R"( let cat : string*string -> string, (s,t) -> s+t; -string s = cat("foo", "bar"); +let s : string, s = cat("foo", "bar"); )"; std::string_view result = R"( @@ -744,6 +750,7 @@ string s = cat("foo", "bar"); +-(language::fct_declaration:void) | `-(language::name:cat:function) `-(language::var_declaration:string) + +-(language::name:s:string) +-(language::string_type:typename) +-(language::name:s:string) `-(language::function_evaluation:string) @@ -760,7 +767,7 @@ string s = cat("foo", "bar"); { std::string_view data = R"( let x_x2 : R -> R*R, x -> (x,x*x); -R*R (x,x2) = x_x2(3); +let (x,x2) : R*R, (x,x2) = x_x2(3); )"; std::string_view result = R"( @@ -768,6 +775,9 @@ R*R (x,x2) = x_x2(3); +-(language::fct_declaration:void) | `-(language::name:x_x2:function) `-(language::var_declaration:typename) + +-(language::name_list:void) + | +-(language::name:x:R) + | `-(language::name:x2:R) +-(language::type_expression:typename) | +-(language::R_set:typename) | `-(language::R_set:typename) @@ -787,7 +797,7 @@ R*R (x,x2) = x_x2(3); SECTION("not a function") { std::string_view data = R"( -R not_a_function = 3; +let not_a_function : R, not_a_function = 3; not_a_function(2,3); )"; string_input input{data, "test.pgs"}; @@ -823,7 +833,7 @@ clog << "clog\n"; SECTION("for-statement") { std::string_view data = R"( -for (N i=0; i<3; ++i){ +for (let i : N, i=0; i<3; ++i){ cout << i << "\n"; } )"; @@ -832,6 +842,7 @@ for (N i=0; i<3; ++i){ (root:void) `-(language::for_statement:void) +-(language::var_declaration:N) + | +-(language::name:i:N) | +-(language::N_set:typename) | +-(language::name:i:N) | `-(language::integer:0:Z) @@ -851,14 +862,14 @@ for (N i=0; i<3; ++i){ SECTION("B set") { std::string_view data = R"( -B b; +let b:B; )"; std::string_view result = R"( (root:void) `-(language::var_declaration:B) - +-(language::B_set:typename) - `-(language::name:b:B) + +-(language::name:b:B) + `-(language::B_set:typename) )"; CHECK_AST(data, result); @@ -867,14 +878,14 @@ B b; SECTION("N set") { std::string_view data = R"( -N n; +let n :N; )"; std::string_view result = R"( (root:void) `-(language::var_declaration:N) - +-(language::N_set:typename) - `-(language::name:n:N) + +-(language::name:n:N) + `-(language::N_set:typename) )"; CHECK_AST(data, result); @@ -883,14 +894,14 @@ N n; SECTION("Z set") { std::string_view data = R"( -Z z; +let z:Z; )"; std::string_view result = R"( (root:void) `-(language::var_declaration:Z) - +-(language::Z_set:typename) - `-(language::name:z:Z) + +-(language::name:z:Z) + `-(language::Z_set:typename) )"; CHECK_AST(data, result); @@ -899,14 +910,14 @@ Z z; SECTION("R set") { std::string_view data = R"( -R r; +let r:R; )"; std::string_view result = R"( (root:void) `-(language::var_declaration:R) - +-(language::R_set:typename) - `-(language::name:r:R) + +-(language::name:r:R) + `-(language::R_set:typename) )"; CHECK_AST(data, result); @@ -915,14 +926,14 @@ R r; SECTION("string") { std::string_view data = R"( -string s; +let s: string; )"; std::string_view result = R"( (root:void) `-(language::var_declaration:string) - +-(language::string_type:typename) - `-(language::name:s:string) + +-(language::name:s:string) + `-(language::string_type:typename) )"; CHECK_AST(data, result); @@ -959,15 +970,15 @@ break; SECTION("eq_op") { std::string_view data = R"( -N a; +let a:N; a = 1; )"; std::string_view result = R"( (root:void) +-(language::var_declaration:N) - | +-(language::N_set:typename) - | `-(language::name:a:N) + | +-(language::name:a:N) + | `-(language::N_set:typename) `-(language::eq_op:N) +-(language::name:a:N) `-(language::integer:1:Z) @@ -979,13 +990,14 @@ a = 1; SECTION("multiplyeq_op") { std::string_view data = R"( -N a = 1; +let a:N, a = 1; a *= 1.2; )"; std::string_view result = R"( (root:void) +-(language::var_declaration:N) + | +-(language::name:a:N) | +-(language::N_set:typename) | +-(language::name:a:N) | `-(language::integer:1:Z) @@ -1000,13 +1012,14 @@ a *= 1.2; SECTION("divideeq_op") { std::string_view data = R"( -R a = 3; +let a:R, a = 3; a /= 2; )"; std::string_view result = R"( (root:void) +-(language::var_declaration:R) + | +-(language::name:a:R) | +-(language::R_set:typename) | +-(language::name:a:R) | `-(language::integer:3:Z) @@ -1021,13 +1034,14 @@ a /= 2; SECTION("pluseq_op") { std::string_view data = R"( -Z a = 3; +let a :Z, a = 3; a += 2; )"; std::string_view result = R"( (root:void) +-(language::var_declaration:Z) + | +-(language::name:a:Z) | +-(language::Z_set:typename) | +-(language::name:a:Z) | `-(language::integer:3:Z) @@ -1042,13 +1056,14 @@ a += 2; SECTION("minuseq_op") { std::string_view data = R"( -Z a = 1; +let a:Z, a = 1; a -= 2; )"; std::string_view result = R"( (root:void) +-(language::var_declaration:Z) + | +-(language::name:a:Z) | +-(language::Z_set:typename) | +-(language::name:a:Z) | `-(language::integer:1:Z) @@ -1081,13 +1096,14 @@ for (;;); SECTION("for std") { std::string_view data = R"( -for (Z i=0; i<3; i += 1) { i += 2; } +for (let i:Z, i=0; i<3; i += 1) { i += 2; } )"; std::string_view result = R"( (root:void) `-(language::for_statement:void) +-(language::var_declaration:Z) + | +-(language::name:i:Z) | +-(language::Z_set:typename) | +-(language::name:i:Z) | `-(language::integer:0:Z) diff --git a/tests/test_ASTNodeDataTypeChecker.cpp b/tests/test_ASTNodeDataTypeChecker.cpp index bb4c7474dbd0fa70d8c1d90013ba0c9acf156d9f..624489ba674d7a144e51d3212fa029c8fbe7e3aa 100644 --- a/tests/test_ASTNodeDataTypeChecker.cpp +++ b/tests/test_ASTNodeDataTypeChecker.cpp @@ -11,7 +11,7 @@ TEST_CASE("ASTNodeDataTypeChecker", "[language]") SECTION("everything ok: nothrow") { std::string_view data = R"( -for(Z i=0; i<10; ++i) { +for(let i:Z, i=0; i<10; ++i) { cout << "i=" << i; cout<< "\n"; } @@ -29,7 +29,7 @@ for(Z i=0; i<10; ++i) { SECTION("everything uninitialized node type") { std::string_view data = R"( -for(Z i=0; i<10; ++i) { +for(let i:Z, i=0; i<10; ++i) { cout << "i=" << i; cout<< "\n"; } diff --git a/tests/test_ASTNodeDataTypeFlattener.cpp b/tests/test_ASTNodeDataTypeFlattener.cpp index eac32591648857a404e585373c70fd8a46174e54..a8c17999b0111adf43484b6dd313efe452bfe26c 100644 --- a/tests/test_ASTNodeDataTypeFlattener.cpp +++ b/tests/test_ASTNodeDataTypeFlattener.cpp @@ -19,7 +19,7 @@ TEST_CASE("ASTNodeDataTypeFlattener", "[language]") SECTION("B") { std::string_view data = R"( -B b = true; +let b : B, b = true; b; )"; @@ -42,7 +42,7 @@ b; SECTION("N") { std::string_view data = R"( -N n; +let n : N; n; )"; diff --git a/tests/test_ASTNodeDeclarationToAffectationConverter.cpp b/tests/test_ASTNodeDeclarationToAffectationConverter.cpp index 115145a570de045e55d07b856c5523e2f4493214..ec2b03892ea8d10790f49b6f44cffa05cbd71106 100644 --- a/tests/test_ASTNodeDeclarationToAffectationConverter.cpp +++ b/tests/test_ASTNodeDeclarationToAffectationConverter.cpp @@ -33,14 +33,14 @@ TEST_CASE("ASTNodeDeclarationToAffectationConverter", "[language]") SECTION("nothing to convert") { std::string_view data = R"( -R z; +let z:R; )"; std::string_view result = R"( (root) `-(language::var_declaration) - +-(language::R_set) - `-(language::name:z) + +-(language::name:z) + `-(language::R_set) )"; CHECK_AST(data, result); @@ -49,7 +49,7 @@ R z; SECTION("simple constructor") { std::string_view data = R"( -R z = 0; +let z :R, z = 0; )"; std::string_view result = R"( @@ -65,9 +65,9 @@ R z = 0; SECTION("complex constructors") { std::string_view data = R"( -N k = 0; -for(N i=0; i<2; ++i) { - N j = 2*i+k; +let k:N, k = 0; +for(let i:N, i=0; i<2; ++i) { + let j:N, j = 2*i+k; k = 2*j-1; } )"; diff --git a/tests/test_ASTNodeEmptyBlockCleaner.cpp b/tests/test_ASTNodeEmptyBlockCleaner.cpp index 18c84cbbfb636f669051a750880dd34ccf132270..e04f1f9c26d45497df34b8b8b41bbbaeca64486c 100644 --- a/tests/test_ASTNodeEmptyBlockCleaner.cpp +++ b/tests/test_ASTNodeEmptyBlockCleaner.cpp @@ -60,7 +60,7 @@ TEST_CASE("ASTNodeEmptyBlockCleaner", "[language]") { std::string_view data = R"( { - R x = 3; + let x:R, x = 3; } )"; @@ -79,7 +79,7 @@ TEST_CASE("ASTNodeEmptyBlockCleaner", "[language]") { std::string_view data = R"( { - R x; + let x:R; } )"; @@ -94,14 +94,14 @@ TEST_CASE("ASTNodeEmptyBlockCleaner", "[language]") { std::string_view data = R"( { - R x; + let x:R; { - R y; + let y :R; } { - R z; + let z: R; { - R w; + let w : R; } } } @@ -118,14 +118,14 @@ TEST_CASE("ASTNodeEmptyBlockCleaner", "[language]") { std::string_view data = R"( { - R x; + let x:R; { - R y; + let y:R; } { - R z; + let z:R; { - R w = 4; + let w:R, w = 4; } } } diff --git a/tests/test_ASTNodeExpressionBuilder.cpp b/tests/test_ASTNodeExpressionBuilder.cpp index c315caef963756d6f24e747d7f15c51040e7810a..4c45f526459e63cb3442062c6f5e613f4f085934 100644 --- a/tests/test_ASTNodeExpressionBuilder.cpp +++ b/tests/test_ASTNodeExpressionBuilder.cpp @@ -155,7 +155,7 @@ false; SECTION("name") { std::string_view data = R"( -N i; +let i:N; i; )"; @@ -172,7 +172,7 @@ i; SECTION("operator=") { std::string_view data = R"( -N i = 1; +let i:N, i = 1; )"; std::string result = R"( @@ -188,7 +188,7 @@ N i = 1; SECTION("operator*=") { std::string_view data = R"( -N i = 1; +let i:N, i = 1; i *= 3; )"; @@ -208,7 +208,7 @@ i *= 3; SECTION("operator/=") { std::string_view data = R"( -R x = 1; +let x:R, x = 1; x /= 2; )"; @@ -228,7 +228,7 @@ x /= 2; SECTION("operator+=") { std::string_view data = R"( -N i = 1; +let i:N, i = 1; i += 3; )"; @@ -248,7 +248,7 @@ i += 3; SECTION("operator-=") { std::string_view data = R"( -Z z = 1; +let z:Z, z = 1; z -= 2; )"; @@ -268,7 +268,7 @@ z -= 2; SECTION("tuple -> R^3") { std::string_view data = R"( -R*R^3 (t,x) = (0,(1,2,3)); +let (t,x): R*R^3, (t,x) = (0,(1,2,3)); )"; std::string result = R"( @@ -291,7 +291,7 @@ R*R^3 (t,x) = (0,(1,2,3)); SECTION("tuple -> R^2") { std::string_view data = R"( -R*R^2 (t,x) = (0,(1,2)); +let (t,x): R*R^2, (t,x) = (0,(1,2)); )"; std::string result = R"( @@ -331,7 +331,7 @@ R*R^2 (t,x) = (0,(1,2)); SECTION("unary minus for N") { std::string_view data = R"( -N n; +let n:N; -n; )"; @@ -382,7 +382,7 @@ N n; SECTION("pre-increment operator") { std::string_view data = R"( -Z a=1; +let a:Z, a=1; ++a; )"; @@ -401,7 +401,7 @@ Z a=1; SECTION("pre-decrement operator") { std::string_view data = R"( -Z a=1; +let a:Z, a=1; --a; )"; @@ -420,7 +420,7 @@ Z a=1; SECTION("post-increment operator") { std::string_view data = R"( -Z a=1; +let a:Z, a=1; a++; )"; @@ -439,7 +439,7 @@ a++; SECTION("post-decrement operator") { std::string_view data = R"( -Z a=1; +let a:Z, a=1; a--; )"; @@ -458,7 +458,7 @@ a--; SECTION("array subscript") { std::string_view data = R"( -R^3 x = (1, 2, 3); +let x: R^3, x = (1, 2, 3); x[2]; )"; @@ -757,7 +757,7 @@ while(true); SECTION("for_statement") { std::string_view data = R"( -for(N i=0; i<10; ++i); +for(let i:N, i=0; i<10; ++i); )"; std::string result = R"( @@ -780,7 +780,7 @@ for(N i=0; i<10; ++i); SECTION("no init") { std::string_view data = R"( -N i=0; +let i:N, i=0; for(; i<10; ++i); )"; @@ -805,7 +805,7 @@ for(; i<10; ++i); SECTION("no test") { std::string_view data = R"( -for(N i=0; ; ++i); +for(let i:N, i=0; ; ++i); )"; std::string result = R"( @@ -826,7 +826,7 @@ for(N i=0; ; ++i); SECTION("no post instruction") { std::string_view data = R"( -for(N i=0; i<10;); +for(let i:N, i=0; i<10;); )"; std::string result = R"( diff --git a/tests/test_ASTNodeFunctionExpressionBuilder.cpp b/tests/test_ASTNodeFunctionExpressionBuilder.cpp index b44d99c1ade0f4d8a70da10767201f2bbb6365a7..3a34a4915a66a5fe60fc805186482475f0b9e85b 100644 --- a/tests/test_ASTNodeFunctionExpressionBuilder.cpp +++ b/tests/test_ASTNodeFunctionExpressionBuilder.cpp @@ -276,7 +276,7 @@ cat("foo", true); { std::string_view data = R"( let cat : string*string -> string, (s1,s2) -> s1+s2; -N n = 2; +let n : N, n = 2; cat("foo", n); )"; @@ -335,7 +335,7 @@ cat("foo", 2.5e-3); { std::string_view data = R"( let f : R^1 -> R^1, x -> x+x; -R^1 x = 1; +let x : R^1, x = 1; f(x); )"; @@ -353,7 +353,7 @@ f(x); { std::string_view data = R"( let f : R^2 -> R^2, x -> x+x; -R^2 x = (1,2); +let x : R^2, x = (1,2); f(x); )"; @@ -371,7 +371,7 @@ f(x); { std::string_view data = R"( let f : R^3 -> R^3, x -> x+x; -R^3 x = (1,2,3); +let x : R^3, x = (1,2,3); f(x); )"; @@ -722,7 +722,7 @@ bad_B(3); { std::string_view data = R"( let negate : B -> B, b -> not b; -N n = 2; +let n : N, n = 2; negate(n); )"; diff --git a/tests/test_ASTNodeIncDecExpressionBuilder.cpp b/tests/test_ASTNodeIncDecExpressionBuilder.cpp index 9f24a2e0c5a5ff9b563b2490756937a2383b413a..947852f9b28a743a7e5c09ffc43d113b6130a225 100644 --- a/tests/test_ASTNodeIncDecExpressionBuilder.cpp +++ b/tests/test_ASTNodeIncDecExpressionBuilder.cpp @@ -66,7 +66,7 @@ TEST_CASE("ASTNodeIncDecExpressionBuilder", "[language]") SECTION("N") { std::string_view data = R"( -N i=0; +let i : N, i=0; ++i; )"; @@ -85,7 +85,7 @@ N i=0; SECTION("Z") { std::string_view data = R"( -Z i=0; +let i : Z, i=0; ++i; )"; @@ -104,7 +104,7 @@ Z i=0; SECTION("R") { std::string_view data = R"( -R x=0; +let x : R, x=0; ++x; )"; @@ -126,7 +126,7 @@ R x=0; SECTION("N") { std::string_view data = R"( -N i=1; +let i : N, i=1; --i; )"; @@ -145,7 +145,7 @@ N i=1; SECTION("Z") { std::string_view data = R"( -Z i=0; +let i : Z, i=0; --i; )"; @@ -164,7 +164,7 @@ Z i=0; SECTION("R") { std::string_view data = R"( -R x=2.3; +let x : R, x=2.3; --x; )"; @@ -186,7 +186,7 @@ R x=2.3; SECTION("N") { std::string_view data = R"( -N i=0; +let i : N, i=0; i++; )"; @@ -205,7 +205,7 @@ i++; SECTION("Z") { std::string_view data = R"( -Z i=0; +let i : Z, i=0; i++; )"; @@ -224,7 +224,7 @@ i++; SECTION("R") { std::string_view data = R"( -R x=0; +let x : R, x=0; x++; )"; @@ -246,7 +246,7 @@ x++; SECTION("N") { std::string_view data = R"( -N i=1; +let i : N, i=1; i--; )"; @@ -265,7 +265,7 @@ i--; SECTION("Z") { std::string_view data = R"( -Z i=0; +let i : Z, i=0; i--; )"; @@ -284,7 +284,7 @@ i--; SECTION("R") { std::string_view data = R"( -R x=2.3; +let x : R, x=2.3; x--; )"; diff --git a/tests/test_ASTNodeListAffectationExpressionBuilder.cpp b/tests/test_ASTNodeListAffectationExpressionBuilder.cpp index 654049f152547c1800bce0d94cc3628583abcac2..e4f3aab754186255c90b382e90bc530c10da02c4 100644 --- a/tests/test_ASTNodeListAffectationExpressionBuilder.cpp +++ b/tests/test_ASTNodeListAffectationExpressionBuilder.cpp @@ -69,7 +69,7 @@ TEST_CASE("ASTNodeListAffectationExpressionBuilder", "[language]") SECTION("without conversion R*R") { std::string_view data = R"( -R*R (x,y) = (2.3, 6.2); +let (x, y) : R*R, (x,y) = (2.3, 6.2); )"; std::string_view result = R"( @@ -89,8 +89,8 @@ R*R (x,y) = (2.3, 6.2); SECTION("without conversion B*Z*N") { std::string_view data = R"( -N n = 2; -B*Z*N (b,z,m) = (false, -2, n); +let n:N, n = 2; +let ( b, z , m ): B*Z*N, (b,z,m) = (false, -2, n); )"; std::string_view result = R"( @@ -116,7 +116,7 @@ B*Z*N (b,z,m) = (false, -2, n); SECTION("with conversion R*B*Z*N") { std::string_view data = R"( -R*B*Z*N (r,b,z,m) = (3.2, true, 6, 2); +let (r,b,z,m) : R*B*Z*N, (r,b,z,m) = (3.2, true, 6, 2); )"; std::string_view result = R"( @@ -140,7 +140,7 @@ R*B*Z*N (r,b,z,m) = (3.2, true, 6, 2); SECTION("with conversion R*R*R*R") { std::string_view data = R"( -R*R*R*R (r,b,z,m) = (3.2, 1, 6, 2); +let (r,b,z,m): R*R*R*R , (r,b,z,m) = (3.2, 1, 6, 2); )"; std::string_view result = R"( @@ -164,10 +164,11 @@ R*R*R*R (r,b,z,m) = (3.2, 1, 6, 2); SECTION("without conversion R^1*R^2*R^3*R") { std::string_view data = R"( -R^1 a = 0; -R^2 b = (1,2); -R^3 c = (1,2,3); -R^1*R^2*R^3*R (x1,x2,x3,x) = (a, b, c, 2); +let a:R^1, a = 0; +let b:R^2, b = (1,2); +let c:R^3, c = (1,2,3); +let (x1,x2,x3,x) : R^1*R^2*R^3*R, + (x1,x2,x3,x) = (a, b, c, 2); )"; std::string_view result = R"( @@ -205,7 +206,7 @@ R^1*R^2*R^3*R (x1,x2,x3,x) = (a, b, c, 2); SECTION("Zero initialization") { std::string_view data = R"( -R^1*R^2*R^3*R (x1,x2,x3,x) = (0, 0, 0, 0); +let (x1,x2,x3,x) : R^1*R^2*R^3*R, (x1,x2,x3,x) = (0, 0, 0, 0); )"; std::string_view result = R"( @@ -230,7 +231,7 @@ R^1*R^2*R^3*R (x1,x2,x3,x) = (0, 0, 0, 0); { std::string_view data = R"( let f: R -> R*R, x -> (x*x, x+1); -R*R (x,y) = f(2); +let (x,y): R*R, (x,y) = f(2); )"; std::string_view result = R"( @@ -250,7 +251,7 @@ R*R (x,y) = f(2); SECTION("string without conversion") { std::string_view data = R"( -string*string (s,r) = ("foo","bar"); +let (s,r): string*string, (s,r) = ("foo","bar"); )"; std::string_view result = R"( @@ -270,8 +271,9 @@ string*string (s,r) = ("foo","bar"); SECTION("string with conversion") { std::string_view data = R"( -N n =2; -string*string*string*string (r,s,t,u) = (3.2, -2, true, n); +let n:N, n =2; +let (r,s,t,u) : string*string*string*string, + (r,s,t,u) = (3.2, -2, true, n); )"; std::string_view result = R"( @@ -302,8 +304,8 @@ string*string*string*string (r,s,t,u) = (3.2, -2, true, n); SECTION("invalid affectation rhs") { std::string_view data = R"( -R x; -R i; +let x:R; +let i:R; (x,i) = 3; )"; @@ -313,7 +315,7 @@ R i; SECTION("incompatible list sizes") { std::string_view data = R"( -R*R (x,y) = (3, 3, 2); +let (x,y) : R*R, (x,y) = (3, 3, 2); )"; CHECK_AST_THROWS_WITH(data, std::string{"incompatible list sizes in affectation"}); @@ -322,7 +324,7 @@ R*R (x,y) = (3, 3, 2); SECTION("incompatible list sizes 2") { std::string_view data = R"( -R*R*R (x,y,z) = (1, 2); +let (x,y,z):R*R*R, (x,y,z) = (1, 2); )"; CHECK_AST_THROWS_WITH(data, std::string{"incompatible list sizes in affectation"}); @@ -332,7 +334,7 @@ R*R*R (x,y,z) = (1, 2); { std::string_view data = R"( let f: R -> R, x -> x*x; -R*R (x,y) = f(3); +let(x,y) : R*R, (x,y) = f(3); )"; CHECK_AST_THROWS_WITH(data, std::string{"incompatible list sizes in affectation"}); @@ -341,7 +343,7 @@ R*R (x,y) = f(3); SECTION("incompatible list sizes from function evaluation") { std::string_view data = R"( -R*R (x,y) = (2,3); +let(x,y):R*R,(x,y)=(2,3); (x,y) += (1,4); )"; @@ -352,7 +354,7 @@ R*R (x,y) = (2,3); { std::string_view data = R"( let f: R -> R, x -> x+1; -R*R (x,y) = (f,2); +let (x,y) : R*R, (x,y) = (f,2); )"; CHECK_AST_THROWS_WITH(data, std::string{"invalid implicit conversion: function -> R"}); @@ -362,7 +364,7 @@ R*R (x,y) = (f,2); { std::string_view data = R"( let f: R -> R, x -> x+1; -string*N (s,n) = (f,2); +let (s,n):string*N, (s,n) = (f,2); )"; CHECK_AST_THROWS_WITH(data, std::string{"invalid implicit conversion: function -> string"}); @@ -372,7 +374,7 @@ string*N (s,n) = (f,2); { std::string_view data = R"( let f: R -> R, x -> x+1; -R x; +let x:R; (f,x) = (3,2); )"; @@ -383,8 +385,8 @@ R x; SECTION("invalid R^n -> R^m conversion") { std::string_view data = R"( -R^2 x = (1,2); -R^3 y = x; +let x:R^2, x = (1,2); +let y:R^3, y = x; )"; CHECK_AST_THROWS_WITH(data, std::string{"incompatible dimensions in affectation"}); @@ -393,7 +395,7 @@ R^3 y = x; SECTION("invalid Z -> R^d conversion (non-zero)") { std::string_view data = R"( -R^2 x = 1; +let x:R^2, x = 1; )"; CHECK_AST_THROWS_WITH(data, std::string{"invalid implicit conversion: Z -> R^2"}); diff --git a/tests/test_ASTNodeTypeCleaner.cpp b/tests/test_ASTNodeTypeCleaner.cpp index 4bf4fcfddb391e9bf3ba8ca1195de84f932ab48f..ed5b18a47ef6c6353d6fe25141620de4a39e17e7 100644 --- a/tests/test_ASTNodeTypeCleaner.cpp +++ b/tests/test_ASTNodeTypeCleaner.cpp @@ -50,7 +50,7 @@ cout << "two=" << 2 << "\n"; SECTION("single declaration") { std::string_view data = R"( -R z; +let z:R; z = 1; )"; @@ -67,10 +67,10 @@ z = 1; SECTION("multiple declaration") { std::string_view data = R"( -Z z; +let z:Z; z = 1; if (true) { - R x; + let x:R; x = 0.5 *z; } )"; diff --git a/tests/test_ASTNodeUnaryOperatorExpressionBuilder.cpp b/tests/test_ASTNodeUnaryOperatorExpressionBuilder.cpp index 98944b1775ebe4250a5c58d7a5f0421ed4eea18b..9077e217a85ad2a68d208b9bb1c0a1b1e3e71ddf 100644 --- a/tests/test_ASTNodeUnaryOperatorExpressionBuilder.cpp +++ b/tests/test_ASTNodeUnaryOperatorExpressionBuilder.cpp @@ -58,7 +58,7 @@ TEST_CASE("ASTNodeUnaryOperatorExpressionBuilder", "[language]") SECTION("B") { std::string_view data = R"( -B b; +let b:B; -b; -true; -false; @@ -80,7 +80,7 @@ B b; SECTION("N") { std::string_view data = R"( -N n; +let n:N; -n; )"; @@ -96,7 +96,7 @@ N n; SECTION("Z") { std::string_view data = R"( -Z i; +let i:Z; -i; )"; @@ -112,7 +112,7 @@ Z i; SECTION("R") { std::string_view data = R"( -R x; +let x:R; -x; )"; @@ -128,7 +128,7 @@ R x; SECTION("R^1") { std::string_view data = R"( -R^1 x; +let x:R^1; -x; )"; @@ -144,7 +144,7 @@ R^1 x; SECTION("R^2") { std::string_view data = R"( -R^2 x; +let x:R^2; -x; )"; @@ -160,7 +160,7 @@ R^2 x; SECTION("R^3") { std::string_view data = R"( -R^3 x; +let x:R^3; -x; )"; @@ -179,7 +179,7 @@ R^3 x; SECTION("B") { std::string_view data = R"( -B b; +let b:B; not b; )"; @@ -220,7 +220,7 @@ not b; SECTION("errors") { - CHECK_AST_THROWS_WITH(R"(N n; not n;)", "invalid implicit conversion: N -> B"); + CHECK_AST_THROWS_WITH(R"(let n:N; not n;)", "invalid implicit conversion: N -> B"); CHECK_AST_THROWS_WITH(R"(not 2;)", "invalid implicit conversion: Z -> B"); CHECK_AST_THROWS_WITH(R"(not -2.3;)", "invalid implicit conversion: R -> B"); CHECK_AST_THROWS_WITH(R"(not "foo";)", "invalid implicit conversion: string -> B"); diff --git a/tests/test_ASTPrinter.cpp b/tests/test_ASTPrinter.cpp index eaaf6b759381b967437b61cef9c7c4acf5a3371e..cbf5f92e761f0db82049c4689ac11271118603ff 100644 --- a/tests/test_ASTPrinter.cpp +++ b/tests/test_ASTPrinter.cpp @@ -28,12 +28,13 @@ TEST_CASE("ASTPrinter", "[language]") SECTION("raw output") { std::string_view data = R"( -N n = 2 + 3; +let n:N, n = 2 + 3; )"; std::string_view result = R"( (root:undefined) `-(language::var_declaration:undefined) + +-(language::name:n:undefined) +-(language::N_set:undefined) +-(language::name:n:undefined) `-(language::plus_op:undefined) @@ -46,12 +47,13 @@ N n = 2 + 3; SECTION("pretty output") { std::string_view data = R"( -N n = 2 + 3; +let n:N, n = 2 + 3; )"; std::string_view result = R"( (root:undefined) └──(language::var_declaration:undefined) + ├──(language::name:n:undefined) ├──(language::N_set:undefined) ├──(language::name:n:undefined) └──(language::plus_op:undefined) @@ -64,12 +66,13 @@ N n = 2 + 3; SECTION("escaped sequences") { std::string_view data = R"( -string s = "a string"; +let s:string, s = "a string"; )"; std::string_view result = R"( (root:undefined) `-(language::var_declaration:undefined) + +-(language::name:s:undefined) +-(language::string_type:undefined) +-(language::name:s:undefined) `-(language::literal:"a string":undefined) diff --git a/tests/test_ASTSymbolInitializationChecker.cpp b/tests/test_ASTSymbolInitializationChecker.cpp index a9faafc595b48bba234e0a621804a109855e2092..7c07e437fff28cd429301b1cb3fc3bf858a4010d 100644 --- a/tests/test_ASTSymbolInitializationChecker.cpp +++ b/tests/test_ASTSymbolInitializationChecker.cpp @@ -10,9 +10,9 @@ TEST_CASE("ASTSymbolInitializationChecker", "[language]") SECTION("Declarative initialization") { std::string_view data = R"( -N m = 2; -N n = m ; -N p; +let m:N, m = 2; +let n:N, n = m ; +let p:N; )"; string_input input{data, "test.pgs"}; @@ -40,7 +40,7 @@ N p; SECTION("Array subscript initialization") { std::string_view data = R"( -R^3 x; +let x:R^3; x[0] = 1; )"; @@ -61,9 +61,9 @@ x[0] = 1; SECTION("Declaration plus affectation") { std::string_view data = R"( -Z z; -N m; -N n; +let z:Z; +let m:N; +let n:N; n = 2; m = n; )"; @@ -115,7 +115,7 @@ let f: R->R, x->x+1; SECTION("Declarative initialization") { std::string_view data = R"( -R*R (x,y) = (2.3, 4.1); +let (x,y):R*R, (x,y) = (2.3, 4.1); )"; string_input input{data, "test.pgs"}; @@ -139,7 +139,7 @@ R*R (x,y) = (2.3, 4.1); SECTION("Declarative initialization") { std::string_view data = R"( -R^2 x = (2.3, 4.1); +let x:R^2, x = (2.3, 4.1); )"; string_input input{data, "test.pgs"}; @@ -159,7 +159,7 @@ R^2 x = (2.3, 4.1); SECTION("Not initialized") { std::string_view data = R"( -R*R (x,y); +let(x,y):R*R; y = 3; )"; @@ -184,7 +184,7 @@ y = 3; SECTION("Affectation") { std::string_view data = R"( -R*R (x,y); +let (x,y):R*R; (x,y) = (2.3, 4.1); )"; @@ -209,7 +209,7 @@ R*R (x,y); SECTION("Affectation") { std::string_view data = R"( -R^3*R (x,y); +let (x,y):R^3*R; (x,y) = ((2.3, 2, 5), 4.1); )"; @@ -235,7 +235,7 @@ R^3*R (x,y); SECTION("Affectation") { std::string_view data = R"( -R^3 x; +let x:R^3; (x[2], x[1], x[0]) = (1, 2, 3); )"; @@ -258,8 +258,8 @@ R^3 x; SECTION("used uninitialized") { std::string_view data = R"( -N n; -N m = n; +let n:N; +let m:N, m = n; )"; string_input input{data, "test.pgs"}; @@ -272,8 +272,8 @@ N m = n; SECTION("used uninitialized in list affectation") { std::string_view data = R"( -N k; -N*R (l, x); +let k:N; +let (l, x) : N*R; (k, x) = (l, 3.2); )"; @@ -288,7 +288,7 @@ N*R (l, x); SECTION("used uninitialized in function") { std::string_view data = R"( -R y; +let y:R; let f : R->R, x->x+y; )"; diff --git a/tests/test_ASTSymbolTableBuilder.cpp b/tests/test_ASTSymbolTableBuilder.cpp index df84b4ff485e2ced82fa916708f5eda5a32ac11c..f39e5fac332eadd79b29347dfdf8310443aff283 100644 --- a/tests/test_ASTSymbolTableBuilder.cpp +++ b/tests/test_ASTSymbolTableBuilder.cpp @@ -8,10 +8,10 @@ TEST_CASE("ASTSymbolTableBuilder", "[language]") SECTION("Build symbols") { std::string_view data = R"( -N n = 2; +let n:N, n = 2; { - N m = n; - R n = m/3.; + let m:N, m = n; + let n:R, n = m/3.; } )"; @@ -24,11 +24,11 @@ N n = 2; SECTION("Populate symbol table") { std::string_view data = R"( -B b; -N n; -Z z; -R x; -R*Z*N*B (c0,c1,c2,c3); +let b:B; +let n:N; +let z:Z; +let x:R; +let (c0,c1,c2,c3):R*Z*N*B; let f: R*Z*B->R, (x,n,z) -> x+n; )"; @@ -64,7 +64,7 @@ let f: R*Z*B->R, (x,n,z) -> x+n; SECTION("Undeclared symbol") { std::string_view data = R"( -N n = a; +let n:N, n = a; )"; string_input input{data, "test.pgs"}; @@ -76,8 +76,8 @@ N n = a; SECTION("Re-declared symbol") { std::string_view data = R"( -N n = 0; -N n = 1; +let n:N, n = 0; +let n:N, n = 1; )"; string_input input{data, "test.pgs"}; @@ -89,7 +89,7 @@ N n = 1; SECTION("Re-declared symbol (function)") { std::string_view data = R"( -N f; +let f:N; let f : R -> R, x -> 1; )"; diff --git a/tests/test_AffectationProcessor.cpp b/tests/test_AffectationProcessor.cpp index 06428a8a3fcdf1e370ad033f35cffdbf1200887d..4df698083702bbf1d92630560cd60345fcdd1c40 100644 --- a/tests/test_AffectationProcessor.cpp +++ b/tests/test_AffectationProcessor.cpp @@ -48,21 +48,6 @@ REQUIRE(value == expected_value); \ } -#define CHECK_AFFECTATION_THROWS(data) \ - { \ - string_input input{data, "test.pgs"}; \ - auto ast = ASTBuilder::build(input); \ - \ - ASTSymbolTableBuilder{*ast}; \ - ASTNodeDataTypeBuilder{*ast}; \ - \ - ASTNodeDeclarationToAffectationConverter{*ast}; \ - ASTNodeTypeCleaner<language::var_declaration>{*ast}; \ - \ - REQUIRE_THROWS(ASTNodeExpressionBuilder{*ast}, \ - Catch::Matchers::Contains("invalid operands to affectation expression")); \ - } - #define CHECK_AFFECTATION_THROWS_WITH(data, error_message) \ { \ string_input input{data, "test.pgs"}; \ @@ -83,69 +68,70 @@ TEST_CASE("AffectationProcessor", "[language]") { SECTION("B") { - CHECK_AFFECTATION_RESULT("B b; b = true;", "b", true); + CHECK_AFFECTATION_RESULT("let b : B; b = true;", "b", true); } SECTION("N") { - CHECK_AFFECTATION_RESULT("N n = 1;", "n", 1ul); - CHECK_AFFECTATION_RESULT("N m = 2; N n = m;", "n", 2ul); - CHECK_AFFECTATION_RESULT("N n = true;", "n", 1ul); - CHECK_AFFECTATION_RESULT("N n = false;", "n", 0ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 1;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = m;", "n", 2ul); + CHECK_AFFECTATION_RESULT("let n : N, n = true;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let n : N, n = false;", "n", 0ul); } SECTION("Z") { - CHECK_AFFECTATION_RESULT("Z z = -1;", "z", -1l); - CHECK_AFFECTATION_RESULT("Z z = true;", "z", 1l); - CHECK_AFFECTATION_RESULT("Z z = false;", "z", 0l); + CHECK_AFFECTATION_RESULT("let z : Z, z = -1;", "z", -1l); + CHECK_AFFECTATION_RESULT("let z : Z, z = true;", "z", 1l); + CHECK_AFFECTATION_RESULT("let z : Z, z = false;", "z", 0l); } SECTION("R") { - CHECK_AFFECTATION_RESULT("R r = -1;", "r", double{-1}); - CHECK_AFFECTATION_RESULT("R r = true;", "r", double{1}); - CHECK_AFFECTATION_RESULT("R r = false;", "r", double{0}); - CHECK_AFFECTATION_RESULT("R r = -2.3;", "r", double{-2.3}); + CHECK_AFFECTATION_RESULT("let r : R, r = -1;", "r", double{-1}); + CHECK_AFFECTATION_RESULT("let r : R, r = true;", "r", double{1}); + CHECK_AFFECTATION_RESULT("let r : R, r = false;", "r", double{0}); + CHECK_AFFECTATION_RESULT("let r : R, r = -2.3;", "r", double{-2.3}); } SECTION("R^1") { - CHECK_AFFECTATION_RESULT("R^1 x = -1;", "x", (TinyVector<1>{-1})); - CHECK_AFFECTATION_RESULT("R^1 x = true;", "x", (TinyVector<1>{true})); - CHECK_AFFECTATION_RESULT("R^1 x = false;", "x", (TinyVector<1>{false})); - CHECK_AFFECTATION_RESULT("R^1 x = -2.3;", "x", (TinyVector<1>{-2.3})); - CHECK_AFFECTATION_RESULT("R^1 x; x[0] = -1;", "x", (TinyVector<1>{-1})); - CHECK_AFFECTATION_RESULT("R^1 x; x[0] = true;", "x", (TinyVector<1>{true})); - CHECK_AFFECTATION_RESULT("R^1 x; x[0] = false;", "x", (TinyVector<1>{false})); - CHECK_AFFECTATION_RESULT("R^1 x; x[0] = -2.3;", "x", (TinyVector<1>{-2.3})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = -1;", "x", (TinyVector<1>{-1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = true;", "x", (TinyVector<1>{true})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = false;", "x", (TinyVector<1>{false})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = -2.3;", "x", (TinyVector<1>{-2.3})); + CHECK_AFFECTATION_RESULT("let x : R^1; x[0] = -1;", "x", (TinyVector<1>{-1})); + CHECK_AFFECTATION_RESULT("let x : R^1; x[0] = true;", "x", (TinyVector<1>{true})); + CHECK_AFFECTATION_RESULT("let x : R^1; x[0] = false;", "x", (TinyVector<1>{false})); + CHECK_AFFECTATION_RESULT("let x : R^1; x[0] = -2.3;", "x", (TinyVector<1>{-2.3})); - CHECK_AFFECTATION_RESULT("R^1 x = 0;", "x", (TinyVector<1>{zero})); - CHECK_AFFECTATION_RESULT("R^1 x; x = 0;", "x", (TinyVector<1>{zero})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 0;", "x", (TinyVector<1>{zero})); + CHECK_AFFECTATION_RESULT("let x : R^1; x = 0;", "x", (TinyVector<1>{zero})); } SECTION("R^2") { - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true);", "x", (TinyVector<2>{-1, true})); - CHECK_AFFECTATION_RESULT("R^2 x = (true, false);", "x", (TinyVector<2>{true, false})); - CHECK_AFFECTATION_RESULT("R^2 x = (-0.3, 12);", "x", (TinyVector<2>{-0.3, 12})); - CHECK_AFFECTATION_RESULT("R^2 x; x[0] = -1; x[1] = true;", "x", (TinyVector<2>{-1, true})); - CHECK_AFFECTATION_RESULT("R^2 x; x[0] = true; x[1] = false;", "x", (TinyVector<2>{true, false})); - CHECK_AFFECTATION_RESULT("R^2 x; x[0] = -0.3; x[1] = 12;", "x", (TinyVector<2>{-0.3, 12})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true);", "x", (TinyVector<2>{-1, true})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = (true, false);", "x", (TinyVector<2>{true, false})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-0.3, 12);", "x", (TinyVector<2>{-0.3, 12})); + CHECK_AFFECTATION_RESULT("let x : R^2; x[0] = -1; x[1] = true;", "x", (TinyVector<2>{-1, true})); + CHECK_AFFECTATION_RESULT("let x : R^2; x[0] = true; x[1] = false;", "x", (TinyVector<2>{true, false})); + CHECK_AFFECTATION_RESULT("let x : R^2; x[0] = -0.3; x[1] = 12;", "x", (TinyVector<2>{-0.3, 12})); - CHECK_AFFECTATION_RESULT("R^2 x = 0;", "x", (TinyVector<2>{zero})); - CHECK_AFFECTATION_RESULT("R^2 x; x = 0;", "x", (TinyVector<2>{zero})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = 0;", "x", (TinyVector<2>{zero})); + CHECK_AFFECTATION_RESULT("let x : R^2; x = 0;", "x", (TinyVector<2>{zero})); } SECTION("R^3") { - CHECK_AFFECTATION_RESULT("R^3 x = (-1, true, false);", "x", (TinyVector<3>{-1, true, false})); - CHECK_AFFECTATION_RESULT("R^3 x = (-0.3, 12, 6.2);", "x", (TinyVector<3>{-0.3, 12, 6.2})); - CHECK_AFFECTATION_RESULT("R^3 x; x[0] = -1; x[1] = true; x[2] = false;", "x", (TinyVector<3>{-1, true, false})); - CHECK_AFFECTATION_RESULT("R^3 x; x[0] = -0.3; x[1] = 12; x[2] = 6.2;", "x", (TinyVector<3>{-0.3, 12, 6.2})); + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-1, true, false);", "x", (TinyVector<3>{-1, true, false})); + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2);", "x", (TinyVector<3>{-0.3, 12, 6.2})); + CHECK_AFFECTATION_RESULT("let x : R^3; x[0] = -1; x[1] = true; x[2] = false;", "x", + (TinyVector<3>{-1, true, false})); + CHECK_AFFECTATION_RESULT("let x : R^3; x[0] = -0.3; x[1] = 12; x[2] = 6.2;", "x", (TinyVector<3>{-0.3, 12, 6.2})); - CHECK_AFFECTATION_RESULT("R^3 x = 0;", "x", (TinyVector<3>{zero})); - CHECK_AFFECTATION_RESULT("R^3 x; x = 0;", "x", (TinyVector<3>{zero})); + CHECK_AFFECTATION_RESULT("let x : R^3, x = 0;", "x", (TinyVector<3>{zero})); + CHECK_AFFECTATION_RESULT("let x : R^3; x = 0;", "x", (TinyVector<3>{zero})); } } @@ -153,48 +139,49 @@ TEST_CASE("AffectationProcessor", "[language]") { SECTION("N") { - CHECK_AFFECTATION_RESULT("N n = 1; n += 3;", "n", 4ul); - CHECK_AFFECTATION_RESULT("N m = 2; N n = 1; n += m;", "n", 3ul); - CHECK_AFFECTATION_RESULT("N n = 1; n += true;", "n", 2ul); - CHECK_AFFECTATION_RESULT("N n = 3; n += false;", "n", 3ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 1; n += 3;", "n", 4ul); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = 1; n += m;", "n", 3ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 1; n += true;", "n", 2ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 3; n += false;", "n", 3ul); } SECTION("Z") { - CHECK_AFFECTATION_RESULT("Z z = 1; z += 3;", "z", 4l); - CHECK_AFFECTATION_RESULT("N m = 2; Z z = 1; z += m;", "z", 3l); - CHECK_AFFECTATION_RESULT("Z z = 1; z += true;", "z", 2l); - CHECK_AFFECTATION_RESULT("Z z = 3; z += false;", "z", 3l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 1; z += 3;", "z", 4l); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let z : Z, z = 1; z += m;", "z", 3l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 1; z += true;", "z", 2l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 3; z += false;", "z", 3l); } SECTION("R") { - CHECK_AFFECTATION_RESULT("R r = 1.2; r += 2.3;", "r", 3.5); - CHECK_AFFECTATION_RESULT("N m = 2; R r = 1.3; r += m;", "r", 3.3); - CHECK_AFFECTATION_RESULT("R r = 1.1; r += true;", "r", 2.1); - CHECK_AFFECTATION_RESULT("R r = 3.3; r += false;", "r", 3.3); - CHECK_AFFECTATION_RESULT("R r = 2; r += 1.1;", "r", 3.1); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.2; r += 2.3;", "r", 3.5); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let r : R, r = 1.3; r += m;", "r", 3.3); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r += true;", "r", 2.1); + CHECK_AFFECTATION_RESULT("let r : R, r = 3.3; r += false;", "r", 3.3); + CHECK_AFFECTATION_RESULT("let r : R, r = 2; r += 1.1;", "r", 3.1); } SECTION("R^1") { - CHECK_AFFECTATION_RESULT("R^1 x = -1; R^1 y = 1; x += y;", "x", (TinyVector<1>{-1} + TinyVector<1>{1})); - CHECK_AFFECTATION_RESULT("R^1 x = 2; x[0] += 1;", "x", (TinyVector<1>{2} + TinyVector<1>{1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = -1; let y : R^1, y = 1; x += y;", "x", + (TinyVector<1>{-1} + TinyVector<1>{1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 2; x[0] += 1;", "x", (TinyVector<1>{2} + TinyVector<1>{1})); } SECTION("R^2") { - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); R^2 y = (1,3); x += y;", "x", + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); let y : R^2, y = (1,3); x += y;", "x", (TinyVector<2>{-1, true} + TinyVector<2>{1, 3})); - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); x[0] += 2; x[1] += 1;", "x", + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); x[0] += 2; x[1] += 1;", "x", (TinyVector<2>{-1, true} + TinyVector<2>{2, 1})); } SECTION("R^3") { - CHECK_AFFECTATION_RESULT("R^3 x = (-1, true, false); R^3 y = (1,2,3); x += y;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-1, true, false); let y : R^3, y = (1,2,3); x += y;", "x", (TinyVector<3>{-1, true, false} + TinyVector<3>{1, 2, 3})); - CHECK_AFFECTATION_RESULT("R^3 x = (-0.3, 12, 6.2); x[0] += 1; x[1] += -3; x[2] += 1;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] += 1; x[1] += -3; x[2] += 1;", "x", (TinyVector<3>{-0.3, 12, 6.2} + TinyVector<3>{1, -3, 1})); } } @@ -203,48 +190,49 @@ TEST_CASE("AffectationProcessor", "[language]") { SECTION("N") { - CHECK_AFFECTATION_RESULT("N n = 3; n -= 2;", "n", 1ul); - CHECK_AFFECTATION_RESULT("N m = 2; N n = 4; n -= m;", "n", 2ul); - CHECK_AFFECTATION_RESULT("N n = 1; n -= true;", "n", 0ul); - CHECK_AFFECTATION_RESULT("N n = 3; n -= false;", "n", 3ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 3; n -= 2;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = 4; n -= m;", "n", 2ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 1; n -= true;", "n", 0ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 3; n -= false;", "n", 3ul); } SECTION("Z") { - CHECK_AFFECTATION_RESULT("Z z = 1; z -= 3;", "z", -2l); - CHECK_AFFECTATION_RESULT("N m = 2; Z z = 1; z -= m;", "z", -1l); - CHECK_AFFECTATION_RESULT("Z z = 1; z -= true;", "z", 0l); - CHECK_AFFECTATION_RESULT("Z z = 3; z -= false;", "z", 3l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 1; z -= 3;", "z", -2l); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let z : Z, z = 1; z -= m;", "z", -1l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 1; z -= true;", "z", 0l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 3; z -= false;", "z", 3l); } SECTION("R") { - CHECK_AFFECTATION_RESULT("R r = 1.1; r -= 2;", "r", (1.1 - 2l)); - CHECK_AFFECTATION_RESULT("N m = 2; R r = 1.3; r -= m;", "r", (1.3 - 2ul)); - CHECK_AFFECTATION_RESULT("R r = 1.1; r -= true;", "r", (1.1 - true)); - CHECK_AFFECTATION_RESULT("R r = 3.3; r -= false;", "r", 3.3); - CHECK_AFFECTATION_RESULT("R r = 2; r -= 1.1;", "r", (2. - 1.1)); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r -= 2;", "r", (1.1 - 2l)); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let r : R, r = 1.3; r -= m;", "r", (1.3 - 2ul)); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r -= true;", "r", (1.1 - true)); + CHECK_AFFECTATION_RESULT("let r : R, r = 3.3; r -= false;", "r", 3.3); + CHECK_AFFECTATION_RESULT("let r : R, r = 2; r -= 1.1;", "r", (2. - 1.1)); } SECTION("R^1") { - CHECK_AFFECTATION_RESULT("R^1 x = -1; R^1 y = 1; x -= y;", "x", (TinyVector<1>{-1} - TinyVector<1>{1})); - CHECK_AFFECTATION_RESULT("R^1 x = 2; x[0] -= 1;", "x", (TinyVector<1>{2} - TinyVector<1>{1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = -1; let y : R^1, y = 1; x -= y;", "x", + (TinyVector<1>{-1} - TinyVector<1>{1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 2; x[0] -= 1;", "x", (TinyVector<1>{2} - TinyVector<1>{1})); } SECTION("R^2") { - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); R^2 y = (1,3); x -= y;", "x", + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); let y : R^2, y = (1,3); x -= y;", "x", (TinyVector<2>{-1, true} - TinyVector<2>{1, 3})); - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); x[0] -= 2; x[1] -= 1;", "x", + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); x[0] -= 2; x[1] -= 1;", "x", (TinyVector<2>{-1, true} - TinyVector<2>{2, 1})); } SECTION("R^3") { - CHECK_AFFECTATION_RESULT("R^3 x = (-1, true, false); R^3 y = (1,2,3); x-=y;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-1, true, false); let y : R^3, y = (1,2,3); x-=y;", "x", (TinyVector<3>{-1, true, false} - TinyVector<3>{1, 2, 3})); - CHECK_AFFECTATION_RESULT("R^3 x = (-0.3, 12, 6.2); x[0] -= 1; x[1] -= -3; x[2] -= 1;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] -= 1; x[1] -= -3; x[2] -= 1;", "x", (TinyVector<3>{-0.3, 12, 6.2} - TinyVector<3>{1, -3, 1})); } } @@ -253,46 +241,48 @@ TEST_CASE("AffectationProcessor", "[language]") { SECTION("N") { - CHECK_AFFECTATION_RESULT("N n = 3; n *= 2;", "n", 6ul); - CHECK_AFFECTATION_RESULT("N m = 2; N n = 4; n *= m;", "n", 8ul); - CHECK_AFFECTATION_RESULT("N n = 1; n *= true;", "n", 1ul); - CHECK_AFFECTATION_RESULT("N n = 3; n *= false;", "n", 0ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 3; n *= 2;", "n", 6ul); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = 4; n *= m;", "n", 8ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 1; n *= true;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 3; n *= false;", "n", 0ul); } SECTION("Z") { - CHECK_AFFECTATION_RESULT("Z z = 1; z *= 3;", "z", 3l); - CHECK_AFFECTATION_RESULT("N m = 2; Z z = -2; z *= m;", "z", -4l); - CHECK_AFFECTATION_RESULT("Z z = 1; z *= true;", "z", 1l); - CHECK_AFFECTATION_RESULT("Z z = 3; z *= false;", "z", 0l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 1; z *= 3;", "z", 3l); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let z : Z, z = -2; z *= m;", "z", -4l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 1; z *= true;", "z", 1l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 3; z *= false;", "z", 0l); } SECTION("R") { - CHECK_AFFECTATION_RESULT("R r = 1.1; r *= 2;", "r", (1.1 * 2l)); - CHECK_AFFECTATION_RESULT("N m = 2; R r = 1.3; r *= m;", "r", (1.3 * 2ul)); - CHECK_AFFECTATION_RESULT("R r = 1.1; r *= true;", "r", (1.1 * true)); - CHECK_AFFECTATION_RESULT("R r = 3.3; r *= false;", "r", (3.3 * false)); - CHECK_AFFECTATION_RESULT("R r = 2; r *= 1.1;", "r", (2. * 1.1)); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r *= 2;", "r", (1.1 * 2l)); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let r : R, r = 1.3; r *= m;", "r", (1.3 * 2ul)); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r *= true;", "r", (1.1 * true)); + CHECK_AFFECTATION_RESULT("let r : R, r = 3.3; r *= false;", "r", (3.3 * false)); + CHECK_AFFECTATION_RESULT("let r : R, r = 2; r *= 1.1;", "r", (2. * 1.1)); } SECTION("R^1") { - CHECK_AFFECTATION_RESULT("R^1 x = 2; x *= 2;", "x", (TinyVector<1>{TinyVector<1>{2} *= 2})); - CHECK_AFFECTATION_RESULT("R^1 x = 2; x[0] *= 1.3;", "x", (TinyVector<1>{2 * 1.3})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 2; x *= 2;", "x", (TinyVector<1>{TinyVector<1>{2} *= 2})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 2; x[0] *= 1.3;", "x", (TinyVector<1>{2 * 1.3})); } SECTION("R^2") { - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); x *= 3;", "x", (TinyVector<2>{TinyVector<2>{-1, true} *= 3})); - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); x[0] *= 2; x[1] *= 3;", "x", (TinyVector<2>{-1 * 2, true * 3})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); x *= 3;", "x", + (TinyVector<2>{TinyVector<2>{-1, true} *= 3})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); x[0] *= 2; x[1] *= 3;", "x", + (TinyVector<2>{-1 * 2, true * 3})); } SECTION("R^3") { - CHECK_AFFECTATION_RESULT("R^3 x = (-1, true, false); x*=5.2;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-1, true, false); x*=5.2;", "x", (TinyVector<3>{TinyVector<3>{-1, true, false} *= 5.2})); - CHECK_AFFECTATION_RESULT("R^3 x = (-0.3, 12, 6.2); x[0] *= -1; x[1] *= -3; x[2] *= 2;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] *= -1; x[1] *= -3; x[2] *= 2;", "x", (TinyVector<3>{-0.3 * -1, 12 * -3, 6.2 * 2})); } } @@ -301,106 +291,127 @@ TEST_CASE("AffectationProcessor", "[language]") { SECTION("N") { - CHECK_AFFECTATION_RESULT("N n = 4; n /= 2;", "n", 2ul); - CHECK_AFFECTATION_RESULT("N m = 2; N n = 6; n /= m;", "n", 3ul); - CHECK_AFFECTATION_RESULT("N n = 1; n /= true;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 4; n /= 2;", "n", 2ul); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = 6; n /= m;", "n", 3ul); + CHECK_AFFECTATION_RESULT("let n : N, n = 1; n /= true;", "n", 1ul); } SECTION("Z") { - CHECK_AFFECTATION_RESULT("Z z = 7; z /= -3;", "z", -2l); - CHECK_AFFECTATION_RESULT("N m = 3; Z z = 6; z /= m;", "z", 2l); - CHECK_AFFECTATION_RESULT("Z z = 6; z /= true;", "z", 6l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 7; z /= -3;", "z", -2l); + CHECK_AFFECTATION_RESULT("let m : N, m = 3; let z : Z, z = 6; z /= m;", "z", 2l); + CHECK_AFFECTATION_RESULT("let z : Z, z = 6; z /= true;", "z", 6l); } SECTION("R") { - CHECK_AFFECTATION_RESULT("R r = 1.1; r /= 2;", "r", (1.1 / 2l)); - CHECK_AFFECTATION_RESULT("N m = 2; R r = 1.3; r /= m;", "r", (1.3 / 2ul)); - CHECK_AFFECTATION_RESULT("R r = 1.1; r /= true;", "r", (1.1 / true)); - CHECK_AFFECTATION_RESULT("R r = 2; r /= 1.1;", "r", (2. / 1.1)); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r /= 2;", "r", (1.1 / 2l)); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let r : R, r = 1.3; r /= m;", "r", (1.3 / 2ul)); + CHECK_AFFECTATION_RESULT("let r : R, r = 1.1; r /= true;", "r", (1.1 / true)); + CHECK_AFFECTATION_RESULT("let r : R, r = 2; r /= 1.1;", "r", (2. / 1.1)); } SECTION("R^1") { - CHECK_AFFECTATION_RESULT("R^1 x = 2; x[0] /= 1.3;", "x", (TinyVector<1>{2 / 1.3})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 2; x[0] /= 1.3;", "x", (TinyVector<1>{2 / 1.3})); } SECTION("R^2") { - CHECK_AFFECTATION_RESULT("R^2 x = (-1, true); x[0] /= 2; x[1] /= 3;", "x", (TinyVector<2>{-1. / 2., true / 3.})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = (-1, true); x[0] /= 2; x[1] /= 3;", "x", + (TinyVector<2>{-1. / 2., true / 3.})); } SECTION("R^3") { - CHECK_AFFECTATION_RESULT("R^3 x = (-0.3, 12, 6.2); x[0] /= -1.2; x[1] /= -3.1; x[2] /= 2.4;", "x", + CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] /= -1.2; x[1] /= -3.1; x[2] /= 2.4;", "x", (TinyVector<3>{-0.3 / -1.2, 12 / -3.1, 6.2 / 2.4})); } } SECTION("errors") { - SECTION("invalid B affections") - { - CHECK_AFFECTATION_THROWS("B b = true; b += 1;"); - CHECK_AFFECTATION_THROWS("B b = true; b *= 1;"); - CHECK_AFFECTATION_THROWS("B b = true; b -= 1;"); - CHECK_AFFECTATION_THROWS("B b = true; b /= 1;"); - } - SECTION("invalid implicit conversions") { SECTION("-> B") { - CHECK_AFFECTATION_THROWS_WITH("N n = 1; B b; b = n;", "invalid implicit conversion: N -> B"); - CHECK_AFFECTATION_THROWS_WITH("B b; b = 1;", "invalid implicit conversion: Z -> B"); - CHECK_AFFECTATION_THROWS_WITH("B b; b = 2.3;", "invalid implicit conversion: R -> B"); - CHECK_AFFECTATION_THROWS_WITH("B b; b = \"foo\";", "invalid implicit conversion: string -> B"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 1; let b : B; b = n;", "invalid implicit conversion: N -> B"); + CHECK_AFFECTATION_THROWS_WITH("let b : B; b = 1;", "invalid implicit conversion: Z -> B"); + CHECK_AFFECTATION_THROWS_WITH("let b : B; b = 2.3;", "invalid implicit conversion: R -> B"); + CHECK_AFFECTATION_THROWS_WITH("let b : B; b = \"foo\";", "invalid implicit conversion: string -> B"); } SECTION("-> N") { - CHECK_AFFECTATION_THROWS_WITH("N n = 2.3;", "invalid implicit conversion: R -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = \"bar\";", "invalid implicit conversion: string -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2.3;", "invalid implicit conversion: R -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = \"bar\";", "invalid implicit conversion: string -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n += 1.1;", "invalid implicit conversion: R -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n += \"foo\";", "invalid implicit conversion: string -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n += 1.1;", "invalid implicit conversion: R -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n += \"foo\";", "invalid implicit conversion: string -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n -= 1.1;", "invalid implicit conversion: R -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n -= \"bar\";", "invalid implicit conversion: string -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n -= 1.1;", "invalid implicit conversion: R -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n -= \"bar\";", "invalid implicit conversion: string -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n *= 2.51;", "invalid implicit conversion: R -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n *= \"foobar\";", "invalid implicit conversion: string -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n *= 2.51;", "invalid implicit conversion: R -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n *= \"foobar\";", "invalid implicit conversion: string -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n /= 2.51;", "invalid implicit conversion: R -> N"); - CHECK_AFFECTATION_THROWS_WITH("N n = 2; n /= \"foo\";", "invalid implicit conversion: string -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n /= 2.51;", "invalid implicit conversion: R -> N"); + CHECK_AFFECTATION_THROWS_WITH("let n : N, n = 2; n /= \"foo\";", "invalid implicit conversion: string -> N"); } SECTION("-> Z") { - CHECK_AFFECTATION_THROWS_WITH("Z z = -2.3;", "invalid implicit conversion: R -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = \"foobar\";", "invalid implicit conversion: string -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = -2.3;", "invalid implicit conversion: R -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = \"foobar\";", "invalid implicit conversion: string -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z += 1.1;", "invalid implicit conversion: R -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z += \"foo\";", "invalid implicit conversion: string -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z += 1.1;", "invalid implicit conversion: R -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z += \"foo\";", "invalid implicit conversion: string -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z -= 2.1;", "invalid implicit conversion: R -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z -= \"bar\";", "invalid implicit conversion: string -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z -= 2.1;", "invalid implicit conversion: R -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z -= \"bar\";", "invalid implicit conversion: string -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z *= -2.51;", "invalid implicit conversion: R -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z *= \"foobar\";", "invalid implicit conversion: string -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z *= -2.51;", "invalid implicit conversion: R -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z *= \"foobar\";", "invalid implicit conversion: string -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 4; z /= -2.;", "invalid implicit conversion: R -> Z"); - CHECK_AFFECTATION_THROWS_WITH("Z z = 2; z /= \"foo\";", "invalid implicit conversion: string -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 4; z /= -2.;", "invalid implicit conversion: R -> Z"); + CHECK_AFFECTATION_THROWS_WITH("let z : Z, z = 2; z /= \"foo\";", "invalid implicit conversion: string -> Z"); } SECTION("-> R") { - CHECK_AFFECTATION_THROWS_WITH("R x = \"foobar\";", "invalid implicit conversion: string -> R"); - CHECK_AFFECTATION_THROWS_WITH("R x = 2.3; x += \"foo\";", "invalid implicit conversion: string -> R"); - CHECK_AFFECTATION_THROWS_WITH("R x = 2.1; x -= \"bar\";", "invalid implicit conversion: string -> R"); - CHECK_AFFECTATION_THROWS_WITH("R x = 1.2; x *= \"foobar\";", "invalid implicit conversion: string -> R"); - CHECK_AFFECTATION_THROWS_WITH("R x =-2.3; x /= \"foo\";", "invalid implicit conversion: string -> R"); + CHECK_AFFECTATION_THROWS_WITH("let x : R, x = \"foobar\";", "invalid implicit conversion: string -> R"); + CHECK_AFFECTATION_THROWS_WITH("let x : R, x = 2.3; x += \"foo\";", "invalid implicit conversion: string -> R"); + CHECK_AFFECTATION_THROWS_WITH("let x : R, x = 2.1; x -= \"bar\";", "invalid implicit conversion: string -> R"); + CHECK_AFFECTATION_THROWS_WITH("let x : R, x = 1.2; x *= \"foobar\";", + "invalid implicit conversion: string -> R"); + CHECK_AFFECTATION_THROWS_WITH("let x : R, x =-2.3; x /= \"foo\";", "invalid implicit conversion: string -> R"); + } + + SECTION("-> R^n") + { + CHECK_AFFECTATION_THROWS_WITH("let x : R^2, x = \"foobar\";", "invalid implicit conversion: string -> R^2"); + CHECK_AFFECTATION_THROWS_WITH("let x : R^3, x = \"foobar\";", "invalid implicit conversion: string -> R^3"); + + CHECK_AFFECTATION_THROWS_WITH("let x : R^2, x = 3.2;", "invalid implicit conversion: R -> R^2"); + CHECK_AFFECTATION_THROWS_WITH("let x : R^3, x = 2.3;", "invalid implicit conversion: R -> R^3"); + + CHECK_AFFECTATION_THROWS_WITH("let x : R^2, x = 4;", "invalid implicit conversion: Z -> R^2"); + CHECK_AFFECTATION_THROWS_WITH("let x : R^3, x = 3;", "invalid implicit conversion: Z -> R^3"); + + CHECK_AFFECTATION_THROWS_WITH("let x : R^1, x = 0; let y : R^2, y = x;", + "incompatible dimensions in affectation"); + CHECK_AFFECTATION_THROWS_WITH("let x : R^1, x = 0; let y : R^3, y = x;", + "incompatible dimensions in affectation"); + + CHECK_AFFECTATION_THROWS_WITH("let x : R^2, x = 0; let y : R^1, y = x;", + "incompatible dimensions in affectation"); + CHECK_AFFECTATION_THROWS_WITH("let x : R^2, x = 0; let y : R^3, y = x;", + "incompatible dimensions in affectation"); + + CHECK_AFFECTATION_THROWS_WITH("let x : R^3, x = 0; let y : R^1, y = x;", + "incompatible dimensions in affectation"); + CHECK_AFFECTATION_THROWS_WITH("let x : R^3, x = 0; let y : R^2, y = x;", + "incompatible dimensions in affectation"); } } } diff --git a/tests/test_AffectationToStringProcessor.cpp b/tests/test_AffectationToStringProcessor.cpp index 94763b67894f0f9708fdf321303f01f59723ae67..753e144626b484ece0950bbc26ef52bd194a11ab 100644 --- a/tests/test_AffectationToStringProcessor.cpp +++ b/tests/test_AffectationToStringProcessor.cpp @@ -52,49 +52,52 @@ TEST_CASE("ASTAffectationToStringProcessor", "[language]") { SECTION("Affectations") { - CHECK_AFFECTATION_RESULT(R"(string s; s = "foo";)", "s", std::string("foo")); - CHECK_AFFECTATION_RESULT(R"(N n = 2; string s; s = n;)", "s", std::to_string(2ul)); - CHECK_AFFECTATION_RESULT(R"(string s; s = -1;)", "s", std::to_string(-1l)); - CHECK_AFFECTATION_RESULT(R"(string s; s = true;)", "s", std::to_string(true)); - CHECK_AFFECTATION_RESULT(R"(string s; s = 2.3;)", "s", std::to_string(2.3)); + CHECK_AFFECTATION_RESULT(R"(let s : string; s = "foo";)", "s", std::string("foo")); + CHECK_AFFECTATION_RESULT(R"(let n : N, n = 2; let s : string; s = n;)", "s", std::to_string(2ul)); + CHECK_AFFECTATION_RESULT(R"(let s : string; s = -1;)", "s", std::to_string(-1l)); + CHECK_AFFECTATION_RESULT(R"(let s : string; s = true;)", "s", std::to_string(true)); + CHECK_AFFECTATION_RESULT(R"(let s : string; s = 2.3;)", "s", std::to_string(2.3)); { std::ostringstream os; os << TinyVector<1>{13} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^1 x = 13; string s; s = x;)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let x : R^1, x = 13; let s : string; s = x;)", "s", os.str()); } { std::ostringstream os; os << TinyVector<2>{2, 3} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^2 x = (2,3); string s; s = x;)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let x : R^2, x = (2,3); let s : string; s = x;)", "s", os.str()); } { std::ostringstream os; os << TinyVector<3>{1, 2, 3} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^3 x = (1,2,3); string s; s = x;)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let x : R^3, x = (1,2,3); let s : string; s = x;)", "s", os.str()); } } SECTION("+=") { - CHECK_AFFECTATION_RESULT(R"(string s = "foo"; s += "bar";)", "s", std::string("foobar")); - CHECK_AFFECTATION_RESULT(R"(N n = 2; string s = "foo"; s += n;)", "s", (std::string("foo") + std::to_string(2ul))); - CHECK_AFFECTATION_RESULT(R"(string s = "foo"; s += -1;)", "s", (std::string("foo") + std::to_string(-1l))); - CHECK_AFFECTATION_RESULT(R"(string s = "foo"; s += true;)", "s", (std::string("foo") + std::to_string(true))); - CHECK_AFFECTATION_RESULT(R"(string s = "foo"; s += 2.3;)", "s", (std::string("foo") + std::to_string(2.3))); + CHECK_AFFECTATION_RESULT(R"(let s : string, s = "foo"; s += "bar";)", "s", std::string("foobar")); + CHECK_AFFECTATION_RESULT(R"(let n : N, n = 2; let s : string, s = "foo"; s += n;)", "s", + (std::string("foo") + std::to_string(2ul))); + CHECK_AFFECTATION_RESULT(R"(let s : string, s = "foo"; s += -1;)", "s", (std::string("foo") + std::to_string(-1l))); + CHECK_AFFECTATION_RESULT(R"(let s : string, s = "foo"; s += true;)", "s", + (std::string("foo") + std::to_string(true))); + CHECK_AFFECTATION_RESULT(R"(let s : string, s = "foo"; s += 2.3;)", "s", + (std::string("foo") + std::to_string(2.3))); { std::ostringstream os; os << "foo" << TinyVector<1>{13} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^1 x = 13; string s="foo"; s += x;)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let x : R^1, x = 13; let s : string, s="foo"; s += x;)", "s", os.str()); } { std::ostringstream os; os << "foo" << TinyVector<2>{2, 3} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^2 x = (2,3); string s="foo"; s += x;)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let x : R^2, x = (2,3); let s : string, s="foo"; s += x;)", "s", os.str()); } { std::ostringstream os; os << "foo" << TinyVector<3>{1, 2, 3} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^3 x = (1,2,3); string s="foo"; s += x;)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let x : R^3, x = (1,2,3); let s : string, s="foo"; s += x;)", "s", os.str()); } } } diff --git a/tests/test_ArraySubscriptProcessor.cpp b/tests/test_ArraySubscriptProcessor.cpp index eaab8764aba71e2e41f3c9ccd7eb5c714f072e30..5be3280a586414399633d02248613a7c57d46f09 100644 --- a/tests/test_ArraySubscriptProcessor.cpp +++ b/tests/test_ArraySubscriptProcessor.cpp @@ -83,8 +83,8 @@ TEST_CASE("ArraySubscriptProcessor", "[language]") SECTION("R^1 component access") { std::string_view data = R"( -R^1 x = 1; -R x0 = x[0]; +let x : R^1, x = 1; +let x0: R, x0 = x[0]; )"; CHECK_EVALUATION_RESULT(data, "x0", double{1}); } @@ -92,9 +92,9 @@ R x0 = x[0]; SECTION("R^2 component access") { std::string_view data = R"( -R^2 x = (1,2); -R x0 = x[0]; -R x1 = x[1]; +let x : R^2, x = (1,2); +let x0: R, x0 = x[0]; +let x1: R, x1 = x[1]; )"; CHECK_EVALUATION_RESULT(data, "x0", double{1}); CHECK_EVALUATION_RESULT(data, "x1", double{2}); @@ -103,10 +103,10 @@ R x1 = x[1]; SECTION("R^3 component access") { std::string_view data = R"( -R^3 x = (1,2,3); -R x0 = x[0]; -R x1 = x[1]; -R x2 = x[2]; +let x : R^3, x = (1,2,3); +let x0 : R, x0 = x[0]; +let x1 : R, x1 = x[1]; +let x2 : R, x2 = x[2]; )"; CHECK_EVALUATION_RESULT(data, "x0", double{1}); CHECK_EVALUATION_RESULT(data, "x1", double{2}); @@ -116,14 +116,14 @@ R x2 = x[2]; SECTION("R^d component access from integer expression") { std::string_view data = R"( -R^3 x = (1,2,3); -R x0 = x[3-2-1]; +let x : R^3, x = (1,2,3); +let x0: R, x0 = x[3-2-1]; -R^2 y = (2,7); -R y1 = y[2/2]; +let y : R^2, y = (2,7); +let y1: R, y1 = y[2/2]; -R^1 z = 8; -R z0 = z[(2-2)*1]; +let z : R^1, z = 8; +let z0: R, z0 = z[(2-2)*1]; )"; CHECK_EVALUATION_RESULT(data, "x0", double{1}); CHECK_EVALUATION_RESULT(data, "y1", double{7}); @@ -135,8 +135,8 @@ R z0 = z[(2-2)*1]; SECTION("R index type") { std::string_view data = R"( -R^3 x = (1,2,3); -R x0 = x[2.3]; +let x : R^3, x = (1,2,3); +let x0: R, x0 = x[2.3]; )"; CHECK_EVALUATION_THROWS_WITH(data, std::string{"invalid implicit conversion: R -> Z"}); @@ -145,8 +145,8 @@ R x0 = x[2.3]; SECTION("string index type") { std::string_view data = R"( -R^3 x = (1,2,3); -R x0 = x["foo"]; +let x : R^3, x = (1,2,3); +let x0: R, x0 = x["foo"]; )"; CHECK_EVALUATION_THROWS_WITH(data, std::string{"invalid implicit conversion: string -> Z"}); @@ -155,8 +155,8 @@ R x0 = x["foo"]; SECTION("R^d index type") { std::string_view data = R"( -R^3 x = (1,2,3); -R x0 = x[x]; +let x : R^3, x = (1,2,3); +let x0: R, x0 = x[x]; )"; CHECK_EVALUATION_THROWS_WITH(data, std::string{"invalid implicit conversion: R^3 -> Z"}); diff --git a/tests/test_BinaryExpressionProcessor_arithmetic.cpp b/tests/test_BinaryExpressionProcessor_arithmetic.cpp index 9c229c5d5fb9f1b22e8e0fc3b645f0547d31944d..a1f31fbf21b47cbf37f628958adc58146c99e826 100644 --- a/tests/test_BinaryExpressionProcessor_arithmetic.cpp +++ b/tests/test_BinaryExpressionProcessor_arithmetic.cpp @@ -8,39 +8,39 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = true + true;)", "z", 2l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; n = true + 1;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; n = true + 1;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; n = false + 1;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = true + 3;)", "z", 4l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = false + 3;)", "z", 3l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = false + 3.6;)", "r", 3.6); + CHECK_BINARY_EXPRESSION_RESULT(R"(let s:R, s = -3.3; let r: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; R x = n + 2.3;)", "x", 3.3); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; n = n + true;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; n = n + m;)", "n", 6ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = -1; n = n + z;)", "n", 3ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let x:R, x = n + 2.3;)", "x", 3.3); } 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"(R x = 3 + 2.5;)", "x", 5.5); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 + true;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = -3 + n;)", "z", 1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let z:Z, z = -3 + n;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 1 + 2;)", "z", 3l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 3 + 2.5;)", "x", 5.5); } 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + true;)", "r", (-1.2 + true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = -1.2 + n;)", "r", (-1.2 + uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 1;)", "r", (-1.2 + 1)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 + 2.3;)", "r", (-1.2 + 2.3)); } } @@ -48,34 +48,34 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") { 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = true - false;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; n = true - n;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = false - 1;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let 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; R x = n - 2.3;)", "x", double{3ul - 2.3}); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; n = n - true;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; n = n - m;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 5; n = n - 4;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; let x:R, x = n - 2.3;)", "x", double{3ul - 2.3}); } 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"(R x = 4 - 2.5;)", "x", 1.5); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 - true;)", "z", -2l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = 3 - n;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 7 - 2;)", "z", 5l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 - 2.5;)", "x", 1.5); } 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 - true;)", "r", (-1.2 - true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = -1.2 - n;)", "r", (-1.2 - uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 - 1;)", "r", (-1.2 - 1)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 - 2.3;)", "r", (-1.2 - 2.3)); } } @@ -83,34 +83,34 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") { 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = true * false;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; n = true * n;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = false * 1;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let 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; R x = n * 2.3;)", "x", double{3ul * 2.3}); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; n = n * true;)", "n", 3ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; n = n * m;)", "n", 8ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 5; n = n * 4;)", "n", 20ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; let x:R, x = n * 2.3;)", "x", double{3ul * 2.3}); } 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"(R x = 4 * 2.4;)", "x", double{4l * 2.4}); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 * true;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = 3 * n;)", "z", 12l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 7 * 2;)", "z", 14l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 * 2.4;)", "x", double{4l * 2.4}); } 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 * true;)", "r", (-1.2 * true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = -1.2 * n;)", "r", (-1.2 * uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 * 11;)", "r", (-1.2 * 11)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 * 2.3;)", "r", (-1.2 * 2.3)); } } @@ -118,34 +118,34 @@ TEST_CASE("BinaryExpressionProcessor arithmetic", "[language]") { 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = false / true;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; n = true / n;)", "n", 0ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = false / 1;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let 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; R x = n / 2.3;)", "x", double{3ul / 2.3}); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; n = n / true;)", "n", 3ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; n = n / m;)", "n", 2ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 5; n = n / 4;)", "n", 1ul); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; let x:R, x = n / 2.3;)", "x", double{3ul / 2.3}); } 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"(R x = 4 / 2.4;)", "x", double{4l / 2.4}); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = -1 / true;)", "z", -1l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let z:Z, z = 3 / n;)", "z", 0l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let z:Z, z = 7 / 2;)", "z", 3l); + CHECK_BINARY_EXPRESSION_RESULT(R"(let x:R, x = 4 / 2.4;)", "x", double{4l / 2.4}); } 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)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 / true;)", "r", (-1.2 / true)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let r:R, r = -1.2 / n;)", "r", (-1.2 / uint64_t{2})); + CHECK_BINARY_EXPRESSION_RESULT(R"(let r:R, r = -1.2 / 11;)", "r", (-1.2 / 11)); + CHECK_BINARY_EXPRESSION_RESULT(R"(let 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 index 2a6ba6b9c1b9fa8ff16b3f33ba21fa4d91f933c2..b453405ce4283f8deeaf864533102e748f6c284f 100644 --- a/tests/test_BinaryExpressionProcessor_comparison.cpp +++ b/tests/test_BinaryExpressionProcessor_comparison.cpp @@ -8,65 +8,65 @@ TEST_CASE("BinaryExpressionProcessor comparison", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = true < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = true < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = false < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = false < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true < 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true < 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false < 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false < 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false < 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true < 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false < 0.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; let b:B, b = n < m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let m:N, m = 2; let b:B, b = n < m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let m:N, m = 0; let b:B, b = n < m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n < 4;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n < 5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n < 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1 < false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = -3 < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = 0 < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 < 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 < 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 < 3.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 < 3.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 < true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 < false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. < true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0. < false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = -1.2 < n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = 0. < n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 < 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. < 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 < -1.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 < -1.2;)", "b", false); } } @@ -74,75 +74,75 @@ TEST_CASE("BinaryExpressionProcessor comparison", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = true <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = true <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = true <= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = false <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = false <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true <= 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true <= 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true <= 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= -1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true <= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false <= 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = n <= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; let b:B, b = n <= m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let m:N, m = 2; let b:B, b = n <= m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n <= 5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n <= 4;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n <= 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n <= 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n <= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 2 <= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = 4 <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = 5 <= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 2 <= 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 <= 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 <= 3.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 <= 3.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. <= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1.1 <= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0. <= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0.1 <= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = 2. <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = 2.1 <= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = 0.7 <= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -2 <= -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1 <= -2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 <= -1.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 <= -1.2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. <= -1.2;)", "b", false); } } @@ -150,71 +150,71 @@ TEST_CASE("BinaryExpressionProcessor comparison", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = true > n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = true > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = true > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = false > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = false > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true > 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true > 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false > 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false > 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false > 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true > 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false > 0.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = n > true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; let b:B, b = n > m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let m:N, m = 2; let b:B, b = n > m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let m:N, m = 0; let b:B, b = n > m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n > 4;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n > 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n > 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n > 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 2 > true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = -3 > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = 0 > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = 1 > n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 > 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 > 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 2 > 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 > 3.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 > 3.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1.2 > true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0.2 > false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. > true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0. > false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = -2.2 > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = 0. > n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1.2 > 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. > 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1. > -1.1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 > -1.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 > -1.2;)", "b", false); } } @@ -222,78 +222,78 @@ TEST_CASE("BinaryExpressionProcessor comparison", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = true >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = true >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = true >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = false >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = false >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= -1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true >= 0.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false >= 0.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = n >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; let b:B, b = n >= m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let m:N, m = 2; let b:B, b = n >= m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n >= 5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n >= 4;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n >= 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n >= 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n >= 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 2 >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = 4 >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = 3 >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 2 >= 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 >= 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 >= 3.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 >= 3.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 >= true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 >= false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1.1 >= true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0. >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0.1 >= false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = 2. >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = 2.1 >= n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = 0.7 >= n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -2 >= -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1 >= -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 >= -1.1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 >= -1.2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. >= -1.2;)", "b", true); } } } diff --git a/tests/test_BinaryExpressionProcessor_equality.cpp b/tests/test_BinaryExpressionProcessor_equality.cpp index f2b000b2cbb4416590594a5d7acff5796f3251ec..0fd6ca00b0b10311ca72f9077cb0f0fa743d15fb 100644 --- a/tests/test_BinaryExpressionProcessor_equality.cpp +++ b/tests/test_BinaryExpressionProcessor_equality.cpp @@ -8,65 +8,65 @@ TEST_CASE("BinaryExpressionProcessor equality", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = true == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = true == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = false == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = false == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true == 3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true == 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false == 0;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false == 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false == 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true == 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false == 0.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; let b:B, b = n == m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let m:N, m = 2; let b:B, b = n == m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n == 4;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n == 5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n == 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = -3 == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; let b:B, b = 3 == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 == 2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 11 == 11;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 == 2.5;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 == 3.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 == true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. == true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0.1 == false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0. == false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = -1.2 == n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = 2. == n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 == 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -2. == -2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 == 2.3;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 == -1.2;)", "b", true); } } @@ -74,65 +74,65 @@ TEST_CASE("BinaryExpressionProcessor equality", "[language]") { 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = true != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = true != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = false != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = false != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true != 3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true != 1;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false != 0;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false != 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false != 1.;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true != 1.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false != 0.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 0; let b:B, b = n != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let m:N, m = 2; let b:B, b = n != m;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let m:N, m = 2; let b:B, b = n != m;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n != 4;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = n != 5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b:B, b = n != 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 1; let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0 != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 4; let b:B, b = -3 != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 3; let b:B, b = 3 != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1 != 2;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 11 != 11;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 != 2.5;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 3 != 3.;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b: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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 != true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 1. != true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0.1 != false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = 0. != false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = -1.2 != n;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let b:B, b = 2. != n;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 != 1;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -2. != -2;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 != 2.3;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = -1.2 != -1.2;)", "b", false); } } } diff --git a/tests/test_BinaryExpressionProcessor_logic.cpp b/tests/test_BinaryExpressionProcessor_logic.cpp index 283dda9a20bf2049e081109cd184ff2e74c9c3a0..c60b206d0ff907b140682d0720b66841c1207211 100644 --- a/tests/test_BinaryExpressionProcessor_logic.cpp +++ b/tests/test_BinaryExpressionProcessor_logic.cpp @@ -6,32 +6,32 @@ TEST_CASE("BinaryExpressionProcessor logic", "[language]") { SECTION("and") { - 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"(B b = true and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true and true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false and true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true and false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false and false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = (2<3) and ((3.2-1) != 2);)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = (1>4) and true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = (2<3) and ((3.2-1) != 2);)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = (1>4) and true;)", "b", false); } SECTION("or") { - 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"(B b = true or false;)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = false or false;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true or false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false or false;)", "b", false); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = (2<3) and ((3.2-1) != 2);)", "b", true); - CHECK_BINARY_EXPRESSION_RESULT(R"(B b = (1>4) or true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = (2<3) and ((3.2-1) != 2);)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = (1>4) or true;)", "b", true); } SECTION("xor") { - 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); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true xor true;)", "b", false); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false xor true;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = true xor false;)", "b", true); + CHECK_BINARY_EXPRESSION_RESULT(R"(let b:B, b = false xor false;)", "b", false); } SECTION("errors") @@ -40,8 +40,8 @@ TEST_CASE("BinaryExpressionProcessor logic", "[language]") { SECTION("and") { - CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(N n=1; n and true;)", "invalid implicit conversion: N -> B"); - CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(N n=2; false and n;)", "invalid implicit conversion: N -> B"); + CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(let n:N, n=1; n and true;)", "invalid implicit conversion: N -> B"); + CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(let n:N, n=2; false and n;)", "invalid implicit conversion: N -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(1 and true;)", "invalid implicit conversion: Z -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(false and 2;)", "invalid implicit conversion: Z -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(1.1 and true;)", "invalid implicit conversion: R -> B"); @@ -50,8 +50,8 @@ TEST_CASE("BinaryExpressionProcessor logic", "[language]") SECTION("or") { - CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(N n=1; n or true;)", "invalid implicit conversion: N -> B"); - CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(N n=2; false or n;)", "invalid implicit conversion: N -> B"); + CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(let n:N, n=1; n or true;)", "invalid implicit conversion: N -> B"); + CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(let n:N, n=2; false or n;)", "invalid implicit conversion: N -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(1 or true;)", "invalid implicit conversion: Z -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(false or 2;)", "invalid implicit conversion: Z -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(1.1 or true;)", "invalid implicit conversion: R -> B"); @@ -60,8 +60,8 @@ TEST_CASE("BinaryExpressionProcessor logic", "[language]") SECTION("xor") { - CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(N n=1; n xor true;)", "invalid implicit conversion: N -> B"); - CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(N n=2; false xor n;)", "invalid implicit conversion: N -> B"); + CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(let n:N, n=1; n xor true;)", "invalid implicit conversion: N -> B"); + CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(let n:N, n=2; false xor n;)", "invalid implicit conversion: N -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(1 xor true;)", "invalid implicit conversion: Z -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(false xor 2;)", "invalid implicit conversion: Z -> B"); CHECK_BINARY_EXPRESSION_THROWS_WITH(R"(1.1 xor true;)", "invalid implicit conversion: R -> B"); diff --git a/tests/test_CFunctionProcessor.cpp b/tests/test_CFunctionProcessor.cpp index 6c8c5c5b869ac5b12a062e23403ebe79066a9801..efd3efad7e56d35014d86d4d35546b2038f61cef 100644 --- a/tests/test_CFunctionProcessor.cpp +++ b/tests/test_CFunctionProcessor.cpp @@ -63,7 +63,7 @@ TEST_CASE("CFunctionProcessor", "[language]") tested_function_set.insert("sqrt"); std::string_view data = R"( import math; -R x = sqrt(4); +let x:R, x = sqrt(4); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::sqrt(4l)}); } @@ -72,7 +72,7 @@ R x = sqrt(4); tested_function_set.insert("abs"); std::string_view data = R"( import math; -R x = abs(-3.4); +let x:R, x = abs(-3.4); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::abs(-3.4)}); } @@ -81,7 +81,7 @@ R x = abs(-3.4); tested_function_set.insert("sin"); std::string_view data = R"( import math; -R x = sin(1.3); +let x:R, x = sin(1.3); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::sin(1.3)}); } @@ -90,7 +90,7 @@ R x = sin(1.3); tested_function_set.insert("cos"); std::string_view data = R"( import math; -R x = cos(1.3); +let x:R, x = cos(1.3); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::cos(1.3)}); } @@ -99,7 +99,7 @@ R x = cos(1.3); tested_function_set.insert("tan"); std::string_view data = R"( import math; -R x = tan(1.3); +let x:R, x = tan(1.3); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::tan(1.3)}); } @@ -108,7 +108,7 @@ R x = tan(1.3); tested_function_set.insert("asin"); std::string_view data = R"( import math; -R x = asin(0.7); +let x:R, x = asin(0.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::asin(0.7)}); } @@ -117,7 +117,7 @@ R x = asin(0.7); tested_function_set.insert("acos"); std::string_view data = R"( import math; -R x = acos(0.7); +let x:R, x = acos(0.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::acos(0.7)}); } @@ -126,7 +126,7 @@ R x = acos(0.7); tested_function_set.insert("atan"); std::string_view data = R"( import math; -R x = atan(0.7); +let x:R, x = atan(0.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::atan(0.7)}); } @@ -135,7 +135,7 @@ R x = atan(0.7); tested_function_set.insert("atan2"); std::string_view data = R"( import math; -R x = atan2(0.7, 0.4); +let x:R, x = atan2(0.7, 0.4); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::atan2(0.7, 0.4)}); } @@ -144,7 +144,7 @@ R x = atan2(0.7, 0.4); tested_function_set.insert("sinh"); std::string_view data = R"( import math; -R x = sinh(0.6); +let x:R, x = sinh(0.6); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::sinh(0.6)}); } @@ -153,7 +153,7 @@ R x = sinh(0.6); tested_function_set.insert("cosh"); std::string_view data = R"( import math; -R x = cosh(1.7); +let x:R, x = cosh(1.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::cosh(1.7)}); } @@ -162,7 +162,7 @@ R x = cosh(1.7); tested_function_set.insert("tanh"); std::string_view data = R"( import math; -R x = tanh(0.6); +let x:R, x = tanh(0.6); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::tanh(0.6)}); } @@ -171,7 +171,7 @@ R x = tanh(0.6); tested_function_set.insert("asinh"); std::string_view data = R"( import math; -R x = asinh(0.6); +let x:R, x = asinh(0.6); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::asinh(0.6)}); } @@ -180,7 +180,7 @@ R x = asinh(0.6); tested_function_set.insert("acosh"); std::string_view data = R"( import math; -R x = acosh(1.7); +let x:R, x = acosh(1.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::acosh(1.7)}); } @@ -189,7 +189,7 @@ R x = acosh(1.7); tested_function_set.insert("atanh"); std::string_view data = R"( import math; -R x = atanh(0.6); +let x:R, x = atanh(0.6); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::atanh(0.6)}); } @@ -198,7 +198,7 @@ R x = atanh(0.6); tested_function_set.insert("exp"); std::string_view data = R"( import math; -R x = exp(1.7); +let x:R, x = exp(1.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::exp(1.7)}); } @@ -207,7 +207,7 @@ R x = exp(1.7); tested_function_set.insert("log"); std::string_view data = R"( import math; -R x = log(1.6); +let x:R, x = log(1.6); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::log(1.6)}); } @@ -216,7 +216,7 @@ R x = log(1.6); tested_function_set.insert("pow"); std::string_view data = R"( import math; -R x = pow(1.6, 2.3); +let x:R, x = pow(1.6, 2.3); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "x", double{std::pow(1.6, 2.3)}); } @@ -225,7 +225,7 @@ R x = pow(1.6, 2.3); tested_function_set.insert("ceil"); std::string_view data = R"( import math; -Z z = ceil(-1.2); +let z:Z, z = ceil(-1.2); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "z", int64_t{-1}); } @@ -234,7 +234,7 @@ Z z = ceil(-1.2); tested_function_set.insert("floor"); std::string_view data = R"( import math; -Z z = floor(-1.2); +let z:Z, z = floor(-1.2); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "z", int64_t{-2}); } @@ -243,7 +243,7 @@ Z z = floor(-1.2); tested_function_set.insert("trunc"); std::string_view data = R"( import math; -Z z = trunc(-0.2) + trunc(0.7); +let z:Z, z = trunc(-0.2) + trunc(0.7); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "z", int64_t{0}); } @@ -252,7 +252,7 @@ Z z = trunc(-0.2) + trunc(0.7); tested_function_set.insert("round"); std::string_view data = R"( import math; -Z z = round(-1.2); +let z:Z, z = round(-1.2); )"; CHECK_CFUNCTION_EVALUATION_RESULT(data, "z", int64_t{-1}); } diff --git a/tests/test_ConcatExpressionProcessor.cpp b/tests/test_ConcatExpressionProcessor.cpp index 0eb52cfc0d419883857397956df1d1fd3aa025dd..b2d6df6640156f4bf938a8fcddb6b1b994294bb3 100644 --- a/tests/test_ConcatExpressionProcessor.cpp +++ b/tests/test_ConcatExpressionProcessor.cpp @@ -52,26 +52,27 @@ TEST_CASE("ConcatExpressionProcessor", "[language]") { SECTION("string + string") { - CHECK_CONCAT_EXPRESSION_RESULT(R"(string s = "foo"; s = s+"bar";)", "s", std::string{"foobar"}); + CHECK_CONCAT_EXPRESSION_RESULT(R"(let s:string, s = "foo"; s = s+"bar";)", "s", std::string{"foobar"}); } SECTION("string + N") { - CHECK_CONCAT_EXPRESSION_RESULT(R"(N n = 1; string s = "foo_"; s = s+n;)", "s", std::string{"foo_1"}); + CHECK_CONCAT_EXPRESSION_RESULT(R"(let n:N, n = 1; let s:string, s = "foo_"; s = s+n;)", "s", std::string{"foo_1"}); } SECTION("string + Z") { - CHECK_CONCAT_EXPRESSION_RESULT(R"(string s = "foo_"; s = s+2;)", "s", std::string{"foo_2"}); + CHECK_CONCAT_EXPRESSION_RESULT(R"(let s:string, s = "foo_"; s = s+2;)", "s", std::string{"foo_2"}); } SECTION("string + R") { - CHECK_CONCAT_EXPRESSION_RESULT(R"(string s = "foo_"; s = s+2.4;)", "s", std::string{"foo_"} + std::to_string(2.4)); + CHECK_CONCAT_EXPRESSION_RESULT(R"(let s:string, s = "foo_"; s = s+2.4;)", "s", + std::string{"foo_"} + std::to_string(2.4)); } SECTION("string + B") { - CHECK_CONCAT_EXPRESSION_RESULT(R"(string s = "foo_"; s = s+true;)", "s", std::string{"foo_1"}); + CHECK_CONCAT_EXPRESSION_RESULT(R"(let s:string, s = "foo_"; s = s+true;)", "s", std::string{"foo_1"}); } } diff --git a/tests/test_DoWhileProcessor.cpp b/tests/test_DoWhileProcessor.cpp index a4c50d9be6e185fc2188c5bae1521c4eec3cfddc..5bf155652cefbde99a7a765f74f2d2f34a81cb7a 100644 --- a/tests/test_DoWhileProcessor.cpp +++ b/tests/test_DoWhileProcessor.cpp @@ -63,8 +63,8 @@ TEST_CASE("DoWhileProcessor", "[language]") SECTION("simple loop") { std::string_view data = R"( -N i = 3; -N j = 0; +let i:N, i = 3; +let j:N, j = 0; do { j++; i += j; @@ -76,8 +76,8 @@ do { SECTION("do-while with break") { std::string_view data = R"( -N i = 3; -N j = 0; +let i:N, i = 3; +let j:N, j = 0; do { j++; if (j==2) break; @@ -90,8 +90,8 @@ do { SECTION("do-while with continue") { std::string_view data = R"( -N i = 3; -N j = 0; +let i:N, i = 3; +let j:N, j = 0; do { j++; if (j<=3) continue; diff --git a/tests/test_ForProcessor.cpp b/tests/test_ForProcessor.cpp index 3c03b99f2e4fccc270ce240aff40e2dc06071d23..ec492c88d7ddc2d428f8343ff6a0e918650f70c4 100644 --- a/tests/test_ForProcessor.cpp +++ b/tests/test_ForProcessor.cpp @@ -63,8 +63,8 @@ TEST_CASE("ForProcessor", "[language]") SECTION("simple for") { std::string_view data = R"( -N i = 0; -for(N l=0; l<10; ++l) { +let i:N, i = 0; +for(let l:N, l=0; l<10; ++l) { i += l; } )"; @@ -74,8 +74,8 @@ for(N l=0; l<10; ++l) { SECTION("for with break") { std::string_view data = R"( -N i = 0; -for(N l=0; l<10; ++l) { +let i:N, i = 0; +for(let l:N, l=0; l<10; ++l) { i += l; if (i > 30) break; } @@ -86,8 +86,8 @@ for(N l=0; l<10; ++l) { SECTION("for with continue") { std::string_view data = R"( -N i = 0; -for(N l=0; l<10; ++l) { +let i:N, i = 0; +for(let l:N, l=0; l<10; ++l) { if (l<3) continue; i += l; } @@ -100,7 +100,7 @@ for(N l=0; l<10; ++l) { SECTION("bad test type") { std::string_view data = R"( -for(N l=0; l; ++l) { +for(let l:N, l=0; l; ++l) { } )"; diff --git a/tests/test_FunctionProcessor.cpp b/tests/test_FunctionProcessor.cpp index 2a4deb6c4335264f424a52d99c4d93edefdac784..f86b56d54e526d341712ab990abd5563a2f58deb 100644 --- a/tests/test_FunctionProcessor.cpp +++ b/tests/test_FunctionProcessor.cpp @@ -66,7 +66,7 @@ TEST_CASE("FunctionProcessor", "[language]") { std::string_view data = R"( let f : B -> B, b -> not b; -B b = f(true); +let b:B, b = f(true); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -78,7 +78,7 @@ B b = f(true); { std::string_view data = R"( let f : N -> B, n -> n > 2; -B b = f(true); +let b:B, b = f(true); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -87,8 +87,8 @@ B b = f(true); { std::string_view data = R"( let f : N -> B, n -> n > 2; -N n = 3; -B b = f(n); +let n:N, n = 3; +let b:B, b = f(n); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", true); } @@ -97,7 +97,7 @@ B b = f(n); { std::string_view data = R"( let f : N -> B, (n) -> (n > 2); -B b = f(2); +let b:B, b = f(2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -109,7 +109,7 @@ B b = f(2); { std::string_view data = R"( let f : Z -> B, z -> z-3 >= 0; -B b = f(true); +let b:B, b = f(true); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -118,8 +118,8 @@ B b = f(true); { std::string_view data = R"( let f : Z -> B, z -> z-3 >= 0; -N n = 3; -B b = f(n); +let n:N, n = 3; +let b:B, b = f(n); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", true); } @@ -128,7 +128,7 @@ B b = f(n); { std::string_view data = R"( let f : Z -> B, z -> (z-3 >= 0); -B b = f(2); +let b:B, b = f(2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -140,7 +140,7 @@ B b = f(2); { std::string_view data = R"( let f : R -> B, x -> x*x < 4; -B b = f(true); +let b:B, b = f(true); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", true); } @@ -149,8 +149,8 @@ B b = f(true); { std::string_view data = R"( let f : R -> B, x -> x*x < 4; -N n = 3; -B b = f(n); +let n:N, n = 3; +let b:B, b = f(n); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -159,7 +159,7 @@ B b = f(n); { std::string_view data = R"( let f : R -> B, x -> x*x < 4; -B b = f(-2); +let b:B, b = f(-2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", false); } @@ -168,7 +168,7 @@ B b = f(-2); { std::string_view data = R"( let f : R -> B, x -> x*x < 4; -B b = f(-1.3); +let b:B, b = f(-1.3); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "b", true); } @@ -181,7 +181,7 @@ B b = f(-1.3); { std::string_view data = R"( let f : N*N -> N, (m,n) -> m*n; -N n = f(2,4); +let n:N, n = f(2,4); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "n", 8ul); } @@ -190,7 +190,7 @@ N n = f(2,4); { std::string_view data = R"( let f : Z*Z -> N, (p,q) -> p*q; -N n = f(-2,-4); +let n:N, n = f(-2,-4); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "n", 8ul); } @@ -202,7 +202,7 @@ N n = f(-2,-4); { std::string_view data = R"( let f : N*N -> Z, (m,n) -> m*n; -Z z = f(2,4); +let z:Z, z = f(2,4); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "z", 8l); } @@ -211,7 +211,7 @@ Z z = f(2,4); { std::string_view data = R"( let f : Z*Z -> Z, (p,q) -> p*q; -Z z = f(-2,4); +let z:Z, z = f(-2,4); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "z", -8l); } @@ -220,7 +220,7 @@ Z z = f(-2,4); { std::string_view data = R"( let f : R*Z -> R, (p,q) -> p*q; -R x = f(-0.5,8); +let x:R, x = f(-0.5,8); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{-0.5 * 8l}); } @@ -232,7 +232,7 @@ R x = f(-0.5,8); { std::string_view data = R"( let f : N*R -> R, (n,x) -> n*x; -R r = f(2,4.2); +let r:R, r = f(2,4.2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "r", double{2ul * 4.2}); } @@ -241,7 +241,7 @@ R r = f(2,4.2); { std::string_view data = R"( let f : R -> R, x -> x*x-1; -R r = f(4); +let r:R, r = f(4); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "r", double{15}); } @@ -249,9 +249,9 @@ R r = f(4); SECTION("from R using global variable") { std::string_view data = R"( -R x0 = 3; +let x0:R, x0 = 3; let f : R -> R, x -> x-x0; -R x = f(7.3); +let x:R, x = f(7.3); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{7.3 - 3}); } @@ -263,7 +263,7 @@ R x = f(7.3); { std::string_view data = R"( let f : string -> string, s -> s+"bar"; -string s = f("foo"); +let s:string, s = f("foo"); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "s", std::string{"foobar"}); } @@ -272,7 +272,7 @@ string s = f("foo"); { std::string_view data = R"( let f : string*N -> string, (s,n) -> s+n; -string s = f("id", 2); +let s:string, s = f("id", 2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "s", std::string{"id2"}); } @@ -281,7 +281,7 @@ string s = f("id", 2); { std::string_view data = R"( let f : string*N -> string, (s,n) -> s+n; -string s = f(3, 2); +let s:string, s = f(3, 2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "s", std::string{"32"}); } @@ -290,7 +290,7 @@ string s = f(3, 2); { std::string_view data = R"( let f : N -> string, n -> n; -string s = f(3); +let s:string, s = f(3); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "s", std::string{"3"}); } @@ -303,7 +303,7 @@ string s = f(3); { std::string_view data = R"( let f : N -> N*R, n -> (2*n, 0.3*n); -N*R (n,x) = f(2); +let (n,x):N*R, (n,x) = f(2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "n", uint64_t{4}); CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{0.3 * int64_t{2}}); @@ -313,7 +313,7 @@ N*R (n,x) = f(2); { std::string_view data = R"( let f : N -> N*R*B, n -> (2*n, 0.3*n, 1.4*n>n*n); -N*R*B (n,x,b) = f(2); +let (n,x,b):N*R*B, (n,x,b) = f(2); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "n", uint64_t{4}); CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{0.3 * int64_t{2}}); @@ -327,7 +327,7 @@ N*R*B (n,x,b) = f(2); { std::string_view data = R"( let f : N -> N, n -> 2*n; -R*N (x,n) = (2.3, f(3)); +let (x,n):R*N, (x,n) = (2.3, f(3)); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "n", uint64_t{6}); CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{2.3}); @@ -339,7 +339,7 @@ R*N (x,n) = (2.3, f(3)); import math; let f : N -> N*R, n -> (2*n, 0.3*n); -N*R*R (n,x,s) = (f(2), sin(1)); +let (n,x,s):N*R*R, (n,x,s) = (f(2), sin(1)); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "n", uint64_t{4}); CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{0.3 * int64_t{2}}); @@ -353,9 +353,9 @@ N*R*R (n,x,s) = (f(2), sin(1)); { std::string_view data = R"( let f : R^1 -> R^1, x -> 2*x; -R^1 x = 3; +let x:R^1, x = 3; -R^1 fx = f(x); +let fx:R^1, fx = f(x); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "fx", (2 * TinyVector<1>{3})); } @@ -364,9 +364,9 @@ R^1 fx = f(x); { std::string_view data = R"( let f : R^2 -> R^2, x -> 2*x; -R^2 x = (3, 7); +let x:R^2, x = (3, 7); -R^2 fx = f(x); +let fx:R^2, fx = f(x); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "fx", (2 * TinyVector<2>{3, 7})); } @@ -375,9 +375,9 @@ R^2 fx = f(x); { std::string_view data = R"( let f : R^3 -> R^3, x -> 2*x; -R^3 x = (2, 4, 7); +let x:R^3, x = (2, 4, 7); -R^3 fx = f(x); +let fx:R^3, fx = f(x); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "fx", (2 * TinyVector<3>{2, 4, 7})); } @@ -386,9 +386,9 @@ R^3 fx = f(x); { std::string_view data = R"( let f : R -> R^1, x -> 2*x; -R x = 3; +let x:R, x = 3; -R^1 fx = f(x); +let fx:R^1, fx = f(x); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "fx", (2 * TinyVector<1>{3})); } @@ -397,7 +397,7 @@ R^1 fx = f(x); { std::string_view data = R"( let f : R*R -> R^2, (x,y) -> (2*x, 3*y); -R^2 fx = f(2, 3); +let fx:R^2, fx = f(2, 3); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "fx", (TinyVector<2>{2 * 2, 3 * 3})); } @@ -407,7 +407,7 @@ R^2 fx = f(2, 3); std::string_view data = R"( let f : R -> R^3, x -> (x, 2*x, x*x); -R^3 fx = f(3); +let fx:R^3, fx = f(3); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "fx", (TinyVector<3>{3, 6, 9})); } @@ -420,7 +420,7 @@ R^3 fx = f(3); std::string_view data = R"( let f : R -> R*R^1*R^2*R^3, x -> (x+1, 2*x, (x-2, x+2), (1, 0.5*x, x*x)); -R*R^1*R^2*R^3 (x, x1, x2, x3) = f(3); +let (x, x1, x2, x3):R*R^1*R^2*R^3, (x, x1, x2, x3) = f(3); )"; const double x = 3; @@ -436,9 +436,9 @@ R*R^1*R^2*R^3 (x, x1, x2, x3) = f(3); let f : R^2*R^3 -> R*R^1*R^2*R^3, (x2, x3) -> (x2[0]+x3[2], x3[1], (x3[0], x2[1]), (x3[0], x3[0]+x2[1], x3[2])); -R^2 y2 = (2.3, 4.1); -R^3 y3 = (1.2, 1.3, 2.1); -R*R^1*R^2*R^3 (x, x1, x2, x3) = f(y2, y3); +let y2:R^2, y2 = (2.3, 4.1); +let y3:R^3, y3 = (1.2, 1.3, 2.1); +let(x, x1, x2, x3) : R*R^1*R^2*R^3, (x, x1, x2, x3) = f(y2, y3); )"; TinyVector<2> y2{2.3, 4.1}; @@ -455,8 +455,8 @@ R*R^1*R^2*R^3 (x, x1, x2, x3) = f(y2, y3); let f : R^2*R^3 -> R*R^1*R^2*R^3, (x2, x3) -> (x2[0]+x3[2], x3[1], (x3[0], x2[1]), (x3[0], x3[0]+x2[1], x3[2])); -R^2 y2 = (2.3, 4.1); -R*R^1*R^2*R^3 (x, x1, x2, x3) = f(y2, 0); +let y2:R^2, y2 = (2.3, 4.1); +let (x, x1, x2, x3) : R*R^1*R^2*R^3, (x, x1, x2, x3) = f(y2, 0); )"; TinyVector<2> y2{2.3, 4.1}; @@ -473,8 +473,8 @@ R*R^1*R^2*R^3 (x, x1, x2, x3) = f(y2, 0); let f : R^2*R^3 -> R*R^1*R^2*R^3, (x2, x3) -> (x2[0]+x3[2], x3[1], 0, 0); -R^2 y2 = (2.3, 4.1); -R*R^1*R^2*R^3 (x, x1, x2, x3) = f(y2, 0); +let y2:R^2, y2 = (2.3, 4.1); +let (x, x1, x2, x3):R*R^1*R^2*R^3, (x, x1, x2, x3) = f(y2, 0); )"; TinyVector<2> y2{2.3, 4.1}; @@ -488,13 +488,13 @@ R*R^1*R^2*R^3 (x, x1, x2, x3) = f(y2, 0); SECTION("function composition") { - SECTION("R -> R -> R") + SECTION("N -> N -> R") { std::string_view data = R"( let f : N -> N, n -> 2*n; let g : N -> R, n -> 2*n+0.5; -R x = g(f(3)); +let x:R, x = g(f(3)); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{(2 * 3) * 2 + 0.5}); } @@ -506,7 +506,7 @@ import math; let f : N -> N, n -> 2*n; let g : N -> R, n -> sin(2*n)+0.5; -R x = g(f(3)); +let x:R, x = g(f(3)); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{std::sin((2 * 3) * 2) + 0.5}); } @@ -517,7 +517,7 @@ R x = g(f(3)); import math; let f : R -> R*R, x -> (x+1, x*2); -R x = pow(f(2)); +let x:R, x = pow(f(2)); )"; CHECK_FUNCTION_EVALUATION_RESULT(data, "x", double{std::pow(2. + 1, 2. * 2)}); } @@ -529,7 +529,7 @@ import math; let f : R -> R^2, x -> (x+1, x*2); let g : R^2 -> R, x -> x[0] + x[1]; -R x = g(f(3)); +let x:R, x = g(f(3)); )"; double x0 = 3; @@ -543,7 +543,7 @@ import math; let f : R -> R^2*R^3, x -> ((x+1, x*2), (6*x, 7-x, x/2.3)); let g : R^2*R^3 -> R, (x, y) -> x[0]*x[1] + y[0]*y[1]-y[2]; -R x = g(f(3)); +let x:R, x = g(f(3)); )"; double x0 = 3; diff --git a/tests/test_IfProcessor.cpp b/tests/test_IfProcessor.cpp index bc1c57e9b4c9b023e10331eeb9668433ade75adb..52e70c6d994e3d4b384897df7e60c0048110e149 100644 --- a/tests/test_IfProcessor.cpp +++ b/tests/test_IfProcessor.cpp @@ -63,7 +63,7 @@ TEST_CASE("IfProcessor", "[language]") SECTION("simple if(true)") { std::string_view data = R"( -N i = 0; +let i:N, i = 0; if(true) { i = 1; } @@ -74,7 +74,7 @@ if(true) { SECTION("simple if(false)") { std::string_view data = R"( -N i = 0; +let i:N, i = 0; if(false) { i = 1; } @@ -85,7 +85,7 @@ if(false) { SECTION("simple if(true)else") { std::string_view data = R"( -N i = 0; +let i:N, i = 0; if(true) { i = 1; } else { @@ -98,7 +98,7 @@ if(true) { SECTION("simple if(false)") { std::string_view data = R"( -N i = 0; +let i:N, i = 0; if(false) { i = 1; } else { diff --git a/tests/test_IncDecExpressionProcessor.cpp b/tests/test_IncDecExpressionProcessor.cpp index 2aee0a6b52f7b43bc2e233ba6d1591f8d7f7e163..d53686634e7f89bbe8ac084aa2754bab4ef81a34 100644 --- a/tests/test_IncDecExpressionProcessor.cpp +++ b/tests/test_IncDecExpressionProcessor.cpp @@ -54,20 +54,20 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") { SECTION("N") { - CHECK_INC_DEC_RESULT(R"(N n = 2; ++n;)", "n", 3ul); - CHECK_INC_DEC_RESULT(R"(N n = 2; N m = ++n;)", "m", 3ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; ++n;)", "n", 3ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; let m:N, m = ++n;)", "m", 3ul); } SECTION("Z") { - CHECK_INC_DEC_RESULT(R"(Z z = 2; ++z;)", "z", 3l); - CHECK_INC_DEC_RESULT(R"(Z z = 2; Z p = ++z;)", "p", 3l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; ++z;)", "z", 3l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = ++z;)", "p", 3l); } SECTION("R") { - CHECK_INC_DEC_RESULT(R"(R r = 2; ++r;)", "r", 3.); - CHECK_INC_DEC_RESULT(R"(R r = 2; R s = ++r;)", "s", 3.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; ++r;)", "r", 3.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = ++r;)", "s", 3.); } } @@ -75,20 +75,20 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") { SECTION("N") { - CHECK_INC_DEC_RESULT(R"(N n = 2; --n;)", "n", 1ul); - CHECK_INC_DEC_RESULT(R"(N n = 2; N m = --n;)", "m", 1ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; --n;)", "n", 1ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; let m:N, m = --n;)", "m", 1ul); } SECTION("Z") { - CHECK_INC_DEC_RESULT(R"(Z z = 2; --z;)", "z", 1l); - CHECK_INC_DEC_RESULT(R"(Z z = 2; Z p = --z;)", "p", 1l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; --z;)", "z", 1l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = --z;)", "p", 1l); } SECTION("R") { - CHECK_INC_DEC_RESULT(R"(R r = 2; --r;)", "r", 1.); - CHECK_INC_DEC_RESULT(R"(R r = 2; R s = --r;)", "s", 1.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; --r;)", "r", 1.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = --r;)", "s", 1.); } } @@ -96,20 +96,20 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") { SECTION("N") { - CHECK_INC_DEC_RESULT(R"(N n = 2; n++;)", "n", 3ul); - CHECK_INC_DEC_RESULT(R"(N n = 2; N m = n++;)", "m", 2ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; n++;)", "n", 3ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; let m:N, m = n++;)", "m", 2ul); } SECTION("Z") { - CHECK_INC_DEC_RESULT(R"(Z z = 2; z++;)", "z", 3l); - CHECK_INC_DEC_RESULT(R"(Z z = 2; Z p = z++;)", "p", 2l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; z++;)", "z", 3l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = z++;)", "p", 2l); } SECTION("R") { - CHECK_INC_DEC_RESULT(R"(R r = 2; r++;)", "r", 3.); - CHECK_INC_DEC_RESULT(R"(R r = 2; R s = r++;)", "s", 2.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; r++;)", "r", 3.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = r++;)", "s", 2.); } } @@ -117,20 +117,20 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") { SECTION("N") { - CHECK_INC_DEC_RESULT(R"(N n = 2; n--;)", "n", 1ul); - CHECK_INC_DEC_RESULT(R"(N n = 2; N m = n--;)", "m", 2ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; n--;)", "n", 1ul); + CHECK_INC_DEC_RESULT(R"(let n:N, n = 2; let m:N, m = n--;)", "m", 2ul); } SECTION("Z") { - CHECK_INC_DEC_RESULT(R"(Z z = 2; z--;)", "z", 1l); - CHECK_INC_DEC_RESULT(R"(Z z = 2; Z p = z--;)", "p", 2l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; z--;)", "z", 1l); + CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = z--;)", "p", 2l); } SECTION("R") { - CHECK_INC_DEC_RESULT(R"(R r = 2; r--;)", "r", 1.); - CHECK_INC_DEC_RESULT(R"(R r = 2; R s = r--;)", "s", 2.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; r--;)", "r", 1.); + CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = r--;)", "s", 2.); } } } diff --git a/tests/test_ListAffectationProcessor.cpp b/tests/test_ListAffectationProcessor.cpp index b4397fdfbbff26844bf8584d7c08aadfcb7e37b2..572457aa4fd787f8f2bad898cfb7d3609f1f9b8f 100644 --- a/tests/test_ListAffectationProcessor.cpp +++ b/tests/test_ListAffectationProcessor.cpp @@ -83,43 +83,48 @@ TEST_CASE("ListAffectationProcessor", "[language]") { SECTION("R*R^2*string") { - CHECK_AFFECTATION_RESULT(R"(R*R^2*string (x,u,s) = (1.2, (2,3), "foo");)", "x", double{1.2}); - CHECK_AFFECTATION_RESULT(R"(R*R^2*string (x,u,s) = (1.2, (2,3), "foo");)", "u", (TinyVector<2>{2, 3})); - CHECK_AFFECTATION_RESULT(R"(R*R^2*string (x,u,s) = (1.2, (2,3), "foo");)", "s", std::string{"foo"}); + CHECK_AFFECTATION_RESULT(R"(let (x,u,s): R*R^2*string, (x,u,s) = (1.2, (2,3), "foo");)", "x", double{1.2}); + CHECK_AFFECTATION_RESULT(R"(let (x,u,s): R*R^2*string, (x,u,s) = (1.2, (2,3), "foo");)", "u", + (TinyVector<2>{2, 3})); + CHECK_AFFECTATION_RESULT(R"(let (x,u,s): R*R^2*string, (x,u,s) = (1.2, (2,3), "foo");)", "s", std::string{"foo"}); } SECTION("compound with string conversion") { - CHECK_AFFECTATION_RESULT(R"(R z = 3; R*R^2*string (x,u,s) = (1.2, (2,3), z);)", "s", std::to_string(double{3})); + CHECK_AFFECTATION_RESULT(R"(let z:R, z = 3; let (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), z);)", "s", + std::to_string(double{3})); { std::ostringstream os; os << TinyVector<1>{7} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^1 v = 7; R*R^2*string (x,u,s) = (1.2, (2,3), v);)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let v:R^1, v = 7; let (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), v);)", "s", + os.str()); } { std::ostringstream os; os << TinyVector<2>{6, 3} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^2 v = (6,3); R*R^2*string (x,u,s) = (1.2, (2,3), v);)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let v: R^2, v = (6,3); let (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), v);)", "s", + os.str()); } { std::ostringstream os; os << TinyVector<3>{1, 2, 3} << std::ends; - CHECK_AFFECTATION_RESULT(R"(R^3 v = (1,2,3); R*R^2*string (x,u,s) = (1.2, (2,3), v);)", "s", os.str()); + CHECK_AFFECTATION_RESULT(R"(let v:R^3, v = (1,2,3); let (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), v);)", "s", + os.str()); } } SECTION("compound R^d from '0'") { - CHECK_AFFECTATION_RESULT(R"(R^3*R^2*R^1 (x,y,z) = (0,0,0);)", "x", (TinyVector<3>{zero})); - CHECK_AFFECTATION_RESULT(R"(R^3*R^2*R^1 (x,y,z) = (0,0,0);)", "y", (TinyVector<2>{zero})); - CHECK_AFFECTATION_RESULT(R"(R^3*R^2*R^1 (x,y,z) = (0,0,0);)", "z", (TinyVector<1>{zero})); + CHECK_AFFECTATION_RESULT(R"(let (x,y,z):R^3*R^2*R^1, (x,y,z) = (0,0,0);)", "x", (TinyVector<3>{zero})); + CHECK_AFFECTATION_RESULT(R"(let (x,y,z):R^3*R^2*R^1, (x,y,z) = (0,0,0);)", "y", (TinyVector<2>{zero})); + CHECK_AFFECTATION_RESULT(R"(let (x,y,z):R^3*R^2*R^1, (x,y,z) = (0,0,0);)", "z", (TinyVector<1>{zero})); } SECTION("compound with subscript values") { - CHECK_AFFECTATION_RESULT(R"(R^3 x; (x[0], x[2], x[1]) = (4, 6, 5);)", "x", (TinyVector<3>{4, 5, 6})); - CHECK_AFFECTATION_RESULT(R"(R^2 x; (x[1], x[0]) = (3, 6);)", "x", (TinyVector<2>{6, 3})); - CHECK_AFFECTATION_RESULT(R"(R^1 x; R y; (y, x[0]) = (4, 2.3);)", "x", (TinyVector<1>{2.3})); + CHECK_AFFECTATION_RESULT(R"(let x:R^3; (x[0], x[2], x[1]) = (4, 6, 5);)", "x", (TinyVector<3>{4, 5, 6})); + CHECK_AFFECTATION_RESULT(R"(let x:R^2; (x[1], x[0]) = (3, 6);)", "x", (TinyVector<2>{6, 3})); + CHECK_AFFECTATION_RESULT(R"(let x:R^1; let y:R; (y, x[0]) = (4, 2.3);)", "x", (TinyVector<1>{2.3})); } } } diff --git a/tests/test_NameProcessor.cpp b/tests/test_NameProcessor.cpp index b6db88102dfa5cfccc00c9c63e8267de36bcc464..026ccc86f98b0091c18b1de31746e0bfa0a99adb 100644 --- a/tests/test_NameProcessor.cpp +++ b/tests/test_NameProcessor.cpp @@ -25,8 +25,8 @@ TEST_CASE("NameProcessor", "[language]") rang::setControlMode(rang::control::Off); std::string_view data = R"( -N n=3; -N m = n; +let n:N, n=3; +let m:N, m = n; n = 2; )"; diff --git a/tests/test_TupleToVectorProcessor.cpp b/tests/test_TupleToVectorProcessor.cpp index 1ef3e6ad9f853feeb1f64015ef39fe07e6db9625..3a6cad0a14fe01b2586c48fadda85dd1d45833a3 100644 --- a/tests/test_TupleToVectorProcessor.cpp +++ b/tests/test_TupleToVectorProcessor.cpp @@ -84,7 +84,7 @@ TEST_CASE("TupleToVectorProcessor", "[language]") { std::string_view data = R"( let f: R*R*R->R^3, (x,y,z) -> (x,y,z); -R^3 x = f(1,2,3); +let x:R^3, x = f(1,2,3); )"; CHECK_EVALUATION_RESULT(data, "x", (TinyVector<3>{1, 2, 3})); } @@ -93,8 +93,8 @@ R^3 x = f(1,2,3); { std::string_view data = R"( let f: R^3->R^2, x -> (x[2],x[1]); -R^3 x = (1,2,3); -R^2 y = f(x); +let x:R^3, x = (1,2,3); +let y:R^2, y = f(x); )"; CHECK_EVALUATION_RESULT(data, "y", (TinyVector<2>{3, 2})); } diff --git a/tests/test_UnaryExpressionProcessor.cpp b/tests/test_UnaryExpressionProcessor.cpp index da5296b43a764784b8fc7a5b49a2a0f9b7ee35d4..f3cc152abcf91e570056d4442fd9b6b735d4160f 100644 --- a/tests/test_UnaryExpressionProcessor.cpp +++ b/tests/test_UnaryExpressionProcessor.cpp @@ -62,21 +62,21 @@ TEST_CASE("UnaryExpressionProcessor", "[language]") { SECTION("unary minus") { - CHECK_UNARY_EXPRESSION_RESULT(R"(N n = 2; Z z = -n;)", "z", -2l); - CHECK_UNARY_EXPRESSION_RESULT(R"(Z p = 2; Z q = -p;)", "q", -2l); - CHECK_UNARY_EXPRESSION_RESULT(R"(R r = 2; r = -r;)", "r", -2.); + CHECK_UNARY_EXPRESSION_RESULT(R"(let n:N, n = 2; let z:Z, z = -n;)", "z", -2l); + CHECK_UNARY_EXPRESSION_RESULT(R"(let p:Z, p = 2; let q:Z, q = -p;)", "q", -2l); + CHECK_UNARY_EXPRESSION_RESULT(R"(let r:R, r = 2; r = -r;)", "r", -2.); } SECTION("unary not") { - CHECK_UNARY_EXPRESSION_RESULT(R"(B b = false; b = not b;)", "b", true); - CHECK_UNARY_EXPRESSION_RESULT(R"(B b = true; b = not b;)", "b", false); + CHECK_UNARY_EXPRESSION_RESULT(R"(let b:B, b = false; b = not b;)", "b", true); + CHECK_UNARY_EXPRESSION_RESULT(R"(let b:B, b = true; b = not b;)", "b", false); SECTION("errors") { SECTION("bad implicit conversions") { - CHECK_UNARY_EXPRESSION_THROWS_WITH(R"(N n = 0; not n;)", "invalid implicit conversion: N -> B"); + CHECK_UNARY_EXPRESSION_THROWS_WITH(R"(let n:N, n = 0; not n;)", "invalid implicit conversion: N -> B"); CHECK_UNARY_EXPRESSION_THROWS_WITH(R"(not 1;)", "invalid implicit conversion: Z -> B"); CHECK_UNARY_EXPRESSION_THROWS_WITH(R"(not 1.3;)", "invalid implicit conversion: R -> B"); CHECK_UNARY_EXPRESSION_THROWS_WITH(R"(not "foo";)", "invalid implicit conversion: string -> B"); diff --git a/tests/test_WhileProcessor.cpp b/tests/test_WhileProcessor.cpp index 4f4974868c7c549d1eadfbb85b4a69e1a4d5294d..e23051e5ac6529eafae94066ca92df3187fc5a29 100644 --- a/tests/test_WhileProcessor.cpp +++ b/tests/test_WhileProcessor.cpp @@ -63,8 +63,8 @@ TEST_CASE("WhileProcessor", "[language]") SECTION("simple loop") { std::string_view data = R"( -N i = 3; -N j = 0; +let i:N, i = 3; +let j:N, j = 0; while(i<10) { j++; i += j; @@ -76,8 +76,8 @@ while(i<10) { SECTION("simple with break") { std::string_view data = R"( -N i = 3; -N j = 0; +let i:N, i = 3; +let j:N, j = 0; while(i<10) { j++; if (j==2) break; @@ -90,8 +90,8 @@ while(i<10) { SECTION("simple with continue") { std::string_view data = R"( -N i = 3; -N j = 0; +let i:N, i = 3; +let j:N, j = 0; while(i<10) { j++; if (j<=3) continue;