Skip to content

Commit 0216ed4

Browse files
committed
adds unit test for complex expression tree
1 parent b6d1a9f commit 0216ed4

File tree

2 files changed

+156
-2
lines changed

2 files changed

+156
-2
lines changed

tests/expression_tree.cpp

Lines changed: 142 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ void test_simple_expression_tree();
88
void test_complex_expression_tree();
99
void test_moved_expression_tree();
1010
void test_copied_expression_tree();
11+
void test_user_defined_operator();
1112

1213
int main(int argc, char** argv) {
1314
test_simple_expression_tree();
1415
test_complex_expression_tree();
1516
test_moved_expression_tree();
1617
test_copied_expression_tree();
18+
test_user_defined_operator();
1719

1820
return EXIT_SUCCESS;
1921
}
@@ -57,6 +59,140 @@ void test_simple_expression_tree() {
5759

5860
void test_complex_expression_tree() {
5961

62+
// expression: (uint > 0 AND (some_string > "a" AND some_string < "z")) OR (some_string > "0" AND some_string < "9")
63+
expression_tree<test_fixture> expr {
64+
(make_expr(&test_fixture::is_some_uint_greater_than_zero, op::equals, true)
65+
->AND((make_expr(&test_fixture::some_string, op::greater_than, std::string("a"))
66+
->AND(make_expr(&test_fixture::some_string, op::less_than, std::string("z")))
67+
))
68+
)
69+
->OR((make_expr(&test_fixture::some_string, op::greater_than, std::string("0"))
70+
->AND(make_expr(&test_fixture::some_string, op::less_than, std::string("9")))
71+
)
72+
)
73+
};
74+
75+
test_fixture fixture;
76+
77+
fixture.some_uint = 0;
78+
79+
// test left-hand side of the expression tree when some_uint is 0
80+
{
81+
fixture.some_string = "a";
82+
assert(!expr.evaluate(fixture));
83+
84+
fixture.some_string = "aaa";
85+
assert(!expr.evaluate(fixture));
86+
87+
fixture.some_string = "c";
88+
assert(!expr.evaluate(fixture));
89+
90+
fixture.some_string = "yyyyy";
91+
assert(!expr.evaluate(fixture));
92+
93+
fixture.some_string = "B";
94+
assert(!expr.evaluate(fixture));
95+
96+
fixture.some_string = "ZZZ";
97+
assert(!expr.evaluate(fixture));
98+
99+
fixture.some_string = "/";
100+
assert(!expr.evaluate(fixture));
101+
102+
fixture.some_string = "red";
103+
assert(!expr.evaluate(fixture));
104+
105+
fixture.some_string = " ";
106+
assert(!expr.evaluate(fixture));
107+
108+
fixture.some_string = "tree fiddy";
109+
assert(!expr.evaluate(fixture));
110+
}
111+
112+
// test right-hand side of the expression tree when some_uint is 0
113+
{
114+
fixture.some_string = "000";
115+
assert(expr.evaluate(fixture));
116+
117+
fixture.some_string = "00";
118+
assert(expr.evaluate(fixture));
119+
120+
fixture.some_string = "0";
121+
assert(!expr.evaluate(fixture));
122+
123+
fixture.some_string = "12345";
124+
assert(expr.evaluate(fixture));
125+
126+
fixture.some_string = "7";
127+
assert(expr.evaluate(fixture));
128+
129+
fixture.some_string = "89999";
130+
assert(expr.evaluate(fixture));
131+
132+
fixture.some_string = "9";
133+
assert(!expr.evaluate(fixture));
134+
}
135+
136+
fixture.some_uint = 1;
137+
138+
// test left-hand side of the expression tree when some_uint is 0
139+
{
140+
fixture.some_string = "a";
141+
assert(!expr.evaluate(fixture));
142+
143+
fixture.some_string = "aaa";
144+
assert(expr.evaluate(fixture));
145+
146+
fixture.some_string = "c";
147+
assert(expr.evaluate(fixture));
148+
149+
fixture.some_string = "yyyyy";
150+
assert(expr.evaluate(fixture));
151+
152+
fixture.some_string = "B";
153+
assert(!expr.evaluate(fixture));
154+
155+
fixture.some_string = "ZZZ";
156+
assert(!expr.evaluate(fixture));
157+
158+
fixture.some_string = "/";
159+
assert(!expr.evaluate(fixture));
160+
161+
fixture.some_string = "red";
162+
assert(expr.evaluate(fixture));
163+
164+
fixture.some_string = " ";
165+
assert(!expr.evaluate(fixture));
166+
167+
fixture.some_string = "tree fiddy";
168+
assert(expr.evaluate(fixture));
169+
}
170+
171+
// test right-hand side of the expression tree when some_uint is 1
172+
{
173+
fixture.some_string = "000";
174+
assert(expr.evaluate(fixture));
175+
176+
fixture.some_string = "00";
177+
assert(expr.evaluate(fixture));
178+
179+
fixture.some_string = "0";
180+
assert(!expr.evaluate(fixture));
181+
182+
fixture.some_string = "12345";
183+
assert(expr.evaluate(fixture));
184+
185+
fixture.some_string = "7";
186+
assert(expr.evaluate(fixture));
187+
188+
fixture.some_string = "89999";
189+
assert(expr.evaluate(fixture));
190+
191+
fixture.some_string = "9";
192+
assert(!expr.evaluate(fixture));
193+
}
194+
195+
60196
}
61197

62198
void test_moved_expression_tree() {
@@ -90,7 +226,7 @@ void test_moved_expression_tree() {
90226
};
91227
test_procedure(expr);
92228

93-
expression_tree<test_fixture> move_constructed_expr( std::move(expr) );
229+
expression_tree<test_fixture> move_constructed_expr(std::move(expr));
94230
test_procedure(move_constructed_expr);
95231

96232
expression_tree<test_fixture> move_assigned_expr = std::move(move_constructed_expr);
@@ -128,7 +264,7 @@ void test_copied_expression_tree() {
128264
};
129265
test_procedure(expr);
130266

131-
expression_tree<test_fixture> copy_constructed_expr( expr );
267+
expression_tree<test_fixture> copy_constructed_expr(expr);
132268
test_procedure(copy_constructed_expr);
133269

134270
expression_tree<test_fixture> copy_assigned_expr = copy_constructed_expr;
@@ -137,4 +273,8 @@ void test_copied_expression_tree() {
137273
// ensure both of the old copied versions still work after copying
138274
test_procedure(expr);
139275
test_procedure(copy_constructed_expr);
276+
}
277+
278+
void test_user_defined_operator() {
279+
140280
}

tests/test_utils.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,18 @@ struct test_fixture {
1515
bool is_some_uint_greater_than_zero() const {
1616
return some_uint;
1717
}
18+
};
19+
20+
struct packet_payload {
21+
const uint16_t error_code;
22+
std::string data;
23+
24+
uint64_t payload_size() const {
25+
return data.size();
26+
}
27+
};
28+
29+
class data_packet {
30+
const uint32_t sender_id;
31+
packet_payload payload;
1832
};

0 commit comments

Comments
 (0)