1 module bdwgc; 2 version (D_BetterC) 3 { 4 version (LDC) 5 { 6 pragma(LDC_no_moduleinfo); 7 pragma(LDC_no_typeinfo); 8 } 9 public import gc; 10 } 11 else 12 { 13 public import cimport; 14 } 15 16 version (Windows) 17 { 18 private import core.stdc.stdio : printf; 19 20 alias GC_printf = printf; 21 } 22 else 23 { 24 pragma(printf) 25 extern (C) void GC_printf(const(char)* format, ...) @trusted @nogc nothrow; 26 } 27 28 @("GC initialization") 29 @system unittest 30 { 31 GC_init(); 32 33 for (auto i = 0; i < 1024; i++) 34 { 35 auto mem = cast(size_t*) GC_malloc(size_t.sizeof * 4); 36 37 *(mem + 0) = 0; 38 *(mem + 1) = 1; 39 *(mem + 2) = 2; 40 *(mem + 3) = 3; 41 42 assert(*(mem++) == 0); 43 assert(*(mem++) == 1); 44 assert(*(mem++) == 2); 45 assert(*(mem++) == 3); 46 } 47 } 48 49 @("GC incremental") 50 @system unittest 51 { 52 GC_init(); 53 GC_enable_incremental(); 54 55 for (auto i = 0; i < 1024; i++) 56 { 57 auto mem = GC_malloc(size_t.sizeof * 4); 58 GC_free(mem); 59 } 60 }