/* Copyright (c) 2024, Peter McGoron * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1) Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2) Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "uns.h" #include "cheney_c89.h" /* This file sets up the environment for a test. * * Each test is compiled as a separate program to isolate tests portably. * A test suite is a shell script (or batch file or whatever you want...) */ static void oom(struct uns_gc *gc) { (void)gc; fprintf(stderr, "failed: OOM\n"); exit(1); } static void after_gc(struct uns_gc *gc) { fprintf(stderr, "The garbage collector has run %ld times\n" "\tbefore collection: %lu\n" "\tafter collection: %lu\n", gc->collection_number, gc->before_collection, gc->after_collection ); if (gc->after_collection >= gc->before_collection/2) gc->next_alloc *= 2; } extern int test(struct uns_gc *gc); int main(void) { static struct uns_gc gc; int i; gc.next_alloc = 1024; gc.ctx = malloc(uns_cheney_c89_ctx_size); gc.after_gc = after_gc; gc.oom = oom; if (!gc.ctx) return 1; if (!uns_cheney_c89_init(&gc)) return 2; gc.next_alloc = 2048; i = test(&gc); gc.deinit(&gc); return i; }