#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 { char *some_dang_string = pk_new(64); 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; }