diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2019-12-31 20:51:34 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2019-12-31 20:51:34 +0300 |
commit | 6d43c1316cf2e7f438c6ca73a43b63d063d7029f (patch) | |
tree | df08df2bc681acc0e6c2906c3c675088fddb5789 /test | |
parent | parser: refactoring (diff) | |
download | math-server-6d43c1316cf2e7f438c6ca73a43b63d063d7029f.tar.gz math-server-6d43c1316cf2e7f438c6ca73a43b63d063d7029f.zip |
parser: support unary +
Diffstat (limited to '')
-rw-r--r-- | test/unit_tests/parser.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/test/unit_tests/parser.cpp b/test/unit_tests/parser.cpp index 37d9e0a..594e162 100644 --- a/test/unit_tests/parser.cpp +++ b/test/unit_tests/parser.cpp @@ -24,20 +24,31 @@ namespace { namespace exec::valid { const std::vector<std::string_view> input{ + // Constants and unary operators: "1", + "-1", + "--1", + "+--+-2", + // Basic binary operators: " 1 + 2 ", " 2 * 1 + 3 ", " 2 * (1 + 3) ", " 2 * (1 + 3 * (1 - -3)) ", - " -2 * ---- (3 + -100e-1) ", // Looks weird, but also works in e.g. Python + // Looks weird, but also works in e.g. Python: + " -2 * -+--- (3 + -100e-1) ", + // Power operator is right-associative: "2 ^ 3 ^ 3", - "(2 ^ 3) ^ 3", // Power operator is right-associative + "(2 ^ 3) ^ 3", + // Power operator has higher precedence than the unary minus: "(.5 ^ -1) ^ 4", - ".5 ^ -1 ^ 4", // Power operator has higher precedence than the unary minus + ".5 ^ -1 ^ 4", }; const std::vector<double> expected{ 1, + -1, + 1, + -2, 3, 5, 8, @@ -55,14 +66,16 @@ namespace exec::invalid { const std::vector<std::string_view> input{ "", + // Missing operand: " 1 + ", + // Unmatched parentheses: " 2 * (1 + 3 ", " 2 * (1 + 3) )", }; const std::vector<std::string> error_msg{ - "server error: parser error: expected '-', '(' or a number", - "server error: parser error: expected '-', '(' or a number", + "server error: parser error: expected '-', '+', '(' or a number", + "server error: parser error: expected '-', '+', '(' or a number", "server error: parser error: missing closing ')'", "server error: parser error: expected a binary operator", }; |