1import lib; 2 3void testEH() 4{ 5 bool passed; 6 try 7 lib.throwException(); 8 catch (Exception e) 9 passed = true; 10 assert(passed); passed = false; 11 12 assert(lib.collectException({throw new Exception(null);}) !is null); 13 assert(lib.collectException({lib.throwException();}) !is null); 14} 15 16void testGC() 17{ 18 import core.memory; 19 lib.alloc(); 20 lib.tls_alloc(); 21 lib.access(); 22 lib.tls_access(); 23 GC.collect(); 24 lib.tls_access(); 25 lib.access(); 26 lib.tls_free(); 27 lib.free(); 28} 29 30import core.atomic : atomicOp; 31shared static this() { assert(lib.shared_static_ctor == 1); } 32shared static ~this() { assert(lib.shared_static_dtor == 0); } 33shared uint static_ctor, static_dtor; 34static this() { assert(lib.static_ctor == atomicOp!"+="(static_ctor, 1)); } 35static ~this() { assert(lib.static_dtor + 1 == atomicOp!"+="(static_dtor, 1)); } 36 37void testInit() 38{ 39 import core.thread; 40 41 assert(lib.static_ctor == 1); 42 assert(lib.static_dtor == 0); 43 static void foo() 44 { 45 assert(lib.shared_static_ctor == 1); 46 assert(lib.shared_static_dtor == 0); 47 assert(lib.static_ctor == 2); 48 assert(lib.static_dtor == 0); 49 } 50 auto thr = new Thread(&foo); 51 thr.start(); 52 assert(thr.join() is null); 53 assert(lib.shared_static_ctor == 1); 54 assert(lib.shared_static_dtor == 0); 55 assert(lib.static_ctor == 2); 56 assert(lib.static_dtor == 1); 57} 58 59void main() 60{ 61 testEH(); 62 testGC(); 63 testInit(); 64} 65