import lib; void testEH() { bool passed; try lib.throwException(); catch (Exception e) passed = true; assert(passed); passed = false; assert(lib.collectException({throw new Exception(null);}) !is null); assert(lib.collectException({lib.throwException();}) !is null); } void testGC() { import core.memory; lib.alloc(); lib.tls_alloc(); lib.access(); lib.tls_access(); GC.collect(); lib.tls_access(); lib.access(); lib.tls_free(); lib.free(); } import core.atomic : atomicOp; shared static this() { assert(lib.shared_static_ctor == 1); } shared static ~this() { assert(lib.shared_static_dtor == 0); } shared uint static_ctor, static_dtor; static this() { assert(lib.static_ctor == atomicOp!"+="(static_ctor, 1)); } static ~this() { assert(lib.static_dtor + 1 == atomicOp!"+="(static_dtor, 1)); } void testInit() { import core.thread; assert(lib.static_ctor == 1); assert(lib.static_dtor == 0); static void foo() { assert(lib.shared_static_ctor == 1); assert(lib.shared_static_dtor == 0); assert(lib.static_ctor == 2); assert(lib.static_dtor == 0); } auto thr = new Thread(&foo); thr.start(); assert(thr.join() is null); assert(lib.shared_static_ctor == 1); assert(lib.shared_static_dtor == 0); assert(lib.static_ctor == 2); assert(lib.static_dtor == 1); } void main() { testEH(); testGC(); testInit(); } |