diff --git a/tests/TestBinaryOpNode.cc b/tests/TestBinaryOpNode.cc index c789d3a2b8a685068943cd437caeb6c5dc34d6d7..0bbfd3019ea66d3ae375f0d0a3a23b0e8d2b975a 100644 --- a/tests/TestBinaryOpNode.cc +++ b/tests/TestBinaryOpNode.cc @@ -1,5 +1,5 @@ -#include "ast/BinaryOpNode.h" -#include "ast/LiteralNode.h" +#include "ast/expression/BinaryOpNode.h" +#include "ast/expression/LiteralNode.h" #include "utils/Common.h" #include <gtest/gtest.h> @@ -27,9 +27,10 @@ TEST_F(TestBinaryOpNode, Construction) LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 3); - BinaryOpNode node(left, BinaryOp::PLUS, right); + Token op(loc, "+", TokenType::PLUS); + BinaryOpNode node(left, op, right); - ASSERT_EQ(node.get_op(), BinaryOp::PLUS); + ASSERT_EQ(node.get_op().get_type(), TokenType::PLUS); ASSERT_EQ(node.get_left(), left); ASSERT_EQ(node.get_right(), right); } @@ -40,7 +41,8 @@ TEST_F(TestBinaryOpNode, ArithmeticOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 3); - BinaryOpNode node(left, BinaryOp::PLUS, right); + Token op(loc, "+", TokenType::PLUS); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<int>()); @@ -51,7 +53,8 @@ TEST_F(TestBinaryOpNode, ArithmeticOperations) { LiteralNode* left = new LiteralNode(loc, 10); LiteralNode* right = new LiteralNode(loc, 4); - BinaryOpNode node(left, BinaryOp::MINUS, right); + Token op(loc, "-", TokenType::MINUS); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<int>()); @@ -62,7 +65,8 @@ TEST_F(TestBinaryOpNode, ArithmeticOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 6); - BinaryOpNode node(left, BinaryOp::MULTIPLY, right); + Token op(loc, "*", TokenType::MULTIPLY); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<int>()); @@ -73,7 +77,8 @@ TEST_F(TestBinaryOpNode, ArithmeticOperations) { LiteralNode* left = new LiteralNode(loc, 20); LiteralNode* right = new LiteralNode(loc, 4); - BinaryOpNode node(left, BinaryOp::DIVIDE, right); + Token op(loc, "/", TokenType::DIVIDE); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<int>()); @@ -84,7 +89,8 @@ TEST_F(TestBinaryOpNode, ArithmeticOperations) { LiteralNode* left = new LiteralNode(loc, 17); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::MODULO, right); + Token op(loc, "%", TokenType::MODULO); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<int>()); @@ -95,7 +101,8 @@ TEST_F(TestBinaryOpNode, ArithmeticOperations) { LiteralNode* left = new LiteralNode(loc, 2); LiteralNode* right = new LiteralNode(loc, 3); - BinaryOpNode node(left, BinaryOp::POWER, right); + Token op(loc, "^", TokenType::POWER); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<int>()); @@ -109,7 +116,8 @@ TEST_F(TestBinaryOpNode, ComparisonOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::EQUAL, right); + Token op(loc, "==", TokenType::EQUAL); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -120,7 +128,8 @@ TEST_F(TestBinaryOpNode, ComparisonOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 3); - BinaryOpNode node(left, BinaryOp::NOT_EQUAL, right); + Token op(loc, "!=", TokenType::NOT_EQUAL); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -131,7 +140,8 @@ TEST_F(TestBinaryOpNode, ComparisonOperations) { LiteralNode* left = new LiteralNode(loc, 3); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::LESS, right); + Token op(loc, "<", TokenType::LESS); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -142,7 +152,8 @@ TEST_F(TestBinaryOpNode, ComparisonOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::LESS_EQUAL, right); + Token op(loc, "<=", TokenType::LESS_EQUAL); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -153,7 +164,8 @@ TEST_F(TestBinaryOpNode, ComparisonOperations) { LiteralNode* left = new LiteralNode(loc, 8); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::GREATER, right); + Token op(loc, ">", TokenType::GREATER); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -164,7 +176,8 @@ TEST_F(TestBinaryOpNode, ComparisonOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::GREATER_EQUAL, right); + Token op(loc, ">=", TokenType::GREATER_EQUAL); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -178,7 +191,8 @@ TEST_F(TestBinaryOpNode, LogicalOperations) { LiteralNode* left = new LiteralNode(loc, true); LiteralNode* right = new LiteralNode(loc, true); - BinaryOpNode node(left, BinaryOp::AND, right); + Token op(loc, "&&", TokenType::AND); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -189,7 +203,8 @@ TEST_F(TestBinaryOpNode, LogicalOperations) { LiteralNode* left = new LiteralNode(loc, false); LiteralNode* right = new LiteralNode(loc, true); - BinaryOpNode node(left, BinaryOp::OR, right); + Token op(loc, "||", TokenType::OR); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<bool>()); @@ -203,7 +218,8 @@ TEST_F(TestBinaryOpNode, MixedTypeOperations) { LiteralNode* left = new LiteralNode(loc, 5); LiteralNode* right = new LiteralNode(loc, 3.5); - BinaryOpNode node(left, BinaryOp::PLUS, right); + Token op(loc, "+", TokenType::PLUS); + BinaryOpNode node(left, op, right); NodeValue result = node.get_value(); ASSERT_TRUE(result.is_a<double>()); @@ -217,7 +233,8 @@ TEST_F(TestBinaryOpNode, ErrorCases) { LiteralNode* left = new LiteralNode(loc, 10); LiteralNode* right = new LiteralNode(loc, 0); - BinaryOpNode node(left, BinaryOp::DIVIDE, right); + Token op(loc, "/", TokenType::DIVIDE); + BinaryOpNode node(left, op, right); ASSERT_THROW(node.get_value(), RuntimeError); } @@ -226,7 +243,8 @@ TEST_F(TestBinaryOpNode, ErrorCases) { LiteralNode* left = new LiteralNode(loc, String("hello")); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::MODULO, right); + Token op(loc, "%", TokenType::MODULO); + BinaryOpNode node(left, op, right); ASSERT_THROW(node.get_value(), TypeError); } @@ -235,7 +253,8 @@ TEST_F(TestBinaryOpNode, ErrorCases) { LiteralNode* left = new LiteralNode(loc, String("hello")); LiteralNode* right = new LiteralNode(loc, 123); - BinaryOpNode node(left, BinaryOp::PLUS, right); + Token op(loc, "+", TokenType::PLUS); + BinaryOpNode node(left, op, right); ASSERT_THROW(node.get_value(), TypeError); } @@ -245,7 +264,8 @@ TEST_F(TestBinaryOpNode, StringRepresentation) { LiteralNode* left = new LiteralNode(loc, 10); LiteralNode* right = new LiteralNode(loc, 5); - BinaryOpNode node(left, BinaryOp::PLUS, right); + Token op(loc, "+", TokenType::PLUS); + BinaryOpNode node(left, op, right); ASSERT_EQ(node.to_s(), "(10 + 5)"); } @@ -254,7 +274,8 @@ TEST_F(TestBinaryOpNode, Evaluate) { LiteralNode* left = new LiteralNode(loc, 7); LiteralNode* right = new LiteralNode(loc, 3); - BinaryOpNode node(left, BinaryOp::MINUS, right); + Token op(loc, "-", TokenType::MINUS); + BinaryOpNode node(left, op, right); Node* result = node.evaluate(); ASSERT_NE(result, nullptr); @@ -272,8 +293,11 @@ TEST_F(TestBinaryOpNode, NestedOperations) LiteralNode* three = new LiteralNode(loc, 3); LiteralNode* two = new LiteralNode(loc, 2); - BinaryOpNode* addition = new BinaryOpNode(five, BinaryOp::PLUS, three); - BinaryOpNode multiplication(addition, BinaryOp::MULTIPLY, two); + Token plus_op(loc, "+", TokenType::PLUS); + Token mult_op(loc, "*", TokenType::MULTIPLY); + + BinaryOpNode* addition = new BinaryOpNode(five, plus_op, three); + BinaryOpNode multiplication(addition, mult_op, two); NodeValue result = multiplication.get_value(); ASSERT_TRUE(result.is_a<int>()); diff --git a/tests/TestLexer.cc b/tests/TestLexer.cc index e6092ba46d012512d88d7212cb1b5dc95803176a..c9de712b6111a8ecee5e8e8881a2ce1657aced19 100644 --- a/tests/TestLexer.cc +++ b/tests/TestLexer.cc @@ -61,24 +61,6 @@ TEST_F(TestLexer, Lexer) ASSERT_EQ(tokens[4].get_type(), TokenType::SEMICOLON); } -TEST_F(TestLexer, LexerFromFile) -{ - Lexer lexer{read_file("examples/math.funk"), "examples/math.funk"}; - auto tokens = lexer.tokenize(); - - ASSERT_EQ(tokens.size(), 10); - ASSERT_EQ(tokens[0].get_type(), TokenType::L_PAR); - ASSERT_EQ(tokens[1].get_type(), TokenType::NUMB); - ASSERT_EQ(tokens[2].get_type(), TokenType::PLUS); - ASSERT_EQ(tokens[3].get_type(), TokenType::NUMB); - ASSERT_EQ(tokens[4].get_type(), TokenType::R_PAR); - ASSERT_EQ(tokens[5].get_type(), TokenType::DIVIDE); - ASSERT_EQ(tokens[6].get_type(), TokenType::NUMB); - ASSERT_EQ(tokens[7].get_type(), TokenType::MULTIPLY); - ASSERT_EQ(tokens[8].get_type(), TokenType::NUMB); - ASSERT_EQ(tokens[9].get_type(), TokenType::EOF_TOKEN); -} - int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); diff --git a/tests/TestLiteralNode.cc b/tests/TestLiteralNode.cc index cda9b6872e9660a43236172d597775b533ec2234..c4fdc828696c771bf12ac5201384379e2180d9b8 100644 --- a/tests/TestLiteralNode.cc +++ b/tests/TestLiteralNode.cc @@ -1,4 +1,4 @@ -#include "ast/LiteralNode.h" +#include "ast/expression/LiteralNode.h" #include "utils/Common.h" #include <gtest/gtest.h> @@ -81,7 +81,7 @@ TEST_F(TestLiteralNode, String) ASSERT_TRUE(node.get_value().is_a<String>()); ASSERT_FALSE(node.get_value().is_nothing()); ASSERT_EQ(node.get_value().get<String>(), "hello"); - ASSERT_EQ(node.to_s(), "hello"); + ASSERT_EQ(node.to_s(), "\"hello\""); ASSERT_EQ(node.get_value().cast<bool>(), true); ASSERT_THROW(node.get_value().cast<int>(), TypeError); ASSERT_THROW(node.get_value().cast<double>(), TypeError); diff --git a/tests/TestUnaryOpNode.cc b/tests/TestUnaryOpNode.cc index 2be026bb5a6e5dbd48af5df1ea239c799558c62c..9ad2a89e320b8cb4a76bb1db9b5e12aee829bb8d 100644 --- a/tests/TestUnaryOpNode.cc +++ b/tests/TestUnaryOpNode.cc @@ -1,5 +1,5 @@ -#include "ast/LiteralNode.h" -#include "ast/UnaryOpNode.h" +#include "ast/expression/LiteralNode.h" +#include "ast/expression/UnaryOpNode.h" #include "utils/Common.h" #include <gtest/gtest.h> @@ -27,13 +27,16 @@ TEST_F(TestUnaryOpNode, Construction) LiteralNode* intVal = new LiteralNode(loc, 5); LiteralNode* boolVal = new LiteralNode(loc, false); - UnaryOpNode negateNode(UnaryOp::NEGATE, intVal); - UnaryOpNode notNode(UnaryOp::NOT, boolVal); + Token minus_token(loc, "-", TokenType::MINUS); + Token not_token(loc, "not", TokenType::NOT); - ASSERT_EQ(negateNode.get_op(), UnaryOp::NEGATE); + UnaryOpNode negateNode(minus_token, intVal); + UnaryOpNode notNode(not_token, boolVal); + + ASSERT_EQ(negateNode.get_op().get_type(), TokenType::MINUS); ASSERT_EQ(negateNode.get_expr(), intVal); - ASSERT_EQ(notNode.get_op(), UnaryOp::NOT); + ASSERT_EQ(notNode.get_op().get_type(), TokenType::NOT); ASSERT_EQ(notNode.get_expr(), boolVal); } @@ -42,8 +45,11 @@ TEST_F(TestUnaryOpNode, NegateEvaluation) LiteralNode* val1 = new LiteralNode(loc, 5); LiteralNode* val2 = new LiteralNode(loc, 3.14); - UnaryOpNode negateInt(UnaryOp::NEGATE, val1); - UnaryOpNode negateDouble(UnaryOp::NEGATE, val2); + Token minus_token(loc, "-", TokenType::MINUS); + Token not_token(loc, "not", TokenType::NOT); + + UnaryOpNode negateInt(minus_token, val1); + UnaryOpNode negateDouble(minus_token, val2); ASSERT_EQ(negateInt.get_value().get<int>(), -5); ASSERT_DOUBLE_EQ(negateDouble.get_value().get<double>(), -3.14); @@ -54,8 +60,10 @@ TEST_F(TestUnaryOpNode, NotEvaluation) LiteralNode* val1 = new LiteralNode(loc, true); LiteralNode* val2 = new LiteralNode(loc, false); - UnaryOpNode notTrue(UnaryOp::NOT, val1); - UnaryOpNode notFalse(UnaryOp::NOT, val2); + Token not_token(loc, "not", TokenType::NOT); + + UnaryOpNode notTrue(not_token, val1); + UnaryOpNode notFalse(not_token, val2); ASSERT_FALSE(notTrue.get_value().get<bool>()); ASSERT_TRUE(notFalse.get_value().get<bool>()); @@ -66,7 +74,8 @@ TEST_F(TestUnaryOpNode, ErrorCases) // Negate string value { LiteralNode* val = new LiteralNode(loc, String("test")); - UnaryOpNode node(UnaryOp::NEGATE, val); + Token minus_token(loc, "-", TokenType::MINUS); + UnaryOpNode node(minus_token, val); ASSERT_THROW(node.get_value(), TypeError); } @@ -74,7 +83,8 @@ TEST_F(TestUnaryOpNode, ErrorCases) // Negate boolean value, apparently this works in c++ but it's ugly { LiteralNode* val = new LiteralNode(loc, true); - UnaryOpNode node(UnaryOp::NEGATE, val); + Token minus_token(loc, "-", TokenType::MINUS); + UnaryOpNode node(minus_token, val); ASSERT_THROW(node.get_value(), TypeError); } @@ -82,7 +92,8 @@ TEST_F(TestUnaryOpNode, ErrorCases) // Logical NOT on non-boolean value { LiteralNode* val = new LiteralNode(loc, 5); - UnaryOpNode node(UnaryOp::NOT, val); + Token op(loc, "not", TokenType::NOT); + UnaryOpNode node(op, val); ASSERT_THROW(node.get_value(), TypeError); } @@ -91,7 +102,8 @@ TEST_F(TestUnaryOpNode, ErrorCases) TEST_F(TestUnaryOpNode, StringRepresentation) { LiteralNode* val = new LiteralNode(loc, 5); - UnaryOpNode node(UnaryOp::NEGATE, val); + Token minus_token(loc, "-", TokenType::MINUS); + UnaryOpNode node(minus_token, val); ASSERT_EQ(node.to_s(), "(-5)"); }