mirror of
				https://github.com/eledio-devices/thirdparty-tinyexpr.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	More closure tests.
This commit is contained in:
		
							
								
								
									
										25
									
								
								test.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								test.c
									
									
									
									
									
								
							| @@ -425,6 +425,10 @@ double clo2(void *context, double a, double b) { | |||||||
|     return a + b; |     return a + b; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | double cell(void *context, double a) { | ||||||
|  |     double *c = context; | ||||||
|  |     return c[(int)a]; | ||||||
|  | } | ||||||
|  |  | ||||||
| void test_closure() { | void test_closure() { | ||||||
|  |  | ||||||
| @@ -432,6 +436,7 @@ void test_closure() { | |||||||
|         {"c0", clo0, TE_CLOSURE0}, |         {"c0", clo0, TE_CLOSURE0}, | ||||||
|         {"c1", clo1, TE_CLOSURE1}, |         {"c1", clo1, TE_CLOSURE1}, | ||||||
|         {"c2", clo2, TE_CLOSURE2}, |         {"c2", clo2, TE_CLOSURE2}, | ||||||
|  |         {"cell", cell, TE_CLOSURE1}, | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     test_case cases[] = { |     test_case cases[] = { | ||||||
| @@ -453,6 +458,26 @@ void test_closure() { | |||||||
|         lfequal(te_eval_closure(ex, &extra), answer + extra); |         lfequal(te_eval_closure(ex, &extra), answer + extra); | ||||||
|         te_free(ex); |         te_free(ex); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     double c[] = {5,6,7,8,9}; | ||||||
|  |     test_case cases2[] = { | ||||||
|  |         {"cell 0", 5}, | ||||||
|  |         {"cell 1", 6}, | ||||||
|  |         {"cell 0 + cell 1", 11}, | ||||||
|  |         {"cell 1 * cell 3 + cell 4", 57}, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     for (i = 0; i < sizeof(cases2) / sizeof(test_case); ++i) { | ||||||
|  |         const char *expr = cases2[i].expr; | ||||||
|  |         const double answer = cases2[i].answer; | ||||||
|  |  | ||||||
|  |         int err; | ||||||
|  |         te_expr *ex = te_compile(expr, lookup, sizeof(lookup)/sizeof(te_variable), &err); | ||||||
|  |         lok(ex); | ||||||
|  |         lfequal(te_eval_closure(ex, c), answer); | ||||||
|  |         te_free(ex); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user