From 29479e2c50d41f29b5e21ffcb16416887aa693d2 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 30 Aug 2026 13:34:36 +0000 Subject: Remove APLWC_MIN_MEM constant, and APLWC_MEM environment variable FossilOrigin-Name: affcf2ab9c573820c77778abfb4769fad8a30ce457411b02a9528470994c7a6b --- tests/aplwc_errstr.c | 2 +- tests/aplwc_eval.c | 2 +- tests/aplwc_new.c | 4 +--- tests/aplwc_read.c | 2 +- tests/aplwc_utf8.c | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/tests/aplwc_errstr.c b/tests/aplwc_errstr.c index 8014c1e..2ca14ab 100644 --- a/tests/aplwc_errstr.c +++ b/tests/aplwc_errstr.c @@ -4,7 +4,7 @@ int main(void) { - uint8_t data[APLWC_MIN_MEM]; + uint8_t data[20000]; struct aplwc *aplwc; int ret; const char *err; diff --git a/tests/aplwc_eval.c b/tests/aplwc_eval.c index 8f6abe0..c284189 100644 --- a/tests/aplwc_eval.c +++ b/tests/aplwc_eval.c @@ -5,7 +5,7 @@ int main(int argc, char *argv[]) { - uint8_t data[APLWC_MIN_MEM+1000]; + uint8_t data[64000]; char *input; struct aplwc *aplwc; struct aplwc_line *line; diff --git a/tests/aplwc_new.c b/tests/aplwc_new.c index 8d57ecd..4ed893e 100644 --- a/tests/aplwc_new.c +++ b/tests/aplwc_new.c @@ -4,7 +4,7 @@ int main(void) { struct aplwc *aplwc; - uint8_t data[APLWC_MIN_MEM*2]; + uint8_t data[10000]; int ret; size_t i, j; @@ -15,8 +15,6 @@ main(void) if(ret){ if(ret != APLWC_OUT_OF_MEMORY) return 1; - if(j >= APLWC_MIN_MEM) - return 1; break; } } diff --git a/tests/aplwc_read.c b/tests/aplwc_read.c index c54f598..8c5ce37 100644 --- a/tests/aplwc_read.c +++ b/tests/aplwc_read.c @@ -5,7 +5,7 @@ int main(int argc, char *argv[]) { - uint8_t data[APLWC_MIN_MEM+1000]; + uint8_t data[20000]; char *input; struct aplwc *aplwc; struct aplwc_line *line; diff --git a/tests/aplwc_utf8.c b/tests/aplwc_utf8.c index b97b978..b950580 100644 --- a/tests/aplwc_utf8.c +++ b/tests/aplwc_utf8.c @@ -17,7 +17,7 @@ uint8_t good5[] = {0xef,0xbb,0xbf,0xf0,0xa3,0x8e,0xb4,0}; int main(void) { - uint8_t data[APLWC_MIN_MEM+64000]; + uint8_t data[64000]; struct aplwc *aplwc; struct aplwc_line *line; enum aplwc_rc ret; -- cgit v1.2.3 From 729964bea692f9683860978b89848784a7fc2f46 Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 30 Aug 2026 20:52:43 +0000 Subject: Still a lot to be done, but I'm going to bed. Two remaining big issues: * aplwc (the parameter passed "everywhere") - should it move or not? * values returned from the public API should not move. FossilOrigin-Name: 31ab3154b8f3d5ac167218496e9e204324bf0ac9d36b7bada8fe2a6c8f93d51c --- tests/aplwc_errstr.c | 59 +++++++++++++++++++++++++++++++++++++++------------- tests/aplwc_eval.c | 25 ++++++++++++++++++++-- tests/aplwc_new.c | 24 --------------------- tests/aplwc_read.c | 24 +++++++++++++++++++-- tests/aplwc_utf8.c | 25 ++++++++++++++++++++-- 5 files changed, 112 insertions(+), 45 deletions(-) delete mode 100644 tests/aplwc_new.c (limited to 'tests') diff --git a/tests/aplwc_errstr.c b/tests/aplwc_errstr.c index 2ca14ab..1a5ebc4 100644 --- a/tests/aplwc_errstr.c +++ b/tests/aplwc_errstr.c @@ -1,47 +1,76 @@ -#include +#include #include +#include + +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[20000]; + struct aplwc_fns fns; struct aplwc *aplwc; - int ret; + int ret, success; const char *err; - ret = aplwc_new(&aplwc, data, sizeof(data)); + success = 0; + aplwc = NULL; + + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + + ret = aplwc_new(&aplwc, fns); 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); + aplwc = NULL; - ret = aplwc_new(&aplwc, data, 0); + fns.alloc = NULL; + ret = aplwc_new(&aplwc, fns); 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 c284189..68ea4a8 100644 --- a/tests/aplwc_eval.c +++ b/tests/aplwc_eval.c @@ -1,15 +1,31 @@ #include #include +#include #include +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[64000]; char *input; struct aplwc *aplwc; struct aplwc_line *line; struct aplwc_value *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; + + ret = aplwc_new(&aplwc, fns); if(ret) return 1; diff --git a/tests/aplwc_new.c b/tests/aplwc_new.c deleted file mode 100644 index 4ed893e..0000000 --- a/tests/aplwc_new.c +++ /dev/null @@ -1,24 +0,0 @@ -#include - -int -main(void) -{ - struct aplwc *aplwc; - uint8_t data[10000]; - 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; - break; - } - } - } - - return 0; -} diff --git a/tests/aplwc_read.c b/tests/aplwc_read.c index 8c5ce37..42a47c2 100644 --- a/tests/aplwc_read.c +++ b/tests/aplwc_read.c @@ -1,11 +1,27 @@ #include #include +#include #include +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[20000]; + struct aplwc_fns fns; char *input; struct aplwc *aplwc; struct aplwc_line *line; @@ -13,6 +29,10 @@ main(int argc, char *argv[]) FILE *f; long input_size; + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + if(argc != 2) return 1; @@ -33,7 +53,7 @@ main(int argc, char *argv[]) return 1; input[input_size] = 0; - ret = aplwc_new(&aplwc, data, sizeof(data)); + ret = aplwc_new(&aplwc, fns); if(ret) return 1; diff --git a/tests/aplwc_utf8.c b/tests/aplwc_utf8.c index b950580..4f9f2a4 100644 --- a/tests/aplwc_utf8.c +++ b/tests/aplwc_utf8.c @@ -1,3 +1,5 @@ +#include +#include #include 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[64000]; struct aplwc *aplwc; struct aplwc_line *line; + struct aplwc_fns fns; enum aplwc_rc ret; size_t i; @@ -41,7 +58,11 @@ main(void) good5 }; - ret = aplwc_new(&aplwc, data, sizeof(data)); + memset(&fns, 0, sizeof(fns)); + fns.alloc = my_alloc; + fns.dealloc = my_dealloc; + + ret = aplwc_new(&aplwc, fns); if(ret) return 1; -- cgit v1.2.3 From 7f7a2fb4fb23433e7be3d6953725690c8ea958d2 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 31 Aug 2026 19:44:56 +0000 Subject: The objects returned to the user are now integer-based references, not actual pointers. This means the aplwc internals can update those pointers without the user noticing. FossilOrigin-Name: 654c7d0ec85da295a7fb6ed381500410686b280f342fa81a30481f5e9a20c58a --- tests/aplwc_errstr.c | 9 ++++----- tests/aplwc_eval.c | 10 +++++----- tests/aplwc_read.c | 6 +++--- tests/aplwc_utf8.c | 8 ++++---- 4 files changed, 16 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/aplwc_errstr.c b/tests/aplwc_errstr.c index 1a5ebc4..fe9fa0e 100644 --- a/tests/aplwc_errstr.c +++ b/tests/aplwc_errstr.c @@ -20,19 +20,19 @@ my_dealloc(void *p) int main(void) { + enum aplwc_rc ret; struct aplwc_fns fns; struct aplwc *aplwc; - int ret, success; + int success; const char *err; success = 0; - aplwc = NULL; memset(&fns, 0, sizeof(fns)); fns.alloc = my_alloc; fns.dealloc = my_dealloc; - ret = aplwc_new(&aplwc, fns); + aplwc = aplwc_new(fns, &ret); if(ret) goto end; @@ -50,10 +50,9 @@ main(void) goto end; aplwc_destroy(aplwc); - aplwc = NULL; fns.alloc = NULL; - ret = aplwc_new(&aplwc, fns); + aplwc = aplwc_new(fns, &ret); if(ret == 0) goto end; err = aplwc_errstr_rc(ret); diff --git a/tests/aplwc_eval.c b/tests/aplwc_eval.c index 68ea4a8..3fd8c27 100644 --- a/tests/aplwc_eval.c +++ b/tests/aplwc_eval.c @@ -23,8 +23,8 @@ main(int argc, char *argv[]) { 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; @@ -56,7 +56,7 @@ main(int argc, char *argv[]) fns.alloc = my_alloc; fns.dealloc = my_dealloc; - ret = aplwc_new(&aplwc, fns); + aplwc = aplwc_new(fns, &ret); if(ret) return 1; @@ -66,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_read.c b/tests/aplwc_read.c index 42a47c2..d090494 100644 --- a/tests/aplwc_read.c +++ b/tests/aplwc_read.c @@ -24,7 +24,7 @@ main(int argc, char *argv[]) struct aplwc_fns fns; char *input; struct aplwc *aplwc; - struct aplwc_line *line; + AplwcLine line; enum aplwc_rc ret; FILE *f; long input_size; @@ -53,12 +53,12 @@ main(int argc, char *argv[]) return 1; input[input_size] = 0; - ret = aplwc_new(&aplwc, fns); + 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 4f9f2a4..367db5d 100644 --- a/tests/aplwc_utf8.c +++ b/tests/aplwc_utf8.c @@ -35,7 +35,7 @@ int main(void) { struct aplwc *aplwc; - struct aplwc_line *line; + AplwcLine line; struct aplwc_fns fns; enum aplwc_rc ret; size_t i; @@ -62,13 +62,13 @@ main(void) fns.alloc = my_alloc; fns.dealloc = my_dealloc; - ret = aplwc_new(&aplwc, fns); + 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; @@ -77,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); } -- cgit v1.2.3 From f9f9b10c1d17077632d7a09e447e629b8d33b23d Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 31 Aug 2026 20:21:54 +0000 Subject: A little bit of testing FossilOrigin-Name: 70deba994bb488d4aa5df36577d1e184d6651a3edeff042e9666f54589cdc6f9 --- tests/scripts/1.aplwc | 5 ----- tests/scripts/2.aplwc | 9 --------- tests/scripts/bad/1.aplwc | 1 + tests/scripts/bad/2.aplwc | 1 + tests/scripts/bad/3.aplwc | 1 + tests/scripts/good/1.aplwc | 5 +++++ tests/scripts/good/2.aplwc | 9 +++++++++ 7 files changed, 17 insertions(+), 14 deletions(-) delete mode 100755 tests/scripts/1.aplwc delete mode 100755 tests/scripts/2.aplwc create mode 100755 tests/scripts/bad/1.aplwc create mode 100755 tests/scripts/bad/2.aplwc create mode 100755 tests/scripts/bad/3.aplwc create mode 100755 tests/scripts/good/1.aplwc create mode 100755 tests/scripts/good/2.aplwc (limited to 'tests') diff --git a/tests/scripts/1.aplwc b/tests/scripts/1.aplwc deleted file mode 100755 index e101d02..0000000 --- a/tests/scripts/1.aplwc +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env aplwc-repl - -∇ run -⎕←40 + 2 -∇ diff --git a/tests/scripts/2.aplwc b/tests/scripts/2.aplwc deleted file mode 100755 index e60e717..0000000 --- a/tests/scripts/2.aplwc +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env aplwc-repl - -∇ run - foo 123 -∇ - -∇ foo x - ⎕←x+x -∇ 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/good/1.aplwc b/tests/scripts/good/1.aplwc new file mode 100755 index 0000000..e101d02 --- /dev/null +++ b/tests/scripts/good/1.aplwc @@ -0,0 +1,5 @@ +#!/usr/bin/env aplwc-repl + +∇ run +⎕←40 + 2 +∇ diff --git a/tests/scripts/good/2.aplwc b/tests/scripts/good/2.aplwc new file mode 100755 index 0000000..e60e717 --- /dev/null +++ b/tests/scripts/good/2.aplwc @@ -0,0 +1,9 @@ +#!/usr/bin/env aplwc-repl + +∇ run + foo 123 +∇ + +∇ foo x + ⎕←x+x +∇ -- cgit v1.2.3