remove mpcf_maths from mpc.c and adjust maths test
This commit is contained in:
19
mpc.c
19
mpc.c
@@ -2671,25 +2671,6 @@ mpc_val_t *mpcf_strfold(int n, mpc_val_t **xs) {
|
|||||||
return xs[0];
|
return xs[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
mpc_val_t *mpcf_maths(int n, mpc_val_t **xs) {
|
|
||||||
int **vs = (int**)xs;
|
|
||||||
(void) n;
|
|
||||||
|
|
||||||
switch(((char*)xs[1])[0])
|
|
||||||
{
|
|
||||||
case '*': { *vs[0] *= *vs[2]; }; break;
|
|
||||||
case '/': { *vs[0] /= *vs[2]; }; break;
|
|
||||||
case '%': { *vs[0] %= *vs[2]; }; break;
|
|
||||||
case '+': { *vs[0] += *vs[2]; }; break;
|
|
||||||
case '-': { *vs[0] -= *vs[2]; }; break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(xs[1]); free(xs[2]);
|
|
||||||
|
|
||||||
return xs[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Printing
|
** Printing
|
||||||
*/
|
*/
|
||||||
|
1
mpc.h
1
mpc.h
@@ -260,7 +260,6 @@ mpc_val_t *mpcf_all_free(int n, mpc_val_t** xs);
|
|||||||
|
|
||||||
mpc_val_t *mpcf_freefold(int n, mpc_val_t** xs);
|
mpc_val_t *mpcf_freefold(int n, mpc_val_t** xs);
|
||||||
mpc_val_t *mpcf_strfold(int n, mpc_val_t** xs);
|
mpc_val_t *mpcf_strfold(int n, mpc_val_t** xs);
|
||||||
mpc_val_t *mpcf_maths(int n, mpc_val_t** xs);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Regular Expression Parsers
|
** Regular Expression Parsers
|
||||||
|
24
tests/core.c
24
tests/core.c
@@ -33,6 +33,25 @@ void test_ident(void) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static mpc_val_t *mpcf_maths(int n, mpc_val_t **xs) {
|
||||||
|
int **vs = (int**)xs;
|
||||||
|
(void) n;
|
||||||
|
|
||||||
|
switch(((char*)xs[1])[0])
|
||||||
|
{
|
||||||
|
case '*': { *vs[0] *= *vs[2]; }; break;
|
||||||
|
case '/': { *vs[0] /= *vs[2]; }; break;
|
||||||
|
case '%': { *vs[0] %= *vs[2]; }; break;
|
||||||
|
case '+': { *vs[0] += *vs[2]; }; break;
|
||||||
|
case '-': { *vs[0] -= *vs[2]; }; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(xs[1]); free(xs[2]);
|
||||||
|
|
||||||
|
return xs[0];
|
||||||
|
}
|
||||||
|
|
||||||
void test_maths(void) {
|
void test_maths(void) {
|
||||||
|
|
||||||
mpc_parser_t *Expr, *Factor, *Term, *Maths;
|
mpc_parser_t *Expr, *Factor, *Term, *Maths;
|
||||||
@@ -44,12 +63,12 @@ void test_maths(void) {
|
|||||||
Maths = mpc_new("maths");
|
Maths = mpc_new("maths");
|
||||||
|
|
||||||
mpc_define(Expr, mpc_or(2,
|
mpc_define(Expr, mpc_or(2,
|
||||||
mpc_and(3, mpcf_maths, Factor, mpc_oneof("*/"), Factor, free, free),
|
mpc_and(3, mpcf_maths, Factor, mpc_oneof("+-"), Factor, free, free),
|
||||||
Factor
|
Factor
|
||||||
));
|
));
|
||||||
|
|
||||||
mpc_define(Factor, mpc_or(2,
|
mpc_define(Factor, mpc_or(2,
|
||||||
mpc_and(3, mpcf_maths, Term, mpc_oneof("+-"), Term, free, free),
|
mpc_and(3, mpcf_maths, Term, mpc_oneof("*/"), Term, free, free),
|
||||||
Term
|
Term
|
||||||
));
|
));
|
||||||
|
|
||||||
@@ -63,6 +82,7 @@ void test_maths(void) {
|
|||||||
PT_ASSERT(mpc_test_pass(Maths, "1", &r0, int_eq, free, int_print));
|
PT_ASSERT(mpc_test_pass(Maths, "1", &r0, int_eq, free, int_print));
|
||||||
PT_ASSERT(mpc_test_pass(Maths, "(5)", &r1, int_eq, free, int_print));
|
PT_ASSERT(mpc_test_pass(Maths, "(5)", &r1, int_eq, free, int_print));
|
||||||
PT_ASSERT(mpc_test_pass(Maths, "(4*2)+5", &r2, int_eq, free, int_print));
|
PT_ASSERT(mpc_test_pass(Maths, "(4*2)+5", &r2, int_eq, free, int_print));
|
||||||
|
PT_ASSERT(mpc_test_pass(Maths, "4*2+5", &r2, int_eq, free, int_print));
|
||||||
PT_ASSERT(mpc_test_fail(Maths, "a", &r3, int_eq, free, int_print));
|
PT_ASSERT(mpc_test_fail(Maths, "a", &r3, int_eq, free, int_print));
|
||||||
PT_ASSERT(mpc_test_fail(Maths, "2b+4", &r4, int_eq, free, int_print));
|
PT_ASSERT(mpc_test_fail(Maths, "2b+4", &r4, int_eq, free, int_print));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user