-
Notifications
You must be signed in to change notification settings - Fork 0
/
lexer_test.py
50 lines (49 loc) · 1.96 KB
/
lexer_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import unittest
import tokens
import lexer
class TestLexer(unittest.TestCase):
def test_empty(self):
toks = list(lexer.Lexer("").make_token())
self.assertEqual(toks, [])
def test_empty(self):
toks = list(lexer.Lexer("\t\n ").make_token())
self.assertEqual(toks, [
tokens.Token(tokens.TokenType.NEWLINE)
])
def test_numbers(self):
toks = list(lexer.Lexer("1245.4 .234 1234. .").make_token())
self.assertEqual(toks, [
tokens.Token(tokens.TokenType.NUMBER, 1245.4),
tokens.Token(tokens.TokenType.NUMBER, .234),
tokens.Token(tokens.TokenType.NUMBER, 1234.),
tokens.Token(tokens.TokenType.NUMBER, 000.000),
])
def test_operators(self):
toks = list(lexer.Lexer("+-*/").make_token())
self.assertEqual(toks, [
tokens.Token(tokens.TokenType.PLUS),
tokens.Token(tokens.TokenType.MINUS),
tokens.Token(tokens.TokenType.MULTIPLY),
tokens.Token(tokens.TokenType.DIVIDE)
])
def test_par(self):
toks = list(lexer.Lexer("()").make_token())
self.assertEqual(toks, [
tokens.Token(tokens.TokenType.LPAR),
tokens.Token(tokens.TokenType.RPAR)
])
def test_all(self):
toks = list(lexer.Lexer("27 + (43 / 36 - 48) * 51").make_token())
self.assertEqual(toks, [
tokens.Token(tokens.TokenType.NUMBER, 27),
tokens.Token(tokens.TokenType.PLUS),
tokens.Token(tokens.TokenType.LPAR),
tokens.Token(tokens.TokenType.NUMBER, 43),
tokens.Token(tokens.TokenType.DIVIDE),
tokens.Token(tokens.TokenType.NUMBER, 36),
tokens.Token(tokens.TokenType.MINUS),
tokens.Token(tokens.TokenType.NUMBER, 48),
tokens.Token(tokens.TokenType.RPAR),
tokens.Token(tokens.TokenType.MULTIPLY),
tokens.Token(tokens.TokenType.NUMBER, 51)
])