-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken_ut.cpp
75 lines (64 loc) · 2.97 KB
/
token_ut.cpp
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "test_framework.h"
#include "test_utils.h"
extern "C" {
#include "token.h"
}
TEST_SUITE(ReadToken) {
TEST(OpeningBracket) {
ASSERT_EQUAL(ReadToken("(+"), CreateToken(TokenType::OpeningBracket, "("));
}
TEST(ClosingBracket) {
ASSERT_EQUAL(ReadToken(")..."), CreateToken(TokenType::ClosingBracket, ")"));
}
TEST(Number) {
ASSERT_EQUAL(ReadToken("123."), CreateToken(TokenType::Number, "123"));
ASSERT_EQUAL(ReadToken("-12_"), CreateToken(TokenType::Number, "-12"));
}
TEST(Operation) {
ASSERT_EQUAL(ReadToken("+)"), CreateToken(TokenType::Operation, "+"));
ASSERT_EQUAL(ReadToken("%*"), CreateToken(TokenType::Operation, "%"));
ASSERT_EQUAL(ReadToken("-*"), CreateToken(TokenType::Operation, "-"));
ASSERT_EQUAL(ReadToken("**"), CreateToken(TokenType::Operation, "*"));
ASSERT_EQUAL(ReadToken("/*"), CreateToken(TokenType::Operation, "/"));
ASSERT_EQUAL(ReadToken("<*"), CreateToken(TokenType::Operation, "<"));
ASSERT_EQUAL(ReadToken(">*"), CreateToken(TokenType::Operation, ">"));
ASSERT_EQUAL(ReadToken("=*"), CreateToken(TokenType::Operation, "="));
}
TEST(Name) {
ASSERT_EQUAL(ReadToken("abc("), CreateToken(TokenType::Name, "abc"));
ASSERT_EQUAL(ReadToken("a_("), CreateToken(TokenType::Name, "a_"));
ASSERT_EQUAL(ReadToken("a_1("), CreateToken(TokenType::Name, "a_1"));
ASSERT_EQUAL(ReadToken("abcdefghijkl]("),
CreateToken(TokenType::Name, "abcdefghijkl"));
}
TEST(Define) {
ASSERT_EQUAL(ReadToken("define(+"), CreateToken(TokenType::Define, "define"));
}
TEST(IncorrectToken) {
ASSERT_EQUAL(ReadToken("_abc"), CreateToken(TokenType::IncorrectToken, "_"));
ASSERT_EQUAL(ReadToken("}abc"), CreateToken(TokenType::IncorrectToken, "}"));
ASSERT_EQUAL(ReadToken("[abc"), CreateToken(TokenType::IncorrectToken, "["));
ASSERT_EQUAL(ReadToken("@abc"), CreateToken(TokenType::IncorrectToken, "@"));
}
}
TEST_SUITE(ReadAllTokens) {
TEST(Example) {
auto result = ReadAllTokens("(define(f)(+(function)-1))");
std::vector<Token> expected = {
CreateToken(TokenType::OpeningBracket, "("),
CreateToken(TokenType::Define, "define"),
CreateToken(TokenType::OpeningBracket, "("),
CreateToken(TokenType::Name, "f"),
CreateToken(TokenType::ClosingBracket, ")"),
CreateToken(TokenType::OpeningBracket, "("),
CreateToken(TokenType::Operation, "+"),
CreateToken(TokenType::OpeningBracket, "("),
CreateToken(TokenType::Name, "function"),
CreateToken(TokenType::ClosingBracket, ")"),
CreateToken(TokenType::Number, "-1"),
CreateToken(TokenType::ClosingBracket, ")"),
CreateToken(TokenType::ClosingBracket, ")")
};
ASSERT_EQUAL(result, expected);
}
}