Website Summary Files Commits Branches @commit @diff @stats
path: root / JSImpl / test / ParserTests.cpp
diff options
context:
space:
mode:
Commit113598bd4636b65720df6af87ea5a94661907c8c (patch)
Author
 martin dobrev <martindobrev0@gmail.com>
2018-11-03 15:01:15 +0200
Committer
 martin dobrev <martindobrev0@gmail.com>
2018-11-03 15:01:15 +0200
Files74c8db4ea2726518ac133dea79b7ad32b6576692 /JSImpl/test/ParserTests.cpp
IPL-113598bd4636b65720df6af87ea5a94661907c8c.tar
IPL-113598bd4636b65720df6af87ea5a94661907c8c.tar.gz
IPL-113598bd4636b65720df6af87ea5a94661907c8c.zip
Parent6c2f7812f65b4a5c60f85297d1bc4f918e32936e (diff)
Add a couple more tests in ParserTests.
1 files changed, 104 insertions, 10 deletions
-rw-r--r--JSImpl/test/ParserTests.cpp114
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));
+ }
+}