| 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(); | |
| } |