Added comparison and logical operators

This commit is contained in:
cschreib
2017-06-30 12:06:47 +02:00
parent aecac82263
commit c1b01d879e
2 changed files with 155 additions and 6 deletions

64
test.c
View File

@@ -672,6 +672,69 @@ void test_combinatorics() {
}
void test_logic() {
test_case cases[] = {
{"1 && 1", 1},
{"1 && 0", 0},
{"0 && 1", 0},
{"0 && 0", 0},
{"1 || 1", 1},
{"1 || 0", 1},
{"0 || 1", 1},
{"0 || 0", 0},
{"!0", 1},
{"!1", 0},
{"1 < 2", 1},
{"2 < 2", 0},
{"2 <= 2", 1},
{"2 > 1", 1},
{"2 > 2", 0},
{"2 >= 2", 1},
{"2 > -2", 1},
{"-2 < 2", 1},
{"1 < 2 && 2 < 3", 1},
{"1 < 2 && 3 < 2", 0},
{"2 < 1 && 2 < 3", 0},
{"2 < 1 && 3 < 2", 0},
{"1 < 2 || 2 < 3", 1},
{"1 < 2 || 3 < 2", 1},
{"2 < 1 || 2 < 3", 1},
{"2 < 1 || 3 < 2", 0},
{"1 < 1+1", 1},
{"1 < 1*2", 1},
{"1 < 2/2", 0},
{"1 < 2^2", 1},
{"5+5 < 4+10", 1},
{"5+(5 < 4)+10", 15},
{"5+(5 < 4+10)", 6},
{"(5+5 < 4)+10", 10},
{"5+!(5 < 4)+10", 16},
{"5+!(5 < 4+10)", 5},
{"!(5+5 < 4)+10", 11},
};
int i;
for (i = 0; i < sizeof(cases) / sizeof(test_case); ++i) {
const char *expr = cases[i].expr;
const double answer = cases[i].answer;
int err;
const double ev = te_interp(expr, &err);
lok(!err);
lfequal(ev, answer);
if (err) {
printf("FAILED: %s (%d)\n", expr, err);
}
}
}
int main(int argc, char *argv[])
{
lrun("Results", test_results);
@@ -685,6 +748,7 @@ int main(int argc, char *argv[])
lrun("Optimize", test_optimize);
lrun("Pow", test_pow);
lrun("Combinatorics", test_combinatorics);
lrun("Logic", test_logic);
lresults();
return lfails != 0;