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