| 34 #include <cx/compare.h> |
34 #include <cx/compare.h> |
| 35 |
35 |
| 36 #include "object.h" |
36 #include "object.h" |
| 37 |
37 |
| 38 |
38 |
| 39 UCX_TEST(test_expr_parse_expr_value) { |
39 CX_TEST(test_expr_parse_expr_value) { |
| 40 pool_handle_t *pool = pool_create(); |
40 pool_handle_t *pool = pool_create(); |
| 41 |
41 |
| 42 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
42 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 43 cxstring token = cx_str("123"); |
43 cxstring token = cx_str("123"); |
| 44 cxListAdd(tokens, &token); |
44 cxListAdd(tokens, &token); |
| 45 |
45 |
| 46 UCX_TEST_BEGIN; |
46 CX_TEST_DO { |
| 47 |
47 |
| 48 size_t pos = 0; |
48 size_t pos = 0; |
| 49 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
49 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 50 |
50 |
| 51 UCX_TEST_ASSERT(pos == 1, "wrong token pos"); |
51 CX_TEST_ASSERT(pos == 1); |
| 52 UCX_TEST_ASSERT(expr, "expression is null"); |
52 CX_TEST_ASSERT(expr); |
| 53 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_INT, "wrong type"); |
53 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_INT); |
| 54 |
54 |
| 55 UCX_TEST_END; |
55 } |
| 56 |
56 |
| 57 pool_destroy(pool); |
57 pool_destroy(pool); |
| 58 } |
58 } |
| 59 |
59 |
| 60 UCX_TEST(test_expr_parse_expr_neg_value) { |
60 CX_TEST(test_expr_parse_expr_neg_value) { |
| 61 pool_handle_t *pool = pool_create(); |
61 pool_handle_t *pool = pool_create(); |
| 62 |
62 |
| 63 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
63 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 64 cxstring token = cx_str("-123"); |
64 cxstring token = cx_str("-123"); |
| 65 cxListAdd(tokens, &token); |
65 cxListAdd(tokens, &token); |
| 66 |
66 |
| 67 UCX_TEST_BEGIN; |
67 CX_TEST_DO { |
| 68 |
68 |
| 69 size_t pos = 0; |
69 size_t pos = 0; |
| 70 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
70 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 71 |
71 |
| 72 UCX_TEST_ASSERT(pos == 1, "wrong token pos"); |
72 CX_TEST_ASSERT(pos == 1); |
| 73 UCX_TEST_ASSERT(expr, "expression is null"); |
73 CX_TEST_ASSERT(expr); |
| 74 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_INT, "wrong type"); |
74 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_INT); |
| 75 UCX_TEST_ASSERT(expr->value.i == -123, "wrong value"); |
75 CX_TEST_ASSERT(expr->value.i == -123); |
| 76 |
76 |
| 77 UCX_TEST_END; |
77 } |
| 78 |
78 |
| 79 pool_destroy(pool); |
79 pool_destroy(pool); |
| 80 } |
80 } |
| 81 |
81 |
| 82 UCX_TEST(test_expr_parse_expr_value_str) { |
82 CX_TEST(test_expr_parse_expr_value_str) { |
| 83 pool_handle_t *pool = pool_create(); |
83 pool_handle_t *pool = pool_create(); |
| 84 |
84 |
| 85 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
85 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 86 cxstring token = cx_str("\"hello world\""); |
86 cxstring token = cx_str("\"hello world\""); |
| 87 cxListAdd(tokens, &token); |
87 cxListAdd(tokens, &token); |
| 88 |
88 |
| 89 UCX_TEST_BEGIN; |
89 CX_TEST_DO { |
| 90 |
90 |
| 91 size_t pos = 0; |
91 size_t pos = 0; |
| 92 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
92 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 93 |
93 |
| 94 UCX_TEST_ASSERT(pos == 1, "wrong token pos"); |
94 CX_TEST_ASSERT(pos == 1); |
| 95 UCX_TEST_ASSERT(expr, "expression is null"); |
95 CX_TEST_ASSERT(expr); |
| 96 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_STRING, "wrong type"); |
96 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_STRING); |
| 97 UCX_TEST_ASSERT(!cx_strcmp(expr->value.str, cx_str("hello world")), "wrong value"); |
97 CX_TEST_ASSERT(!cx_strcmp(expr->value.str, cx_str("hello world"))); |
| 98 |
98 |
| 99 UCX_TEST_END; |
99 } |
| 100 |
100 |
| 101 pool_destroy(pool); |
101 pool_destroy(pool); |
| 102 } |
102 } |
| 103 |
103 |
| 104 UCX_TEST(test_expr_parse_expr_value_bool) { |
104 CX_TEST(test_expr_parse_expr_value_bool) { |
| 105 pool_handle_t *pool = pool_create(); |
105 pool_handle_t *pool = pool_create(); |
| 106 |
106 |
| 107 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
107 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 108 cxstring token = cx_str("true"); |
108 cxstring token = cx_str("true"); |
| 109 cxListAdd(tokens, &token); |
109 cxListAdd(tokens, &token); |
| 110 |
110 |
| 111 UCX_TEST_BEGIN; |
111 CX_TEST_DO { |
| 112 |
112 |
| 113 size_t pos = 0; |
113 size_t pos = 0; |
| 114 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
114 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 115 |
115 |
| 116 UCX_TEST_ASSERT(pos == 1, "wrong token pos"); |
116 CX_TEST_ASSERT(pos == 1); |
| 117 UCX_TEST_ASSERT(expr, "expression is null"); |
117 CX_TEST_ASSERT(expr); |
| 118 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BOOL, "wrong type"); |
118 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BOOL); |
| 119 UCX_TEST_ASSERT(expr->value.b == 1, "wrong value"); |
119 CX_TEST_ASSERT(expr->value.b == 1); |
| 120 |
120 |
| 121 UCX_TEST_END; |
121 } |
| 122 |
122 |
| 123 pool_destroy(pool); |
123 pool_destroy(pool); |
| 124 } |
124 } |
| 125 |
125 |
| 126 UCX_TEST(test_expr_parse_expr_value_var) { |
126 CX_TEST(test_expr_parse_expr_value_var) { |
| 127 pool_handle_t *pool = pool_create(); |
127 pool_handle_t *pool = pool_create(); |
| 128 |
128 |
| 129 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
129 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 130 cxstring token = cx_str("$test"); |
130 cxstring token = cx_str("$test"); |
| 131 cxListAdd(tokens, &token); |
131 cxListAdd(tokens, &token); |
| 132 |
132 |
| 133 UCX_TEST_BEGIN; |
133 CX_TEST_DO { |
| 134 |
134 |
| 135 size_t pos = 0; |
135 size_t pos = 0; |
| 136 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
136 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 137 |
137 |
| 138 UCX_TEST_ASSERT(pos == 1, "wrong token pos"); |
138 CX_TEST_ASSERT(pos == 1); |
| 139 UCX_TEST_ASSERT(expr, "expression is null"); |
139 CX_TEST_ASSERT(expr); |
| 140 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_VARIABLE, "wrong type"); |
140 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_VARIABLE); |
| 141 UCX_TEST_ASSERT(!cx_strcmp(expr->value.var, cx_str("test")), "wrong var name"); |
141 CX_TEST_ASSERT(!cx_strcmp(expr->value.var, cx_str("test"))); |
| 142 |
142 |
| 143 UCX_TEST_END; |
143 } |
| 144 |
144 |
| 145 pool_destroy(pool); |
145 pool_destroy(pool); |
| 146 } |
146 } |
| 147 |
147 |
| 148 UCX_TEST(test_expr_parse_expr_not_value) { |
148 CX_TEST(test_expr_parse_expr_not_value) { |
| 149 pool_handle_t *pool = pool_create(); |
149 pool_handle_t *pool = pool_create(); |
| 150 |
150 |
| 151 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
151 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 152 cxstring token = cx_str("not"); |
152 cxstring token = cx_str("not"); |
| 153 cxListAdd(tokens, &token); |
153 cxListAdd(tokens, &token); |
| 154 token = cx_str("true"); |
154 token = cx_str("true"); |
| 155 cxListAdd(tokens, &token); |
155 cxListAdd(tokens, &token); |
| 156 |
156 |
| 157 UCX_TEST_BEGIN; |
157 CX_TEST_DO { |
| 158 |
158 |
| 159 size_t pos = 0; |
159 size_t pos = 0; |
| 160 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
160 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 161 |
161 |
| 162 UCX_TEST_ASSERT(pos == 2, "wrong token pos"); |
162 CX_TEST_ASSERT(pos == 2); |
| 163 UCX_TEST_ASSERT(expr, "expression is null"); |
163 CX_TEST_ASSERT(expr); |
| 164 |
164 |
| 165 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY, "wrong root expression type"); |
165 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY); |
| 166 UCX_TEST_ASSERT(expr->left, "missing left expression"); |
166 CX_TEST_ASSERT(expr->left); |
| 167 UCX_TEST_ASSERT(!expr->right, "right expression should be null"); |
167 CX_TEST_ASSERT(!expr->right); |
| 168 UCX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_BOOL, "left expression has wrong type"); |
168 CX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_BOOL); |
| 169 UCX_TEST_ASSERT(expr->left->value.b == 1, "left expression has wrong value"); |
169 CX_TEST_ASSERT(expr->left->value.b == 1); |
| 170 |
170 |
| 171 UCX_TEST_END; |
171 } |
| 172 |
172 |
| 173 pool_destroy(pool); |
173 pool_destroy(pool); |
| 174 } |
174 } |
| 175 |
175 |
| 176 UCX_TEST(test_expr_parse_expr_sign_value) { |
176 CX_TEST(test_expr_parse_expr_sign_value) { |
| 177 pool_handle_t *pool = pool_create(); |
177 pool_handle_t *pool = pool_create(); |
| 178 |
178 |
| 179 CxList *tokens1 = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
179 CxList *tokens1 = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 180 cxstring token = cx_str("+"); |
180 cxstring token = cx_str("+"); |
| 181 cxListAdd(tokens1, &token); |
181 cxListAdd(tokens1, &token); |
| 186 token = cx_str("-"); |
186 token = cx_str("-"); |
| 187 cxListAdd(tokens2, &token); |
187 cxListAdd(tokens2, &token); |
| 188 token = cx_str("123"); |
188 token = cx_str("123"); |
| 189 cxListAdd(tokens2, &token); |
189 cxListAdd(tokens2, &token); |
| 190 |
190 |
| 191 UCX_TEST_BEGIN; |
191 CX_TEST_DO { |
| 192 |
192 |
| 193 size_t pos = 0; |
193 size_t pos = 0; |
| 194 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens1, &pos); |
194 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens1, &pos); |
| 195 |
195 |
| 196 UCX_TEST_ASSERT(pos == 2, "test1: wrong token pos"); |
196 CX_TEST_ASSERT(pos == 2); |
| 197 UCX_TEST_ASSERT(expr, "test1: expression is null"); |
197 CX_TEST_ASSERT(expr); |
| 198 |
198 |
| 199 pos = 0; |
199 pos = 0; |
| 200 expr = expr_parse_logical_expr(pool, tokens2, &pos); |
200 expr = expr_parse_logical_expr(pool, tokens2, &pos); |
| 201 |
201 |
| 202 UCX_TEST_ASSERT(pos == 2, "test2: wrong token pos"); |
202 CX_TEST_ASSERT(pos == 2); |
| 203 UCX_TEST_ASSERT(expr, "test2: expression is null"); |
203 CX_TEST_ASSERT(expr); |
| 204 |
204 |
| 205 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY, "wrong expression type"); |
205 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY); |
| 206 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_SUB, "wrong expression operator"); |
206 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_SUB); |
| 207 UCX_TEST_ASSERT(expr->left, "missing left expresion"); |
207 CX_TEST_ASSERT(expr->left); |
| 208 UCX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_INT, "left expression has wrong type"); |
208 CX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_INT); |
| 209 UCX_TEST_ASSERT(expr->left->value.i == 123, "left expression has wrong value"); |
209 CX_TEST_ASSERT(expr->left->value.i == 123); |
| 210 |
210 |
| 211 UCX_TEST_END; |
211 } |
| 212 |
212 |
| 213 pool_destroy(pool); |
213 pool_destroy(pool); |
| 214 } |
214 } |
| 215 |
215 |
| 216 |
216 |
| 217 |
217 |
| 218 UCX_TEST(test_expr_parse_expr_compare2values) { |
218 CX_TEST(test_expr_parse_expr_compare2values) { |
| 219 pool_handle_t *pool = pool_create(); |
219 pool_handle_t *pool = pool_create(); |
| 220 |
220 |
| 221 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
221 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 222 cxstring token = cx_str("2"); |
222 cxstring token = cx_str("2"); |
| 223 cxListAdd(tokens, &token); |
223 cxListAdd(tokens, &token); |
| 224 token = cx_str("=="); |
224 token = cx_str("=="); |
| 225 cxListAdd(tokens, &token); |
225 cxListAdd(tokens, &token); |
| 226 token = cx_str("2"); |
226 token = cx_str("2"); |
| 227 cxListAdd(tokens, &token); |
227 cxListAdd(tokens, &token); |
| 228 |
228 |
| 229 UCX_TEST_BEGIN; |
229 CX_TEST_DO { |
| 230 |
230 |
| 231 size_t pos = 0; |
231 size_t pos = 0; |
| 232 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
232 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 233 |
233 |
| 234 UCX_TEST_ASSERT(pos == 3, "wrong token pos"); |
234 CX_TEST_ASSERT(pos == 3); |
| 235 UCX_TEST_ASSERT(expr, "expression is null"); |
235 CX_TEST_ASSERT(expr); |
| 236 |
236 |
| 237 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BINARY, "wrong expression type"); |
237 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BINARY); |
| 238 UCX_TEST_ASSERT(expr->left, "left expression is null"); |
238 CX_TEST_ASSERT(expr->left); |
| 239 UCX_TEST_ASSERT(expr->right, "right expression is null"); |
239 CX_TEST_ASSERT(expr->right); |
| 240 |
240 |
| 241 UCX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_NOOP, "left should be a literal with no operator"); |
241 CX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_NOOP); |
| 242 UCX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_NOOP, "right should be a literal with no operator"); |
242 CX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_NOOP); |
| 243 |
243 |
| 244 UCX_TEST_END; |
244 } |
| 245 |
245 |
| 246 pool_destroy(pool); |
246 pool_destroy(pool); |
| 247 } |
247 } |
| 248 |
248 |
| 249 UCX_TEST(test_expr_parse_expr_compare2value_expr) { |
249 CX_TEST(test_expr_parse_expr_compare2value_expr) { |
| 250 pool_handle_t *pool = pool_create(); |
250 pool_handle_t *pool = pool_create(); |
| 251 |
251 |
| 252 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
252 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 253 cxstring token = cx_str("2"); |
253 cxstring token = cx_str("2"); |
| 254 cxListAdd(tokens, &token); |
254 cxListAdd(tokens, &token); |
| 259 token = cx_str("+"); |
259 token = cx_str("+"); |
| 260 cxListAdd(tokens, &token); |
260 cxListAdd(tokens, &token); |
| 261 token = cx_str("1"); |
261 token = cx_str("1"); |
| 262 cxListAdd(tokens, &token); |
262 cxListAdd(tokens, &token); |
| 263 |
263 |
| 264 UCX_TEST_BEGIN; |
264 CX_TEST_DO { |
| 265 |
265 |
| 266 size_t pos = 0; |
266 size_t pos = 0; |
| 267 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
267 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 268 |
268 |
| 269 UCX_TEST_ASSERT(pos == 5, "wrong token pos"); |
269 CX_TEST_ASSERT(pos == 5); |
| 270 UCX_TEST_ASSERT(expr, "expression is null"); |
270 CX_TEST_ASSERT(expr); |
| 271 |
271 |
| 272 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BINARY, "wrong expression type"); |
272 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BINARY); |
| 273 UCX_TEST_ASSERT(expr->left, "left expression is null"); |
273 CX_TEST_ASSERT(expr->left); |
| 274 UCX_TEST_ASSERT(expr->right, "right expression is null"); |
274 CX_TEST_ASSERT(expr->right); |
| 275 |
275 |
| 276 UCX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_NOOP, "left should be a literal with no operator"); |
276 CX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_NOOP); |
| 277 UCX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_ADD, "right should be a binary expression"); |
277 CX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_ADD); |
| 278 |
278 |
| 279 UCX_TEST_END; |
279 } |
| 280 |
280 |
| 281 pool_destroy(pool); |
281 pool_destroy(pool); |
| 282 } |
282 } |
| 283 |
283 |
| 284 UCX_TEST(test_expr_parse_expr_compare2expr_value) { |
284 CX_TEST(test_expr_parse_expr_compare2expr_value) { |
| 285 pool_handle_t *pool = pool_create(); |
285 pool_handle_t *pool = pool_create(); |
| 286 |
286 |
| 287 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
287 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 288 cxstring token = cx_str("1"); |
288 cxstring token = cx_str("1"); |
| 289 cxListAdd(tokens, &token); |
289 cxListAdd(tokens, &token); |
| 294 token = cx_str("=="); |
294 token = cx_str("=="); |
| 295 cxListAdd(tokens, &token); |
295 cxListAdd(tokens, &token); |
| 296 token = cx_str("2"); |
296 token = cx_str("2"); |
| 297 cxListAdd(tokens, &token); |
297 cxListAdd(tokens, &token); |
| 298 |
298 |
| 299 UCX_TEST_BEGIN; |
299 CX_TEST_DO { |
| 300 |
300 |
| 301 size_t pos = 0; |
301 size_t pos = 0; |
| 302 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
302 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 303 |
303 |
| 304 UCX_TEST_ASSERT(pos == 5, "wrong token pos"); |
304 CX_TEST_ASSERT(pos == 5); |
| 305 UCX_TEST_ASSERT(expr, "expression is null"); |
305 CX_TEST_ASSERT(expr); |
| 306 |
306 |
| 307 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BINARY, "wrong expression type"); |
307 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_BINARY); |
| 308 UCX_TEST_ASSERT(expr->left, "left expression is null"); |
308 CX_TEST_ASSERT(expr->left); |
| 309 UCX_TEST_ASSERT(expr->right, "right expression is null"); |
309 CX_TEST_ASSERT(expr->right); |
| 310 UCX_TEST_ASSERT(expr->right->value.i == 2, "right wrong value"); |
310 CX_TEST_ASSERT(expr->right->value.i == 2); |
| 311 |
311 |
| 312 UCX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_ADD, "left should be a binary operation"); |
312 CX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_ADD); |
| 313 UCX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_NOOP, "right should be NOOP"); |
313 CX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_NOOP); |
| 314 UCX_TEST_ASSERT(expr->left->left, "ADD-op missing left"); |
314 CX_TEST_ASSERT(expr->left->left); |
| 315 UCX_TEST_ASSERT(expr->left->right, "ADD-op missing right"); |
315 CX_TEST_ASSERT(expr->left->right); |
| 316 UCX_TEST_ASSERT(expr->left->left->value.i == 1, "ADD-op: wrong left value"); |
316 CX_TEST_ASSERT(expr->left->left->value.i == 1); |
| 317 UCX_TEST_ASSERT(expr->left->right->value.i == 1, "ADD-op: wrong right value"); |
317 CX_TEST_ASSERT(expr->left->right->value.i == 1); |
| 318 |
318 |
| 319 UCX_TEST_END; |
319 } |
| 320 |
320 |
| 321 pool_destroy(pool); |
321 pool_destroy(pool); |
| 322 } |
322 } |
| 323 |
323 |
| 324 UCX_TEST(test_expr_parse_expr_bracket) { |
324 CX_TEST(test_expr_parse_expr_bracket) { |
| 325 pool_handle_t *pool = pool_create(); |
325 pool_handle_t *pool = pool_create(); |
| 326 |
326 |
| 327 // expression: 2 * (1 + 2) == 6 |
327 // expression: 2 * (1 + 2) == 6 |
| 328 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
328 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 329 cxstring token = cx_str("2"); |
329 cxstring token = cx_str("2"); |
| 343 token = cx_str("=="); |
343 token = cx_str("=="); |
| 344 cxListAdd(tokens, &token); |
344 cxListAdd(tokens, &token); |
| 345 token = cx_str("6"); |
345 token = cx_str("6"); |
| 346 cxListAdd(tokens, &token); |
346 cxListAdd(tokens, &token); |
| 347 |
347 |
| 348 UCX_TEST_BEGIN; |
348 CX_TEST_DO { |
| 349 |
349 |
| 350 size_t pos = 0; |
350 size_t pos = 0; |
| 351 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
351 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 352 |
352 |
| 353 UCX_TEST_ASSERT(pos == 9, "wrong token pos"); |
353 CX_TEST_ASSERT(pos == 9); |
| 354 UCX_TEST_ASSERT(expr, "expression is null"); |
354 CX_TEST_ASSERT(expr); |
| 355 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_EQ, "root: wrong operator"); |
355 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_EQ); |
| 356 UCX_TEST_ASSERT(expr->left, "missing left expression"); |
356 CX_TEST_ASSERT(expr->left); |
| 357 UCX_TEST_ASSERT(expr->right, "missing right expression"); |
357 CX_TEST_ASSERT(expr->right); |
| 358 UCX_TEST_ASSERT(expr->right->type == NSAPI_EXPRESSION_INT, "right expression has wrong type"); |
358 CX_TEST_ASSERT(expr->right->type == NSAPI_EXPRESSION_INT); |
| 359 UCX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_MUL, "left expression has wrong operator"); |
359 CX_TEST_ASSERT(expr->left->operator == NSAPI_EXPRESSION_MUL); |
| 360 UCX_TEST_ASSERT(expr->left->left, "mul: missing left"); |
360 CX_TEST_ASSERT(expr->left->left); |
| 361 UCX_TEST_ASSERT(expr->left->right, "mul: missing right"); |
361 CX_TEST_ASSERT(expr->left->right); |
| 362 UCX_TEST_ASSERT(expr->left->right->operator == NSAPI_EXPRESSION_ADD, "missing add operator"); |
362 CX_TEST_ASSERT(expr->left->right->operator == NSAPI_EXPRESSION_ADD); |
| 363 UCX_TEST_ASSERT(expr->left->right->left, "add: missing left"); |
363 CX_TEST_ASSERT(expr->left->right->left); |
| 364 UCX_TEST_ASSERT(expr->left->right->left, "add: missing right"); |
364 CX_TEST_ASSERT(expr->left->right->left); |
| 365 |
365 |
| 366 UCX_TEST_END; |
366 } |
| 367 |
367 |
| 368 pool_destroy(pool); |
368 pool_destroy(pool); |
| 369 } |
369 } |
| 370 |
370 |
| 371 UCX_TEST(test_expr_op_defined_simple) { |
371 CX_TEST(test_expr_op_defined_simple) { |
| 372 pool_handle_t *pool = pool_create(); |
372 pool_handle_t *pool = pool_create(); |
| 373 |
373 |
| 374 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
374 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 375 cxstring token = cx_str("defined"); |
375 cxstring token = cx_str("defined"); |
| 376 cxListAdd(tokens, &token); |
376 cxListAdd(tokens, &token); |
| 377 |
377 |
| 378 token = cx_str("$testvar1"); |
378 token = cx_str("$testvar1"); |
| 379 cxListAdd(tokens, &token); |
379 cxListAdd(tokens, &token); |
| 380 |
380 |
| 381 UCX_TEST_BEGIN; |
381 CX_TEST_DO { |
| 382 |
382 |
| 383 size_t pos = 0; |
383 size_t pos = 0; |
| 384 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
384 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 385 |
385 |
| 386 UCX_TEST_ASSERT(pos == 2, "wrong token pos"); |
386 CX_TEST_ASSERT(pos == 2); |
| 387 UCX_TEST_ASSERT(expr, "expression is null"); |
387 CX_TEST_ASSERT(expr); |
| 388 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY, "wrong type"); |
388 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY); |
| 389 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_VALUE_DEFINED, "wrong operator"); |
389 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_VALUE_DEFINED); |
| 390 UCX_TEST_ASSERT(expr->left, "missing left operand"); |
390 CX_TEST_ASSERT(expr->left); |
| 391 UCX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_VARIABLE, "operand is not a variable"); |
391 CX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_VARIABLE); |
| 392 |
392 |
| 393 UCX_TEST_END; |
393 } |
| 394 |
394 |
| 395 pool_destroy(pool); |
395 pool_destroy(pool); |
| 396 } |
396 } |
| 397 |
397 |
| 398 UCX_TEST(test_expr_op_defined) { |
398 CX_TEST(test_expr_op_defined) { |
| 399 pool_handle_t *pool = pool_create(); |
399 pool_handle_t *pool = pool_create(); |
| 400 |
400 |
| 401 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
401 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 402 cxstring token = cx_str("true"); |
402 cxstring token = cx_str("true"); |
| 403 cxListAdd(tokens, &token); |
403 cxListAdd(tokens, &token); |
| 412 cxListAdd(tokens, &token); |
412 cxListAdd(tokens, &token); |
| 413 |
413 |
| 414 token = cx_str("$var"); |
414 token = cx_str("$var"); |
| 415 cxListAdd(tokens, &token); |
415 cxListAdd(tokens, &token); |
| 416 |
416 |
| 417 UCX_TEST_BEGIN; |
417 CX_TEST_DO { |
| 418 |
418 |
| 419 size_t pos = 0; |
419 size_t pos = 0; |
| 420 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
420 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 421 |
421 |
| 422 UCX_TEST_ASSERT(pos == 5, "wrong token pos"); |
422 CX_TEST_ASSERT(pos == 5); |
| 423 UCX_TEST_ASSERT(expr, "expression is null"); |
423 CX_TEST_ASSERT(expr); |
| 424 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_EQ, "wrong operator"); |
424 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_EQ); |
| 425 UCX_TEST_ASSERT(expr->left, "missing left"); |
425 CX_TEST_ASSERT(expr->left); |
| 426 UCX_TEST_ASSERT(expr->right, "missing right"); |
426 CX_TEST_ASSERT(expr->right); |
| 427 UCX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_BOOL, "left expression is not a bool"); |
427 CX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_BOOL); |
| 428 UCX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_NOT, "right: wrong operator"); |
428 CX_TEST_ASSERT(expr->right->operator == NSAPI_EXPRESSION_NOT); |
| 429 UCX_TEST_ASSERT(expr->right->left, "not op: missing left"); |
429 CX_TEST_ASSERT(expr->right->left); |
| 430 UCX_TEST_ASSERT(expr->right->left->operator == NSAPI_EXPRESSION_VALUE_DEFINED, "missing defined operator"); |
430 CX_TEST_ASSERT(expr->right->left->operator == NSAPI_EXPRESSION_VALUE_DEFINED); |
| 431 |
431 |
| 432 UCX_TEST_END; |
432 } |
| 433 |
433 |
| 434 pool_destroy(pool); |
434 pool_destroy(pool); |
| 435 } |
435 } |
| 436 |
436 |
| 437 UCX_TEST(test_expr_op_file_exists_simple) { |
437 CX_TEST(test_expr_op_file_exists_simple) { |
| 438 pool_handle_t *pool = pool_create(); |
438 pool_handle_t *pool = pool_create(); |
| 439 |
439 |
| 440 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
440 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 441 cxstring token = cx_str("-e"); |
441 cxstring token = cx_str("-e"); |
| 442 cxListAdd(tokens, &token); |
442 cxListAdd(tokens, &token); |
| 443 |
443 |
| 444 token = cx_str("\"/path/file\""); |
444 token = cx_str("\"/path/file\""); |
| 445 cxListAdd(tokens, &token); |
445 cxListAdd(tokens, &token); |
| 446 |
446 |
| 447 UCX_TEST_BEGIN; |
447 CX_TEST_DO { |
| 448 |
448 |
| 449 size_t pos = 0; |
449 size_t pos = 0; |
| 450 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
450 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 451 |
451 |
| 452 UCX_TEST_ASSERT(pos == 2, "wrong token pos"); |
452 CX_TEST_ASSERT(pos == 2); |
| 453 UCX_TEST_ASSERT(expr, "expression is null"); |
453 CX_TEST_ASSERT(expr); |
| 454 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY, "wrong type"); |
454 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_UNARY); |
| 455 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_FILE_DIR_EXISTS, "wrong operator"); |
455 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_FILE_DIR_EXISTS); |
| 456 UCX_TEST_ASSERT(expr->left, "missing left operand"); |
456 CX_TEST_ASSERT(expr->left); |
| 457 UCX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_STRING, "operand is not a string"); |
457 CX_TEST_ASSERT(expr->left->type == NSAPI_EXPRESSION_STRING); |
| 458 UCX_TEST_ASSERT(!cx_strcmp(expr->left->value.str, cx_str("/path/file")), "wrong string operand"); |
458 CX_TEST_ASSERT(!cx_strcmp(expr->left->value.str, cx_str("/path/file"))); |
| 459 |
459 |
| 460 UCX_TEST_END; |
460 } |
| 461 |
461 |
| 462 pool_destroy(pool); |
462 pool_destroy(pool); |
| 463 } |
463 } |
| 464 |
464 |
| 465 UCX_TEST(test_expr_parse_expr_func_arg0) { |
465 CX_TEST(test_expr_parse_expr_func_arg0) { |
| 466 pool_handle_t *pool = pool_create(); |
466 pool_handle_t *pool = pool_create(); |
| 467 |
467 |
| 468 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
468 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 469 cxstring token = cx_str("test"); |
469 cxstring token = cx_str("test"); |
| 470 cxListAdd(tokens, &token); |
470 cxListAdd(tokens, &token); |
| 471 token = cx_str("("); |
471 token = cx_str("("); |
| 472 cxListAdd(tokens, &token); |
472 cxListAdd(tokens, &token); |
| 473 token = cx_str(")"); |
473 token = cx_str(")"); |
| 474 cxListAdd(tokens, &token); |
474 cxListAdd(tokens, &token); |
| 475 |
475 |
| 476 UCX_TEST_BEGIN; |
476 CX_TEST_DO { |
| 477 |
477 |
| 478 size_t pos = 0; |
478 size_t pos = 0; |
| 479 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
479 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 480 |
480 |
| 481 UCX_TEST_ASSERT(pos == 3, "wrong token pos"); |
481 CX_TEST_ASSERT(pos == 3); |
| 482 UCX_TEST_ASSERT(expr, "expression is null"); |
482 CX_TEST_ASSERT(expr); |
| 483 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type"); |
483 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER); |
| 484 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator"); |
484 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL); |
| 485 UCX_TEST_ASSERT(!expr->left, "left is not null"); |
485 CX_TEST_ASSERT(!expr->left); |
| 486 UCX_TEST_ASSERT(!expr->right, "right is not null"); |
486 CX_TEST_ASSERT(!expr->right); |
| 487 |
487 |
| 488 UCX_TEST_END; |
488 } |
| 489 |
489 |
| 490 pool_destroy(pool); |
490 pool_destroy(pool); |
| 491 } |
491 } |
| 492 |
492 |
| 493 |
493 |
| 529 token = cx_str("1"); |
529 token = cx_str("1"); |
| 530 cxListAdd(tokens, &token); |
530 cxListAdd(tokens, &token); |
| 531 token = cx_str(")"); |
531 token = cx_str(")"); |
| 532 cxListAdd(tokens, &token); |
532 cxListAdd(tokens, &token); |
| 533 |
533 |
| 534 UCX_TEST_BEGIN; |
534 CX_TEST_DO { |
| 535 |
535 |
| 536 size_t pos = 0; |
536 size_t pos = 0; |
| 537 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
537 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 538 |
538 |
| 539 UCX_TEST_ASSERT(pos == cxListSize(tokens), "wrong token pos"); |
539 CX_TEST_ASSERT(pos == cxListSize(tokens)); |
| 540 UCX_TEST_ASSERT(expr, "expression is null"); |
540 CX_TEST_ASSERT(expr); |
| 541 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type"); |
541 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER); |
| 542 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator"); |
542 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL); |
| 543 |
543 |
| 544 size_t numArgs = 0; |
544 size_t numArgs = 0; |
| 545 NSAPIExpression args[8]; |
545 NSAPIExpression args[8]; |
| 546 int err = test_get_args(args, 8, &numArgs, expr->left); |
546 int err = test_get_args(args, 8, &numArgs, expr->left); |
| 547 UCX_TEST_ASSERT(err == 0, "too much args"); |
547 CX_TEST_ASSERT(err == 0); |
| 548 UCX_TEST_ASSERT(numArgs == 1, "wrong arg count"); |
548 CX_TEST_ASSERT(numArgs == 1); |
| 549 UCX_TEST_ASSERT(args[0].value.i == 1, "wrong arg value"); |
549 CX_TEST_ASSERT(args[0].value.i == 1); |
| 550 |
550 |
| 551 UCX_TEST_END; |
551 } |
| 552 |
552 |
| 553 pool_destroy(pool); |
553 pool_destroy(pool); |
| 554 } |
554 } |
| 555 |
555 |
| 556 UCX_TEST(test_expr_parse_expr_func_arg3) { |
556 CX_TEST(test_expr_parse_expr_func_arg3) { |
| 557 pool_handle_t *pool = pool_create(); |
557 pool_handle_t *pool = pool_create(); |
| 558 |
558 |
| 559 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
559 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 560 cxstring token = cx_str("test"); |
560 cxstring token = cx_str("test"); |
| 561 cxListAdd(tokens, &token); |
561 cxListAdd(tokens, &token); |
| 572 token = cx_str("3"); |
572 token = cx_str("3"); |
| 573 cxListAdd(tokens, &token); |
573 cxListAdd(tokens, &token); |
| 574 token = cx_str(")"); |
574 token = cx_str(")"); |
| 575 cxListAdd(tokens, &token); |
575 cxListAdd(tokens, &token); |
| 576 |
576 |
| 577 UCX_TEST_BEGIN; |
577 CX_TEST_DO { |
| 578 |
578 |
| 579 size_t pos = 0; |
579 size_t pos = 0; |
| 580 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
580 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 581 |
581 |
| 582 UCX_TEST_ASSERT(pos == cxListSize(tokens), "wrong token pos"); |
582 CX_TEST_ASSERT(pos == cxListSize(tokens)); |
| 583 UCX_TEST_ASSERT(expr, "expression is null"); |
583 CX_TEST_ASSERT(expr); |
| 584 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type"); |
584 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER); |
| 585 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator"); |
585 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL); |
| 586 |
586 |
| 587 size_t numArgs = 0; |
587 size_t numArgs = 0; |
| 588 NSAPIExpression args[8]; |
588 NSAPIExpression args[8]; |
| 589 int err = test_get_args(args, 8, &numArgs, expr->left); |
589 int err = test_get_args(args, 8, &numArgs, expr->left); |
| 590 UCX_TEST_ASSERT(err == 0, "too much args"); |
590 CX_TEST_ASSERT(err == 0); |
| 591 UCX_TEST_ASSERT(numArgs == 3, "wrong arg count"); |
591 CX_TEST_ASSERT(numArgs == 3); |
| 592 UCX_TEST_ASSERT(args[0].value.i == 1, "arg0: wrong value"); |
592 CX_TEST_ASSERT(args[0].value.i == 1); |
| 593 UCX_TEST_ASSERT(args[1].value.i == 2, "arg1: wrong value"); |
593 CX_TEST_ASSERT(args[1].value.i == 2); |
| 594 UCX_TEST_ASSERT(args[2].value.i == 3, "arg2: wrong value"); |
594 CX_TEST_ASSERT(args[2].value.i == 3); |
| 595 |
595 |
| 596 UCX_TEST_END; |
596 } |
| 597 |
597 |
| 598 pool_destroy(pool); |
598 pool_destroy(pool); |
| 599 } |
599 } |
| 600 |
600 |
| 601 UCX_TEST(test_expr_parse_expr_func_expr1) { |
601 CX_TEST(test_expr_parse_expr_func_expr1) { |
| 602 pool_handle_t *pool = pool_create(); |
602 pool_handle_t *pool = pool_create(); |
| 603 |
603 |
| 604 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
604 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 605 cxstring token = cx_str("test"); |
605 cxstring token = cx_str("test"); |
| 606 cxListAdd(tokens, &token); |
606 cxListAdd(tokens, &token); |
| 617 token = cx_str("3"); |
617 token = cx_str("3"); |
| 618 cxListAdd(tokens, &token); |
618 cxListAdd(tokens, &token); |
| 619 token = cx_str(")"); |
619 token = cx_str(")"); |
| 620 cxListAdd(tokens, &token); |
620 cxListAdd(tokens, &token); |
| 621 |
621 |
| 622 UCX_TEST_BEGIN; |
622 CX_TEST_DO { |
| 623 |
623 |
| 624 size_t pos = 0; |
624 size_t pos = 0; |
| 625 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
625 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 626 |
626 |
| 627 UCX_TEST_ASSERT(pos == cxListSize(tokens), "wrong token pos"); |
627 CX_TEST_ASSERT(pos == cxListSize(tokens)); |
| 628 UCX_TEST_ASSERT(expr, "expression is null"); |
628 CX_TEST_ASSERT(expr); |
| 629 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type"); |
629 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER); |
| 630 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator"); |
630 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL); |
| 631 |
631 |
| 632 size_t numArgs = 0; |
632 size_t numArgs = 0; |
| 633 NSAPIExpression args[8]; |
633 NSAPIExpression args[8]; |
| 634 int err = test_get_args(args, 8, &numArgs, expr->left); |
634 int err = test_get_args(args, 8, &numArgs, expr->left); |
| 635 UCX_TEST_ASSERT(err == 0, "too much args"); |
635 CX_TEST_ASSERT(err == 0); |
| 636 UCX_TEST_ASSERT(numArgs == 2, "wrong arg count"); |
636 CX_TEST_ASSERT(numArgs == 2); |
| 637 UCX_TEST_ASSERT(args[0].value.i == 1, "arg0: wrong value"); |
637 CX_TEST_ASSERT(args[0].value.i == 1); |
| 638 UCX_TEST_ASSERT(args[1].operator == NSAPI_EXPRESSION_ADD, "arg1: wrong operator"); |
638 CX_TEST_ASSERT(args[1].operator == NSAPI_EXPRESSION_ADD); |
| 639 UCX_TEST_ASSERT(args[1].left && args[1].right, "arg1: missing operator values"); |
639 CX_TEST_ASSERT(args[1].left && args[1].right); |
| 640 UCX_TEST_ASSERT(args[1].left->value.i == 2 && args[1].right->value.i == 3, "arg1: wrong operator values"); |
640 CX_TEST_ASSERT(args[1].left->value.i == 2 && args[1].right->value.i == 3); |
| 641 |
641 |
| 642 UCX_TEST_END; |
642 } |
| 643 |
643 |
| 644 pool_destroy(pool); |
644 pool_destroy(pool); |
| 645 } |
645 } |
| 646 |
646 |
| 647 UCX_TEST(test_expr_parse_expr_func_expr2) { |
647 CX_TEST(test_expr_parse_expr_func_expr2) { |
| 648 pool_handle_t *pool = pool_create(); |
648 pool_handle_t *pool = pool_create(); |
| 649 |
649 |
| 650 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
650 CxList *tokens = cxLinkedListCreate(pool_allocator(pool), NULL, sizeof(cxstring)); |
| 651 cxstring token = cx_str("test"); |
651 cxstring token = cx_str("test"); |
| 652 cxListAdd(tokens, &token); |
652 cxListAdd(tokens, &token); |
| 673 token = cx_str("6"); |
673 token = cx_str("6"); |
| 674 cxListAdd(tokens, &token); |
674 cxListAdd(tokens, &token); |
| 675 token = cx_str(")"); |
675 token = cx_str(")"); |
| 676 cxListAdd(tokens, &token); |
676 cxListAdd(tokens, &token); |
| 677 |
677 |
| 678 UCX_TEST_BEGIN; |
678 CX_TEST_DO { |
| 679 |
679 |
| 680 size_t pos = 0; |
680 size_t pos = 0; |
| 681 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
681 NSAPIExpression *expr = expr_parse_logical_expr(pool, tokens, &pos); |
| 682 |
682 |
| 683 UCX_TEST_ASSERT(pos == cxListSize(tokens), "wrong token pos"); |
683 CX_TEST_ASSERT(pos == cxListSize(tokens)); |
| 684 UCX_TEST_ASSERT(expr, "expression is null"); |
684 CX_TEST_ASSERT(expr); |
| 685 UCX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER, "wrong expression type"); |
685 CX_TEST_ASSERT(expr->type == NSAPI_EXPRESSION_IDENTIFIER); |
| 686 UCX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL, "wrong expression operator"); |
686 CX_TEST_ASSERT(expr->operator == NSAPI_EXPRESSION_CALL); |
| 687 |
687 |
| 688 size_t numArgs = 0; |
688 size_t numArgs = 0; |
| 689 NSAPIExpression args[8]; |
689 NSAPIExpression args[8]; |
| 690 int err = test_get_args(args, 8, &numArgs, expr->left); |
690 int err = test_get_args(args, 8, &numArgs, expr->left); |
| 691 UCX_TEST_ASSERT(err == 0, "too much args"); |
691 CX_TEST_ASSERT(err == 0); |
| 692 UCX_TEST_ASSERT(numArgs == 3, "wrong arg count"); |
692 CX_TEST_ASSERT(numArgs == 3); |
| 693 UCX_TEST_ASSERT(args[0].operator == NSAPI_EXPRESSION_ADD, "arg0: wrong operator"); |
693 CX_TEST_ASSERT(args[0].operator == NSAPI_EXPRESSION_ADD); |
| 694 UCX_TEST_ASSERT(args[0].left && args[0].right, "arg0: missing operator values"); |
694 CX_TEST_ASSERT(args[0].left && args[0].right); |
| 695 UCX_TEST_ASSERT(args[1].operator == NSAPI_EXPRESSION_CALL, "arg1: wrong operator"); |
695 CX_TEST_ASSERT(args[1].operator == NSAPI_EXPRESSION_CALL); |
| 696 UCX_TEST_ASSERT(args[1].left, "arg1: missing args"); |
696 CX_TEST_ASSERT(args[1].left); |
| 697 UCX_TEST_ASSERT(args[2].type == NSAPI_EXPRESSION_INT, "arg2: wrong type"); |
697 CX_TEST_ASSERT(args[2].type == NSAPI_EXPRESSION_INT); |
| 698 UCX_TEST_ASSERT(args[2].value.i == 6, "arg2: wrong value"); |
698 CX_TEST_ASSERT(args[2].value.i == 6); |
| 699 |
699 |
| 700 UCX_TEST_END; |
700 } |
| 701 |
701 |
| 702 pool_destroy(pool); |
702 pool_destroy(pool); |
| 703 } |
703 } |