-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_jlcfunc.cpp
104 lines (98 loc) · 3.28 KB
/
test_jlcfunc.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "common/jlc_func.h"
#include "common/test.h"
int main()
{
{
// constructor
JLC::FUNC::JLCFunc f(
"f",
std::make_shared<JLC::TYPE::JLCType>(
JLC::TYPE::type_enum::INT));
TEST_ASSERT(f.name == "f");
TEST_ASSERT(f.return_type->type == JLC::TYPE::type_enum::INT);
// add arg
f.add_arg(
JLC::VAR::JLCVar(
"a",
std::make_shared<JLC::TYPE::JLCType>(
JLC::TYPE::type_enum::INT)));
f.add_arg(
JLC::VAR::JLCVar(
"b",
std::make_shared<JLC::TYPE::JLCType>(
JLC::TYPE::type_enum::DOUB)));
// has_arg
TEST_ASSERT(f.has_arg("a"));
TEST_ASSERT(f.has_arg("b"));
TEST_ASSERT(!f.has_arg("c"));
// get_arg
TEST_ASSERT(f.get_arg("a").name == "a");
TEST_ASSERT(f.get_arg("b").name == "b");
// add_block
f.push_blk();
f.add_var(
JLC::VAR::JLCVar(
"x",
std::make_shared<JLC::TYPE::JLCType>(
JLC::TYPE::type_enum::INT)));
f.add_var(
JLC::VAR::JLCVar(
"y",
std::make_shared<JLC::TYPE::JLCType>(
JLC::TYPE::type_enum::DOUB)));
// has_var
TEST_ASSERT(f.has_var("x"));
TEST_ASSERT(f.has_var("y"));
TEST_ASSERT(!f.has_var("z"));
TEST_ASSERT(f.has_var("a"));
TEST_ASSERT(f.has_var("b"));
// get_var
TEST_ASSERT(f.get_var("x").name == "x");
TEST_ASSERT(f.get_var("y").name == "y");
TEST_ASSERT(f.get_var("a").name == "a");
TEST_ASSERT(f.get_var("b").name == "b");
// insert a new block
f.push_blk();
f.add_var(
JLC::VAR::JLCVar(
"z",
std::make_shared<JLC::TYPE::JLCType>(
JLC::TYPE::type_enum::BOOL)));
// has_var
TEST_ASSERT(f.has_var("z"));
TEST_ASSERT(f.has_var("x"));
TEST_ASSERT(f.has_var("y"));
TEST_ASSERT(f.has_var("a"));
TEST_ASSERT(f.has_var("b"));
// get_var
TEST_ASSERT(f.get_var("z").name == "z");
TEST_ASSERT(f.get_var("x").name == "x");
TEST_ASSERT(f.get_var("y").name == "y");
TEST_ASSERT(f.get_var("a").name == "a");
TEST_ASSERT(f.get_var("b").name == "b");
// test str
std::string s = f.str();
std::string expected = "Function: f\n"
"Return type: int\n"
"Arguments:\n"
"\t\tint a;\n"
"\t\tdouble b;\n"
"Blocks:\n"
"Block:\n"
"\tint x;\n"
"\tdouble y;\n"
"Block:\n"
"\tbool z;\n";
TEST_ASSERT(s == expected);
// pop block
f.pop_blk();
// has_var
TEST_ASSERT(!f.has_var("z"));
TEST_ASSERT(f.has_var("x"));
// pop block
f.pop_blk();
// has_var
TEST_ASSERT(!f.has_var("x"));
}
TEST_PASS();
}