From 31275f4cee6f0593fc39fecef04477d4a26e8df4 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Fri, 22 Nov 2024 14:32:51 -0500 Subject: pkmem.h: test for expected assert failures --- test/pkmem.cpp | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) (limited to 'test') diff --git a/test/pkmem.cpp b/test/pkmem.cpp index cc7cf9c..8dc429a 100644 --- a/test/pkmem.cpp +++ b/test/pkmem.cpp @@ -1,10 +1,41 @@ #include "../pkmem.h" +#include +#include +#include + +static bool expected_exit = false; +static bool caught = false; +static jmp_buf jmp_env; +void +exit(int code) +{ + if (expected_exit) { + caught = true; + longjmp(jmp_env, 1); + } else { + _exit(code); + } +} +// assert() calls abort(), handle +void +handle_assert_abort(int sig) +{ + if (expected_exit) { + caught = true; + longjmp(jmp_env, 1); + } else { + _exit(1); + } +} + int main(int argc, char *argv[]) { + signal(SIGABRT, handle_assert_abort); (void)argc; (void)argv; + int i; // pk_new { @@ -12,6 +43,110 @@ int main(int argc, char *argv[]) fprintf(stdout, "some_dang_string: %p\n", some_dang_string); pk_delete(some_dang_string, 64); } + pk_memory_teardown_all(); + + // assert bucket count + do + { + int r; + r = setjmp(jmp_env); + if (r == 1) { + if (expected_exit == true && caught == true) { + expected_exit = false; + caught = false; + PK_LOGV_INF("%s: successfully caught err.\n", __FILE__); + fflush(stdout); + fflush(stderr); + break; + } else { + goto uncaught_err; + } + } + for (i = 0; i < PK_MAX_BUCKET_COUNT + 1; ++i) { + caught = false; + expected_exit = true; + pk_membucket *bkt = pk_bucket_create("lol", 1024, false); + expected_exit = false; + (void)bkt; + } + goto uncaught_err; + } + while(false); + pk_memory_teardown_all(); + + // assert no buckets available on pk_new with full memory + do + { + int r; + caught = false; + expected_exit = false; + for (i = 0; i < PK_MAX_BUCKET_COUNT; ++i) { + pk_membucket *bkt = pk_bucket_create("lol2", 1024, false); + char *asdf = pk_new(768, bkt); + (void)asdf; + } + r = setjmp(jmp_env); + if (r == 1) { + if (expected_exit == true && caught == true) { + expected_exit = false; + caught = false; + PK_LOGV_INF("%s: successfully caught err.\n", __FILE__); + fflush(stdout); + fflush(stderr); + break; + } else { + goto uncaught_err; + } + } + caught = false; + expected_exit = true; + char *asdf = pk_new(768); + (void)asdf; + expected_exit = false; + goto uncaught_err; + } + while(false); + pk_memory_teardown_all(); + + // assert no buckets available on pk_new with full memory + do + { + int r; + caught = false; + expected_exit = false; + pk_membucket *bkt = nullptr; + for (i = 0; i < PK_MAX_BUCKET_COUNT; ++i) { + bkt = pk_bucket_create("lol3", 1024, false); + char *asdf = pk_new(768, bkt); + (void)asdf; + } + r = setjmp(jmp_env); + if (r == 1) { + if (expected_exit == true && caught == true) { + expected_exit = false; + caught = false; + PK_LOGV_INF("%s: successfully caught err.\n", __FILE__); + fflush(stdout); + fflush(stderr); + break; + } else { + goto uncaught_err; + } + } + caught = false; + expected_exit = true; + char *asdf = pk_new(768, bkt); + (void)asdf; + expected_exit = false; + goto uncaught_err; + } + while(false); + pk_memory_teardown_all(); return 0; +uncaught_err: + PK_LOGV_ERR("%s: failed to catch err.\n", __FILE__); + fflush(stdout); + fflush(stderr); + return 1; } -- cgit v1.2.3