| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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<B>;
- using UniqueB = Core::UniquePointer<B>;
- 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<const UniqueB&>(p) == nullptr);
- }
- static void testCall() {
- UniqueB p(new B());
- Core::testFalse(p->b);
- p->test();
- Core::testTrue(p->b);
- Core::testTrue(static_cast<const UniqueB&>(p)->b);
- }
- void testUniquePointer() {
- testDestroy();
- testMoveConstructDestroys();
- testMoveDestroys();
- testEmpty();
- testCall();
- }
|