diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/aplwc_errstr.c | 58 | ||||
| -rw-r--r-- | tests/aplwc_eval.c | 33 | ||||
| -rw-r--r-- | tests/aplwc_new.c | 26 | ||||
| -rw-r--r-- | tests/aplwc_read.c | 28 | ||||
| -rw-r--r-- | tests/aplwc_utf8.c | 31 | ||||
| -rwxr-xr-x | tests/scripts/bad/1.aplwc | 1 | ||||
| -rwxr-xr-x | tests/scripts/bad/2.aplwc | 1 | ||||
| -rwxr-xr-x | tests/scripts/bad/3.aplwc | 1 | ||||
| -rwxr-xr-x | tests/scripts/good/1.aplwc (renamed from tests/scripts/1.aplwc) | 0 | ||||
| -rwxr-xr-x | tests/scripts/good/2.aplwc (renamed from tests/scripts/2.aplwc) | 0 |
10 files changed, 123 insertions, 56 deletions
diff --git a/tests/aplwc_errstr.c b/tests/aplwc_errstr.c index 8014c1e..fe9fa0e 100644 --- a/tests/aplwc_errstr.c +++ b/tests/aplwc_errstr.c @@ -1,47 +1,75 @@ -#include <aplwc.h> +#include <stdlib.h> #include <string.h> +#include <aplwc.h> + +static void * +my_alloc(size_t min, size_t max, size_t *actual) +{ + (void)max; + + *actual = min; + return malloc(min); +} + +static void +my_dealloc(void *p) +{ + free(p); +} int main(void) { - uint8_t data[APLWC_MIN_MEM]; + enum aplwc_rc ret; + struct aplwc_fns fns; struct aplwc *aplwc; - int ret; + int success; const char *err; - ret = aplwc_new(&aplwc, data, sizeof(data)); + success = 0; + + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + + aplwc = aplwc_new(fns, &ret); if(ret) - return 1; + goto end; err = aplwc_errstr(aplwc); if(err == NULL) - return 1; + goto end; if(strlen(err) != 0) - return 1; + goto end; err = aplwc_errstr(NULL); if(err == NULL) - return 1; + goto end; if(strcmp(err, "(unable to produce error string)") != 0) - return 1; + goto end; aplwc_destroy(aplwc); - ret = aplwc_new(&aplwc, data, 0); + fns.alloc = NULL; + aplwc = aplwc_new(fns, &ret); if(ret == 0) - return 1; + goto end; err = aplwc_errstr_rc(ret); if(err == NULL) - return 1; + goto end; for(ret = 0; ret <= APLWC_RC_LAST; ret++){ err = aplwc_errstr_rc(ret); if(err == NULL) - return 1; + goto end; if(strcmp(err, "(unable to produce error string)") == 0) - return 1; + goto end; } - return 0; + success = 1; +end: + if(aplwc) + aplwc_destroy(aplwc); + return !success; } diff --git a/tests/aplwc_eval.c b/tests/aplwc_eval.c index 8f6abe0..3fd8c27 100644 --- a/tests/aplwc_eval.c +++ b/tests/aplwc_eval.c @@ -1,15 +1,31 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <aplwc.h> +static void * +my_alloc(size_t min, size_t max, size_t *actual) +{ + (void)max; + + *actual = min; + return malloc(min); +} + +static void +my_dealloc(void *p) +{ + free(p); +} + int main(int argc, char *argv[]) { - uint8_t data[APLWC_MIN_MEM+1000]; char *input; struct aplwc *aplwc; - struct aplwc_line *line; - struct aplwc_value *value; + AplwcLine line; + AplwcValue value; + struct aplwc_fns fns; enum aplwc_rc ret; FILE *f; long input_size; @@ -35,7 +51,12 @@ main(int argc, char *argv[]) return 1; input[input_size] = 0; - ret = aplwc_new(&aplwc, data, sizeof(data)); + + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + + aplwc = aplwc_new(fns, &ret); if(ret) return 1; @@ -45,11 +66,11 @@ main(int argc, char *argv[]) input[i] = 0; line = aplwc_read(aplwc, &input[j]); - if(line == NULL) + if(!aplwc_valid_line(line)) return 1; value = aplwc_eval(line); - if((value == NULL) && (aplwc_last_error(aplwc) != APLWC_OUT_OF_MEMORY)) + if((!aplwc_valid_value(value)) && (aplwc_last_error(aplwc) != APLWC_OUT_OF_MEMORY)) return 1; aplwc_free_value(value); diff --git a/tests/aplwc_new.c b/tests/aplwc_new.c deleted file mode 100644 index 8d57ecd..0000000 --- a/tests/aplwc_new.c +++ /dev/null @@ -1,26 +0,0 @@ -#include <aplwc.h> - -int -main(void) -{ - struct aplwc *aplwc; - uint8_t data[APLWC_MIN_MEM*2]; - int ret; - size_t i, j; - - for(i = 0; i < 32; i++){ - for(j = 0; j <= sizeof(data)-i; j++){ - ret = aplwc_new(&aplwc, data+i, j); - aplwc_destroy(aplwc); - if(ret){ - if(ret != APLWC_OUT_OF_MEMORY) - return 1; - if(j >= APLWC_MIN_MEM) - return 1; - break; - } - } - } - - return 0; -} diff --git a/tests/aplwc_read.c b/tests/aplwc_read.c index c54f598..d090494 100644 --- a/tests/aplwc_read.c +++ b/tests/aplwc_read.c @@ -1,18 +1,38 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <aplwc.h> +static void * +my_alloc(size_t min, size_t max, size_t *actual) +{ + (void)max; + + *actual = min; + return malloc(min); +} + +static void +my_dealloc(void *p) +{ + free(p); +} + int main(int argc, char *argv[]) { - uint8_t data[APLWC_MIN_MEM+1000]; + struct aplwc_fns fns; char *input; struct aplwc *aplwc; - struct aplwc_line *line; + AplwcLine line; enum aplwc_rc ret; FILE *f; long input_size; + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + if(argc != 2) return 1; @@ -33,12 +53,12 @@ main(int argc, char *argv[]) return 1; input[input_size] = 0; - ret = aplwc_new(&aplwc, data, sizeof(data)); + aplwc = aplwc_new(fns, &ret); if(ret) return 1; line = aplwc_read(aplwc, input); - if((line == NULL) && (aplwc_last_error(aplwc) != APLWC_OUT_OF_MEMORY)) + if((!aplwc_valid_line(line)) && (aplwc_last_error(aplwc) != APLWC_OUT_OF_MEMORY)) return 1; aplwc_free_line(line); aplwc_destroy(aplwc); diff --git a/tests/aplwc_utf8.c b/tests/aplwc_utf8.c index b97b978..367db5d 100644 --- a/tests/aplwc_utf8.c +++ b/tests/aplwc_utf8.c @@ -1,3 +1,5 @@ +#include <stdlib.h> +#include <string.h> #include <aplwc.h> uint8_t bad1[] = {0xff,0}; @@ -14,12 +16,27 @@ uint8_t good3[] = {0xed,0x95,0x9c,0xea,0xb5,0xad,0xec,0x96,0xb4,0}; uint8_t good4[] = {0xe6,0x97,0xa5,0xe6,0x9c,0xac,0xe8,0xaa,0x9e,0}; uint8_t good5[] = {0xef,0xbb,0xbf,0xf0,0xa3,0x8e,0xb4,0}; +static void * +my_alloc(size_t min, size_t max, size_t *actual) +{ + (void)max; + + *actual = min; + return malloc(min); +} + +static void +my_dealloc(void *p) +{ + free(p); +} + int main(void) { - uint8_t data[APLWC_MIN_MEM+64000]; struct aplwc *aplwc; - struct aplwc_line *line; + AplwcLine line; + struct aplwc_fns fns; enum aplwc_rc ret; size_t i; @@ -41,13 +58,17 @@ main(void) good5 }; - ret = aplwc_new(&aplwc, data, sizeof(data)); + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + + aplwc = aplwc_new(fns, &ret); if(ret) return 1; for(i = 0; i < (sizeof(bad_tests)/sizeof(*bad_tests)); i++){ line = aplwc_read(aplwc, (char *)bad_tests[i]); - if(line != NULL) + if(aplwc_valid_line(line)) return 1; if(aplwc_last_error(aplwc) != APLWC_INVALID_UTF8) return 1; @@ -56,7 +77,7 @@ main(void) for(i = 0; i < (sizeof(good_tests)/sizeof(*good_tests)); i++){ line = aplwc_read(aplwc, (char *)good_tests[i]); - if((line == NULL) && (aplwc_last_error(aplwc) == APLWC_INVALID_UTF8)) + if((!aplwc_valid_line(line)) && (aplwc_last_error(aplwc) == APLWC_INVALID_UTF8)) return 1; aplwc_free_line(line); } diff --git a/tests/scripts/bad/1.aplwc b/tests/scripts/bad/1.aplwc new file mode 100755 index 0000000..792d600 --- /dev/null +++ b/tests/scripts/bad/1.aplwc @@ -0,0 +1 @@ +# diff --git a/tests/scripts/bad/2.aplwc b/tests/scripts/bad/2.aplwc new file mode 100755 index 0000000..1e0a14c --- /dev/null +++ b/tests/scripts/bad/2.aplwc @@ -0,0 +1 @@ +!# diff --git a/tests/scripts/bad/3.aplwc b/tests/scripts/bad/3.aplwc new file mode 100755 index 0000000..ba38a01 --- /dev/null +++ b/tests/scripts/bad/3.aplwc @@ -0,0 +1 @@ +## diff --git a/tests/scripts/1.aplwc b/tests/scripts/good/1.aplwc index e101d02..e101d02 100755 --- a/tests/scripts/1.aplwc +++ b/tests/scripts/good/1.aplwc diff --git a/tests/scripts/2.aplwc b/tests/scripts/good/2.aplwc index e60e717..e60e717 100755 --- a/tests/scripts/2.aplwc +++ b/tests/scripts/good/2.aplwc |