summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorpeter <peter@pmikkelsen.com>2026-08-31 20:22:47 +0000
committerpeter <peter@pmikkelsen.com>2026-08-31 20:22:47 +0000
commit8b0beb9e6a57c1d4f1e7b0b06523dd0fc538771a (patch)
tree9bb8b689020d5098ea3c31251ddcd2fbb9524a7c /tests
parentd361abaeb8dcf19446a9322737ea600b22568a5b (diff)
parentf9f9b10c1d17077632d7a09e447e629b8d33b23d (diff)
Merge memory manager changes into trunk
FossilOrigin-Name: af583e3ba70b2d10efdead8e03a42fe5c1b94d6b387522833606c138b527a653
Diffstat (limited to 'tests')
-rw-r--r--tests/aplwc_errstr.c58
-rw-r--r--tests/aplwc_eval.c33
-rw-r--r--tests/aplwc_new.c26
-rw-r--r--tests/aplwc_read.c28
-rw-r--r--tests/aplwc_utf8.c31
-rwxr-xr-xtests/scripts/bad/1.aplwc1
-rwxr-xr-xtests/scripts/bad/2.aplwc1
-rwxr-xr-xtests/scripts/bad/3.aplwc1
-rwxr-xr-xtests/scripts/good/1.aplwc (renamed from tests/scripts/1.aplwc)0
-rwxr-xr-xtests/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