diff options
1 files changed, 104 insertions, 10 deletions
| -rw-r--r-- | JSImpl/test/ParserTests.cpp | 114 |
diff --git a/JSImpl/test/ParserTests.cpp b/JSImpl/test/ParserTests.cpp index bacadf5..f1fc6eb 100644 --- a/JSImpl/test/ParserTests.cpp +++ b/JSImpl/test/ParserTests.cpp @@ -39,6 +39,19 @@ TEST(Parser, VariableDeclaration) ASSERT_TRUE(i.ModifyVariable("s") == 0.0); } +TEST(Parser, Assignment) +{ + IPLVector<Token> tokens; + Tokenize("var s = 0; s = 100;", tokens); + + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("s")); + ASSERT_TRUE(i.ModifyVariable("s") == 100); +} + TEST(Parser, VariableDeclarationAdditionOfLiterals) { IPLVector<Token> tokens; @@ -118,16 +131,97 @@ TEST(Parser, Unary) TEST(Parser, If) { - IPLVector<Token> tokens; - Tokenize("var a = 5; var b = 3; if(a == 5){a++; b++;} b++;", tokens); + { + IPLVector<Token> tokens; + Tokenize("var a = 5; var b = 3; if(a == 5){a++; b++;} b++;", tokens); - auto expr = Parse(tokens); - std::ostringstream output; - ASTInterpreter i; - i.Run(expr.get()); - ASSERT_TRUE(i.HasVariable("a")); - ASSERT_TRUE(i.HasVariable("b")); - ASSERT_TRUE(CloseFload(i.ModifyVariable("a"), 6.0)); - ASSERT_TRUE(CloseFload(i.ModifyVariable("b"), 5.0)); + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("a")); + ASSERT_TRUE(i.HasVariable("b")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("a"), 6.0)); + ASSERT_TRUE(CloseFload(i.ModifyVariable("b"), 5.0)); + } + { + IPLVector<Token> tokens; + Tokenize("var a = 5; var b = 3; if(a == 5)a++; b++; b++;", tokens); + + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("a")); + ASSERT_TRUE(i.HasVariable("b")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("a"), 6.0)); + ASSERT_TRUE(CloseFload(i.ModifyVariable("b"), 5.0)); + } + + { + IPLVector<Token> tokens; + Tokenize("var a = 5; var b = 3; if(a != 5)a++; b++; b++;", tokens); + + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("a")); + ASSERT_TRUE(i.HasVariable("b")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("a"), 5.0)); + ASSERT_TRUE(CloseFload(i.ModifyVariable("b"), 5.0)); + } + + { + IPLVector<Token> tokens; + Tokenize("var a = 5; var b = 3; if(a != 5){a++;} else { b++;}b++;", tokens); + + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("a")); + ASSERT_TRUE(i.HasVariable("b")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("a"), 5.0)); + ASSERT_TRUE(CloseFload(i.ModifyVariable("b"), 5.0)); + } + + { + IPLVector<Token> tokens; + Tokenize("var a = 5; var b = 3; if(a == 5){a++;} else { b++;}b++;", tokens); + + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("a")); + ASSERT_TRUE(i.HasVariable("b")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("a"), 6.0)); + ASSERT_TRUE(CloseFload(i.ModifyVariable("b"), 4.0)); + } } +TEST(Parser, For) +{ + { + IPLVector<Token> tokens; + Tokenize("var i = 0; for (var j = 0; j < 10; j++) { i = i + j; }", tokens); + + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("i")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("i"), 45.0)); + } + { + IPLVector<Token> tokens; + Tokenize("var i = 0; for (var j = 0; j < 10; j++) i = i + j;", tokens); + auto expr = Parse(tokens); + std::ostringstream output; + ASTInterpreter i; + i.Run(expr.get()); + ASSERT_TRUE(i.HasVariable("i")); + ASSERT_TRUE(CloseFload(i.ModifyVariable("i"), 45.0)); + } +} |
