From efdfb5434d11a6a0feecf52e1aa97c7f82cb74f9 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 27 Dec 2022 20:38:39 +0100 Subject: [PATCH] add unit tests --- calc.c | 31 +++++++++++++++++++++++++++---- debug.c | 2 +- makefile | 2 +- parser.c | 39 +++++++++++++++++++++++++++++++++------ 4 files changed, 62 insertions(+), 12 deletions(-) diff --git a/calc.c b/calc.c index d2fdc8c..ba18700 100644 --- a/calc.c +++ b/calc.c @@ -1,6 +1,6 @@ /* depend: */ /* cflags: */ -/* linker: atoi.o fdprintf.o parser.o */ +/* linker: atoi.o debug.o fdprintf.o parser.o */ //#include #include @@ -26,7 +26,6 @@ /* gobal variables */ char *progname = NULL; -int verbose = 2; /* help function */ @@ -47,6 +46,7 @@ int main (int argc, char *argv[]) char buffer[BUFFER_SIZE + 1] = {0}; char *pt = buffer; int i = 0, j = 0, n; + int ret = 0; /* program name */ @@ -101,8 +101,10 @@ int main (int argc, char *argv[]) element_t *element = parser (buffer, NULL); if (element == (void *)(-1)) { VERBOSE (WARNING, PRINTOUT ("error while parsing: %s\n", buffer)); + ret = 1; } else { print_element (element, 0); + ret = 0; } //fsync (stdfdout); j = i + 1; @@ -121,13 +123,34 @@ int main (int argc, char *argv[]) } } - return 0; + return ret; } // test: calc.exe -h // test: calc.exe -h | awk '/usage:/ { rc=1 } END { exit (1-rc) }' // test: calc.exe -_ 2> /dev/null | awk 'END { if (NR == 0) { exit(0) } else exit (1) }' // test: calc.exe -_ 2>&1 | awk '/usage:/ { rc=1 } END { exit (1-rc) }' -// test: echo "foo\nbar\nfoobar" | calc.exe -v3 +// test: echo "1 + 2" | calc.exe +// test: echo "1 - 2" | calc.exe +// test: echo "1 * 2" | calc.exe +// test: echo "1 / 2" | calc.exe +// test: echo "2 ^ 3" | calc.exe +// test: echo "1e-1 + 2.34e5" | calc.exe +// test: echo "sqrt (2)" | calc.exe +// test: echo "pow (2, 3)" | calc.exe +// test: echo "cos (2)" | calc.exe +// test: echo "sin (2)" | calc.exe +// test: echo "atan (2)" | calc.exe +// test: echo "exp (2)" | calc.exe +// test: echo "log (2)" | calc.exe +// test: echo "1 + 2 - 3" | calc.exe +// test: echo "1 + cos (2 - 3)" | calc.exe +// test: echo "1 + 4 * (2 - 3)" | calc.exe +// test: echo "(2 - 3) / 4" | calc.exe +// test: echo "pow (2 - 3, 8 / 3)" | calc.exe +// test: echo "1 + -2" | calc.exe +// test: echo "1 - +2" | calc.exe +// test: echo "-1 + +2" | calc.exe +// test: echo "-1 +2" | calc.exe /* vim: set ts=4 sw=4 et: */ diff --git a/debug.c b/debug.c index f2ff1ce..8c18ffd 100644 --- a/debug.c +++ b/debug.c @@ -1,5 +1,5 @@ #include "debug.h" -int verbose = 2; +int verbose = 1; /* vim: set ts=4 sw=4 et */ diff --git a/makefile b/makefile index 34218b4..99f9d6e 100644 --- a/makefile +++ b/makefile @@ -18,7 +18,7 @@ LDFLAGS += -g ALLEXE = ALLEXE += calc -ALLEXE += skel +#ALLEXE += skel SHELL = bash diff --git a/parser.c b/parser.c index 48fb980..e7c9188 100644 --- a/parser.c +++ b/parser.c @@ -87,14 +87,34 @@ element_t *parser (char *str, char **next) /* skip commas */ if (*str == ',') { + VERBOSE (DEBUG, PRINTOUT ("start processing coma\n")); + str++; if (root == NULL) { - return ERROR_OP; + return parser (str, &str); } else if (root->func != Set) { new = newelement (Set, MAX_OPERANDS); + if (new == NULL) { + return ERROR_OP; + } new->ops[0] = root; root = new; + VERBOSE (DEBUG, PRINTOUT ("end processing first coma\n")); + } else /* if (root->func == Set) */ { + new = parser (str, &str); + if (!found){ + return ERROR_OP; + } + for (i = 0; i < root->nbops; i++) { + if (root->ops[i] == NULL) { + root->ops[i] = new; + found = 1; + } + } + if (!found){ + return ERROR_OP; + } + VERBOSE (DEBUG, PRINTOUT ("end processing other coma\n")); } - str++; continue; } @@ -125,12 +145,19 @@ element_t *parser (char *str, char **next) if (!found) { return ERROR_OP; } + } else { + if (new->func != Set) { + root = new; + } else { + return ERROR_OP; + } } VERBOSE (DEBUG, PRINTOUT ("stop processing bracket\n")); - if (next != NULL) { - *next = str; - } - return root; + //if (next != NULL) { + // *next = str; + //} + //return root; + continue; } if (*str == ')') { if (next != NULL) { -- 2.30.2