#include #include #include #include #include #include #include #include "gc.h" int gc_counter; int gc_ticks; void out_of_memory(void) { fprintf(stderr, "Out of memory!\n"); abort(); } int main(int argc, char **argv) { gc_root_t list_root; int count = 0; gc_init(1024, 256*1024*1024); gc_counter = 0; gc_ticks = 0; srand((unsigned int)time(NULL)); register_gc_root(&list_root, NIL); while (1) { int r = rand() & 0xffff; if (r == 0) list_root.value = to_fixnum(rand()); else if (r & 1) list_root.value = cons(to_fixnum(rand()), list_root.value); else if (r & 2) list_root.value = cons(list_root.value, to_fixnum(rand())); else if (r & 4) { list_root.value = cons(list_root.value, cons(to_fixnum(-1), NIL)); get_pair(get_pair(list_root.value)->cdr)->cdr = list_root.value; } if (gc_counter >= 1000) { fprintf(stderr, "%d collections in %0.3f seconds = %0.3f usec / GC\n", gc_counter, gc_ticks / (double)CLOCKS_PER_SEC, (1000000 * (gc_ticks / (double)CLOCKS_PER_SEC)) / gc_counter); gc_counter = gc_ticks = 0; if (++count == 10) break; } } unregister_gc_root(&list_root); return 0; } /* vim:set sw=2 expandtab: */