module Tests; import Core.Test; import Core.UniquePointer; import Core.Meta; struct B final { static int instances; bool b = false; B() { instances++; } ~B() { instances--; } void test() { b = true; } }; int B::instances = 0; template class Core::UniquePointer; using UniqueB = Core::UniquePointer; static void testDestroy() { { UniqueB p(new B()); Core::test(1, B::instances); } Core::test(0, B::instances); } static void testMoveConstructDestroys() { UniqueB p1(new B()); Core::test(1, B::instances); UniqueB p2(Core::move(p1)); Core::test(1, B::instances); p2 = nullptr; Core::test(0, B::instances); } static void testMoveDestroys() { { UniqueB p1(new B()); UniqueB p2(new B()); Core::test(2, B::instances); p1 = Core::move(p2); Core::test(1, B::instances); } Core::test(0, B::instances); } static void testEmpty() { UniqueB p; Core::testTrue(p == nullptr); Core::testTrue(static_cast(p) == nullptr); } static void testCall() { UniqueB p(new B()); Core::testFalse(p->b); p->test(); Core::testTrue(p->b); Core::testTrue(static_cast(p)->b); } void testUniquePointer() { testDestroy(); testMoveConstructDestroys(); testMoveDestroys(); testEmpty(); testCall(); }