Skip to content

Commit 941f6ad

Browse files
authored
Create parser_test.py
1 parent c881818 commit 941f6ad

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

parser_test.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import unittest
2+
from tokens import Token, TokenType
3+
from parser import Parser
4+
from nodes import *
5+
6+
class TestParser(unittest.TestCase):
7+
8+
def test_empty(self):
9+
tokens = []
10+
node = Parser(tokens).parse()
11+
self.assertEqual(node, None)
12+
13+
def test_numbers(self):
14+
tokens = [Token(TokenType.NUMBER, 51.2)]
15+
node = Parser(tokens).parse()
16+
self.assertEqual(node, NumberNode(51.2))
17+
18+
def test_individual_operations(self):
19+
tokens = [
20+
Token(TokenType.NUMBER, 27),
21+
Token(TokenType.PLUS),
22+
Token(TokenType.NUMBER, 14),
23+
]
24+
node = Parser(tokens).parse()
25+
self.assertEqual(node, AddNode(NumberNode(27), NumberNode(14)))
26+
27+
28+
tokens = [
29+
Token(TokenType.NUMBER, 27),
30+
Token(TokenType.MINUS),
31+
Token(TokenType.NUMBER, 14),
32+
]
33+
node = Parser(tokens).parse()
34+
self.assertEqual(node, SubtractNode(NumberNode(27), NumberNode(14)))
35+
36+
37+
tokens = [
38+
Token(TokenType.NUMBER, 27),
39+
Token(TokenType.MULTIPLY),
40+
Token(TokenType.NUMBER, 14),
41+
]
42+
node = Parser(tokens).parse()
43+
self.assertEqual(node, MultiplyNode(NumberNode(27), NumberNode(14)))
44+
45+
46+
47+
tokens = [
48+
Token(TokenType.NUMBER, 27),
49+
Token(TokenType.DIVIDE),
50+
Token(TokenType.NUMBER, 14),
51+
]
52+
node = Parser(tokens).parse()
53+
self.assertEqual(node, DivideNode(NumberNode(27), NumberNode(14)))
54+
55+
def test_full_expression(self):
56+
tokens = [
57+
Token(TokenType.NUMBER, 27),
58+
Token(TokenType.PLUS),
59+
60+
Token(TokenType.LPARENT),
61+
Token(TokenType.NUMBER, 43),
62+
Token(TokenType.DIVIDE),
63+
Token(TokenType.NUMBER, 36),
64+
Token(TokenType.MINUS),
65+
Token(TokenType.NUMBER, 48),
66+
Token(TokenType.MILTIPLY),
67+
Token(TokenType.RPARENT),
68+
69+
Token(TokenType.NUMBER, 51)
70+
]
71+
node = Parser(tokens).parse()
72+
self.assertEqual(node, AddNode(
73+
NumberNode(27),
74+
MultiplyNode(
75+
SubtractNode(
76+
NumberNode(43),
77+
NumberNode(36)
78+
),
79+
NumberNode(48)
80+
),
81+
NumberNode(51)
82+
)
83+
)

0 commit comments

Comments
 (0)