From 113598bd4636b65720df6af87ea5a94661907c8c Mon Sep 17 00:00:00 2001 From: martin dobrev Date: Sat, 3 Nov 2018 15:01:15 +0200 Subject: Add a couple more tests in ParserTests. --- JSImpl/test/ParserTests.cpp | 116 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 105 insertions(+), 11 deletions(-) (limited to 'JSImpl/test/ParserTests.cpp') 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 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 tokens; @@ -118,16 +131,97 @@ TEST(Parser, Unary) TEST(Parser, If) { - IPLVector 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 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 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 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 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 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 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 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)); + } +} -- cgit v1.3.1-23-gd82d