| t/iptr.cc | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 440 | 440 | 100.0 |
| branch | 1566 | 3848 | 40.7 |
| condition | n/a | ||
| subroutine | n/a | ||
| pod | n/a | ||
| total | 2006 | 4288 | 46.7 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | #include "test.h" | ||||||
| 2 | #include |
||||||
| 3 | |||||||
| 4 | using panda::iptr; | ||||||
| 5 | using panda::weak_iptr; | ||||||
| 6 | using test::Tracer; | ||||||
| 7 | using panda::Refcnt; | ||||||
| 8 | using panda::Refcntd; | ||||||
| 9 | |||||||
| 10 | static int on_delete_calls = 0; | ||||||
| 11 | |||||||
| 12 | 187 | 50 | struct Test : Tracer, Refcnt { | ||||
| 50 | |||||||
| 13 | 48 | 50 | using Tracer::Tracer; | ||||
| 14 | }; | ||||||
| 15 | |||||||
| 16 | 82 | 50 | struct TestChild : Test { | ||||
| 17 | 38 | using Test::Test; | |||||
| 18 | }; | ||||||
| 19 | |||||||
| 20 | 5 | 50 | struct TestDel : Tracer, Refcntd { | ||||
| 50 | |||||||
| 21 | using Tracer::Tracer; | ||||||
| 22 | |||||||
| 23 | 1 | void on_delete () noexcept override { on_delete_calls++; } | |||||
| 24 | }; | ||||||
| 25 | |||||||
| 26 | 4 | 50 | struct TestRes : Tracer, Refcntd { | ||||
| 27 | using Tracer::Tracer; | ||||||
| 28 | bool resurected; | ||||||
| 29 | |||||||
| 30 | 1 | 50 | TestRes () : resurected() {} | ||||
| 31 | |||||||
| 32 | 2 | void on_delete () noexcept override { | |||||
| 33 | 2 | on_delete_calls++; | |||||
| 34 | 2 | 100 | if (resurected) return; | ||||
| 35 | 1 | retain(); | |||||
| 36 | 1 | resurected = true; | |||||
| 37 | } | ||||||
| 38 | }; | ||||||
| 39 | |||||||
| 40 | using TestSP = iptr |
||||||
| 41 | using TestChildSP = iptr |
||||||
| 42 | using TestDelSP = iptr |
||||||
| 43 | using TestResSP = iptr |
||||||
| 44 | using TestWP = weak_iptr |
||||||
| 45 | using TestChildWP = weak_iptr |
||||||
| 46 | |||||||
| 47 | struct A : Refcnt {}; | ||||||
| 48 | struct AA : A {}; | ||||||
| 49 | struct B : Refcnt {}; | ||||||
| 50 | |||||||
| 51 | 2 | static int foo (iptr) { | |||||
| 52 | 2 | return 10; | |||||
| 53 | } | ||||||
| 54 | |||||||
| 55 | 1 | static int foo (iptr) { | |||||
| 56 | 1 | return 20; | |||||
| 57 | } | ||||||
| 58 | |||||||
| 59 | 64 | TEST_CASE("iptr", "[iptr]") { | |||||
| 60 | 46 | Tracer::reset(); | |||||
| 61 | 46 | on_delete_calls = 0; | |||||
| 62 | |||||||
| 63 | 52 | 50 | SECTION("ctor") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 64 | 7 | 50 | SECTION("empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 65 | { | ||||||
| 66 | 2 | auto p = TestSP(); | |||||
| 67 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 68 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 69 | } | ||||||
| 70 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 71 | } | ||||||
| 72 | |||||||
| 73 | 7 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 74 | { | ||||||
| 75 | 2 | 50 | auto p = TestSP(new Test()); | ||||
| 50 | |||||||
| 76 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 77 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 78 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 79 | } | ||||||
| 80 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 81 | } | ||||||
| 82 | |||||||
| 83 | 7 | 50 | SECTION("from iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 84 | { | ||||||
| 85 | 2 | 50 | auto src = TestSP(new Test()); | ||||
| 50 | |||||||
| 86 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 87 | 2 | auto p(src); | |||||
| 88 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 89 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 90 | 1 | 50 | REQUIRE(p->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 91 | } | ||||||
| 92 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 93 | } | ||||||
| 94 | |||||||
| 95 | 7 | 50 | SECTION("from foreign iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 96 | { | ||||||
| 97 | 2 | 50 | auto src = TestChildSP(new TestChild()); | ||||
| 50 | |||||||
| 98 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 99 | 2 | TestSP p(src); | |||||
| 100 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 101 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 102 | 1 | 50 | REQUIRE(p->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 103 | } | ||||||
| 104 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 105 | } | ||||||
| 106 | |||||||
| 107 | 7 | 50 | SECTION("move from iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 108 | { | ||||||
| 109 | 2 | 50 | auto src = TestSP(new Test(123)); | ||||
| 50 | |||||||
| 110 | 2 | auto p = TestSP(std::move(src)); | |||||
| 111 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 112 | 1 | 50 | REQUIRE(!src); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 113 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 114 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 115 | 1 | 50 | REQUIRE(p->value == 123); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 116 | } | ||||||
| 117 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 118 | } | ||||||
| 119 | |||||||
| 120 | 7 | 50 | SECTION("move from foreign iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 121 | { | ||||||
| 122 | 2 | 50 | auto src = TestChildSP(new TestChild(321)); | ||||
| 50 | |||||||
| 123 | 2 | auto p = TestSP(std::move(src)); | |||||
| 124 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 125 | 1 | 50 | REQUIRE(!src); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 126 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 127 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 128 | 1 | 50 | REQUIRE(p->value == 321); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 129 | } | ||||||
| 130 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 131 | } | ||||||
| 132 | } | ||||||
| 133 | |||||||
| 134 | 49 | 50 | SECTION("reset") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 135 | 4 | 50 | SECTION("no args") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 136 | 2 | 50 | auto p = TestSP(new Test()); | ||||
| 50 | |||||||
| 137 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 138 | 1 | p.reset(); | |||||
| 139 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 140 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 141 | } | ||||||
| 142 | |||||||
| 143 | 4 | 50 | SECTION("with same object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 144 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 145 | 1 | 50 | auto o = new Test(2); | ||||
| 50 | |||||||
| 146 | 1 | 50 | p.reset(o); | ||||
| 147 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 148 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 149 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 150 | 1 | p.reset(); | |||||
| 151 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 152 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 153 | } | ||||||
| 154 | |||||||
| 155 | 4 | 50 | SECTION("foreign object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 156 | 2 | 50 | auto p = TestSP(new Test(10)); | ||||
| 50 | |||||||
| 157 | 1 | 50 | auto o = new TestChild(20); | ||||
| 50 | |||||||
| 158 | 1 | 50 | p.reset(o); | ||||
| 159 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 160 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 161 | 1 | 50 | REQUIRE(p->value == 20); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 162 | 1 | p.reset(); | |||||
| 163 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 164 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 165 | } | ||||||
| 166 | } | ||||||
| 167 | |||||||
| 168 | 60 | 50 | SECTION("assign") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 169 | 16 | 50 | SECTION("NULL") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 170 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 171 | 2 | TestSP p; | |||||
| 172 | 1 | p = NULL; | |||||
| 173 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 174 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 175 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 176 | 1 | p.reset(); | |||||
| 177 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 178 | } | ||||||
| 179 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 180 | 2 | 50 | auto p = TestSP(new Test()); | ||||
| 50 | |||||||
| 181 | 1 | p = NULL; | |||||
| 182 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 183 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 184 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 185 | 1 | p.reset(); | |||||
| 186 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 187 | } | ||||||
| 188 | } | ||||||
| 189 | |||||||
| 190 | 16 | 50 | SECTION("same object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 191 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 192 | 2 | TestSP p; | |||||
| 193 | 1 | 50 | p = new Test(2); | ||||
| 50 | |||||||
| 194 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 195 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 196 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 197 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 198 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 199 | 1 | p.reset(); | |||||
| 200 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 201 | } | ||||||
| 202 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 203 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 204 | 1 | 50 | p = new Test(2); | ||||
| 50 | |||||||
| 205 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 206 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 207 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 208 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 209 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 210 | 1 | p.reset(); | |||||
| 211 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 212 | } | ||||||
| 213 | } | ||||||
| 214 | |||||||
| 215 | 16 | 50 | SECTION("foreign object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 216 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 217 | 2 | TestSP p; | |||||
| 218 | 1 | 50 | p = new TestChild(2); | ||||
| 50 | |||||||
| 219 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 220 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 221 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 222 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 223 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 224 | 1 | p.reset(); | |||||
| 225 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 226 | } | ||||||
| 227 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 228 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 229 | 1 | 50 | p = new TestChild(2); | ||||
| 50 | |||||||
| 230 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 231 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 232 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 233 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 234 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 235 | 1 | p.reset(); | |||||
| 236 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 237 | } | ||||||
| 238 | } | ||||||
| 239 | |||||||
| 240 | 16 | 50 | SECTION("same iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 241 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 242 | 2 | TestSP p; | |||||
| 243 | 2 | 50 | auto p2 = TestSP(new Test(2)); | ||||
| 50 | |||||||
| 244 | 1 | p = p2; | |||||
| 245 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 246 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 247 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 248 | 1 | 50 | REQUIRE(p2->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 249 | 1 | p.reset(); | |||||
| 250 | 1 | 50 | REQUIRE(p2->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 251 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 252 | 1 | p2.reset(); | |||||
| 253 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 254 | } | ||||||
| 255 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 256 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 257 | 2 | 50 | auto p2 = TestSP(new Test(2)); | ||||
| 50 | |||||||
| 258 | 1 | p = p2; | |||||
| 259 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 260 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 261 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 262 | 1 | 50 | REQUIRE(p2->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 263 | 1 | p.reset(); | |||||
| 264 | 1 | 50 | REQUIRE(p2->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 265 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 266 | 1 | p2.reset(); | |||||
| 267 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 268 | } | ||||||
| 269 | } | ||||||
| 270 | |||||||
| 271 | 16 | 50 | SECTION("foreign iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 272 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 273 | 2 | TestSP p; | |||||
| 274 | 2 | 50 | auto p2 = TestChildSP(new TestChild(2)); | ||||
| 50 | |||||||
| 275 | 1 | p = p2; | |||||
| 276 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 277 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 278 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 279 | 1 | 50 | REQUIRE(p2->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 280 | 1 | p.reset(); | |||||
| 281 | 1 | 50 | REQUIRE(p2->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 282 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 283 | 1 | p2.reset(); | |||||
| 284 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 285 | } | ||||||
| 286 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 287 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 288 | 2 | 50 | auto p2 = TestChildSP(new TestChild(2)); | ||||
| 50 | |||||||
| 289 | 1 | p = p2; | |||||
| 290 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 291 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 292 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 293 | 1 | 50 | REQUIRE(p2->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 294 | 1 | p.reset(); | |||||
| 295 | 1 | 50 | REQUIRE(p2->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 296 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 297 | 1 | p2.reset(); | |||||
| 298 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 299 | } | ||||||
| 300 | } | ||||||
| 301 | |||||||
| 302 | 16 | 50 | SECTION("move same iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 303 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 304 | 2 | TestSP p; | |||||
| 305 | 2 | 50 | auto p2 = TestSP(new Test(2)); | ||||
| 50 | |||||||
| 306 | 1 | p = std::move(p2); | |||||
| 307 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 308 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 309 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 310 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 311 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 312 | 1 | 50 | REQUIRE(!p2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 313 | 1 | p.reset(); | |||||
| 314 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 315 | 1 | p2.reset(); | |||||
| 316 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 317 | } | ||||||
| 318 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 319 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 320 | 2 | 50 | auto p2 = TestSP(new Test(2)); | ||||
| 50 | |||||||
| 321 | 1 | p = std::move(p2); | |||||
| 322 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 323 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 324 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 325 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 326 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 327 | 1 | 50 | REQUIRE(p2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 328 | 1 | 50 | REQUIRE(p2->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 329 | 1 | 50 | REQUIRE(p2->value == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 330 | 1 | p.reset(); | |||||
| 331 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 332 | 1 | 50 | REQUIRE(p2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 333 | 1 | 50 | REQUIRE(p2->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 334 | 1 | 50 | REQUIRE(p2->value == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 335 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 336 | 1 | p2.reset(); | |||||
| 337 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 338 | } | ||||||
| 339 | } | ||||||
| 340 | |||||||
| 341 | 16 | 50 | SECTION("move foreign iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 342 | 3 | 50 | SECTION("from empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 343 | 2 | TestSP p; | |||||
| 344 | 2 | 50 | auto p2 = TestChildSP(new TestChild(2)); | ||||
| 50 | |||||||
| 345 | 1 | p = std::move(p2); | |||||
| 346 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 347 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 348 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 349 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 350 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 351 | 1 | 50 | REQUIRE(!p2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 352 | 1 | p.reset(); | |||||
| 353 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 354 | 1 | p2.reset(); | |||||
| 355 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 356 | } | ||||||
| 357 | 3 | 50 | SECTION("from object") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 358 | 2 | 50 | auto p = TestSP(new Test(1)); | ||||
| 50 | |||||||
| 359 | 2 | 50 | auto p2 = TestChildSP(new TestChild(2)); | ||||
| 50 | |||||||
| 360 | 1 | p = std::move(p2); | |||||
| 361 | 1 | 50 | REQUIRE(Tracer::ctor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 362 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 363 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 364 | 1 | 50 | REQUIRE(p->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 365 | 1 | 50 | REQUIRE(p->value == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 366 | 1 | 50 | REQUIRE(!p2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 367 | 1 | p.reset(); | |||||
| 368 | 1 | 50 | REQUIRE(!p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 369 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 370 | 1 | p2.reset(); | |||||
| 371 | 1 | 50 | REQUIRE(Tracer::dtor_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 372 | } | ||||||
| 373 | } | ||||||
| 374 | } | ||||||
| 375 | |||||||
| 376 | 47 | 50 | SECTION("dereference") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 377 | 1 | 50 | auto obj = new Test(123); | ||||
| 50 | |||||||
| 378 | 2 | auto p = TestSP(obj); | |||||
| 379 | 1 | 50 | REQUIRE(p->value == 123); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 380 | 1 | 50 | REQUIRE((*p).value == 123); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 381 | 1 | 50 | REQUIRE(p.get()->value == 123); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 382 | 1 | 50 | REQUIRE(p.get() == obj); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 383 | 1 | 50 | REQUIRE(((Test*)p)->value == 123); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 384 | 1 | 50 | REQUIRE((Test*)p == obj); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 385 | 1 | 50 | REQUIRE(p); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 386 | 1 | 50 | REQUIRE((bool)p == true); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 387 | } | ||||||
| 388 | |||||||
| 389 | 47 | 50 | SECTION("ops") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 390 | 1 | 50 | auto ptr = new Test(123); | ||||
| 50 | |||||||
| 391 | 2 | auto sp1 = TestSP(ptr); | |||||
| 392 | 2 | auto sp2 = TestSP(ptr); | |||||
| 393 | 1 | 50 | CHECK(sp1 == sp2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 394 | 1 | 50 | CHECK(sp1 == ptr); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 395 | } | ||||||
| 396 | |||||||
| 397 | 64 | 50 | SECTION("weak") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 398 | 26 | 50 | SECTION("ctor") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 399 | 9 | 50 | SECTION("empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 400 | 2 | 50 | TestWP empty; | ||||
| 401 | 1 | 50 | CHECK_FALSE(empty); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 402 | } | ||||||
| 403 | 10 | 50 | SECTION("from iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 404 | 3 | 50 | SECTION("base") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 405 | 2 | 50 | TestSP obj = new Test(123); | ||||
| 50 | |||||||
| 406 | 1 | 50 | CHECK(obj->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 407 | 2 | 50 | TestWP weak = obj; | ||||
| 408 | 1 | 50 | CHECK(obj->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 409 | } | ||||||
| 410 | 3 | 50 | SECTION("derived") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 411 | 2 | 50 | TestChildSP obj = new TestChild(123); | ||||
| 50 | |||||||
| 412 | 2 | 50 | TestWP weak = obj; | ||||
| 413 | 1 | 50 | CHECK(obj->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 414 | } | ||||||
| 415 | } | ||||||
| 416 | 10 | 50 | SECTION("from bad") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 417 | 3 | 50 | SECTION("bad iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 418 | 2 | TestSP nothing; | |||||
| 419 | 2 | 50 | TestWP weak(nothing); | ||||
| 420 | 1 | 50 | CHECK_FALSE(weak); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 421 | } | ||||||
| 422 | |||||||
| 423 | 3 | 50 | SECTION("bad weak_iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 424 | 2 | 50 | TestWP nothing; | ||||
| 425 | 2 | 50 | TestWP weak(nothing); | ||||
| 426 | 1 | 50 | CHECK_FALSE(weak); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 427 | } | ||||||
| 428 | } | ||||||
| 429 | |||||||
| 430 | 11 | 50 | SECTION("from weak") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 431 | 6 | 50 | TestSP base = new Test(123); | ||||
| 50 | |||||||
| 432 | 6 | 50 | TestChildSP der = new TestChild(123); | ||||
| 50 | |||||||
| 433 | 6 | 50 | TestWP wbase = base; | ||||
| 434 | 6 | 50 | TestChildWP wder = der; | ||||
| 435 | |||||||
| 436 | 4 | 50 | SECTION("base") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 437 | 2 | 50 | TestWP weak = wbase; | ||||
| 438 | 1 | 50 | CHECK(weak.lock() == base); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 439 | 1 | 50 | CHECK(base->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 440 | } | ||||||
| 441 | 4 | 50 | SECTION("derived") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 442 | 2 | TestWP weak = wder; | |||||
| 443 | 1 | 50 | CHECK(weak.lock() == der); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 444 | 1 | 50 | CHECK(der->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 445 | } | ||||||
| 446 | |||||||
| 447 | 4 | 50 | SECTION("move") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 448 | 2 | 50 | TestWP moved(std::move(wbase)); | ||||
| 449 | 1 | 50 | CHECK(moved.weak_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 450 | 1 | 50 | CHECK(moved.use_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 451 | } | ||||||
| 452 | } | ||||||
| 453 | } | ||||||
| 454 | |||||||
| 455 | 24 | 50 | SECTION("assign") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 456 | 12 | 50 | TestWP empty; | ||||
| 457 | 12 | 50 | TestSP base = new Test(123); | ||||
| 50 | |||||||
| 458 | 12 | 50 | TestChildSP der = new TestChild(123); | ||||
| 50 | |||||||
| 459 | 12 | 50 | TestWP wbase = base; | ||||
| 460 | 12 | 50 | TestChildWP wder = der; | ||||
| 461 | |||||||
| 462 | 12 | 50 | TestWP wbase2; | ||||
| 463 | 12 | 50 | TestChildWP wder2; | ||||
| 464 | |||||||
| 465 | 7 | 50 | SECTION("empty") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 466 | 2 | 50 | TestWP e2; | ||||
| 467 | 1 | 50 | e2 = empty; | ||||
| 468 | 1 | 50 | CHECK_FALSE(e2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 469 | } | ||||||
| 470 | |||||||
| 471 | 7 | 50 | SECTION("base") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 472 | 1 | 50 | wbase2 = base; | ||||
| 473 | 1 | 50 | CHECK(wbase2.lock() == base); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 474 | 1 | 50 | CHECK(wbase2.weak_count() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 475 | 1 | 50 | wbase2 = der; | ||||
| 476 | 1 | 50 | CHECK(wbase2.lock() == der); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 477 | 1 | 50 | CHECK(wbase2.weak_count() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 478 | 1 | 50 | wbase2 = wbase; | ||||
| 479 | 1 | 50 | CHECK(wbase2.lock() == base); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 480 | 1 | 50 | CHECK(wbase2.weak_count() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 481 | 1 | 50 | wbase2 = wder; | ||||
| 482 | 1 | 50 | CHECK(wbase2.lock() == der); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 483 | 1 | 50 | CHECK(wbase2.weak_count() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 484 | } | ||||||
| 485 | 7 | 50 | SECTION("derived") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 486 | 1 | 50 | wder2 = der; | ||||
| 487 | 1 | 50 | CHECK(wder2.lock() == der); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 488 | 1 | 50 | wder2 = wder; | ||||
| 489 | 1 | 50 | CHECK(wder2.lock() == der); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 490 | 1 | 50 | CHECK(der->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 491 | } | ||||||
| 492 | |||||||
| 493 | 7 | 50 | SECTION("move") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 494 | 1 | 50 | wbase2 = std::move(wbase); | ||||
| 495 | 1 | 50 | CHECK(wbase2.lock() == base); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 496 | 1 | 50 | CHECK(wbase2.weak_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 497 | 1 | wbase2 = std::move(wder); | |||||
| 498 | 1 | 50 | CHECK(wbase2.lock() == der); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 499 | 1 | 50 | CHECK(wbase2.weak_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 500 | } | ||||||
| 501 | |||||||
| 502 | 8 | 50 | SECTION("from bad") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 503 | 3 | 50 | SECTION("bad iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 504 | 2 | TestSP nothing; | |||||
| 505 | 1 | 50 | wbase2 = nothing; | ||||
| 506 | } | ||||||
| 507 | |||||||
| 508 | 3 | 50 | SECTION("bad weak_iptr") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 509 | 2 | 50 | TestWP nothing; | ||||
| 510 | 1 | 50 | wbase2 = nothing; | ||||
| 511 | } | ||||||
| 512 | 2 | 50 | CHECK_FALSE(wbase2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 513 | 2 | 50 | CHECK_FALSE(wbase2.lock()); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 514 | } | ||||||
| 515 | } | ||||||
| 516 | |||||||
| 517 | 20 | 50 | SECTION("lock") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 518 | 4 | TestSP obj; | |||||
| 519 | 4 | 50 | TestWP weak; | ||||
| 520 | 2 | 50 | CHECK_FALSE(weak.lock()); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 521 | |||||||
| 522 | 3 | 50 | SECTION("base") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 523 | 1 | 50 | obj = new Test(123); | ||||
| 50 | |||||||
| 524 | } | ||||||
| 525 | 3 | 50 | SECTION("derived") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 526 | 1 | 50 | obj = new TestChild(123); | ||||
| 50 | |||||||
| 527 | } | ||||||
| 528 | 2 | 50 | weak = obj; | ||||
| 529 | |||||||
| 530 | 4 | 50 | if (TestSP tmp = weak.lock()) { | ||||
| 50 | |||||||
| 531 | 2 | 50 | CHECK(obj->refcnt() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 532 | 2 | 50 | CHECK(obj == tmp); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 533 | } | ||||||
| 534 | 2 | 50 | CHECK(obj->refcnt() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 535 | 2 | obj.reset(); | |||||
| 536 | 2 | 50 | CHECK(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 537 | 2 | 50 | CHECK(weak.expired()); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 538 | 2 | 50 | CHECK_FALSE(weak.lock()); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 539 | } | ||||||
| 540 | |||||||
| 541 | 19 | 50 | SECTION("use_count") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 542 | 2 | 50 | TestWP weak; | ||||
| 543 | 1 | 50 | CHECK(weak.use_count() == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 544 | 1 | 50 | CHECK(weak.weak_count() == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 545 | |||||||
| 546 | 2 | 50 | TestSP obj = new Test; | ||||
| 50 | |||||||
| 547 | 1 | 50 | weak = obj; | ||||
| 548 | 1 | 50 | CHECK(weak.use_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 549 | 1 | 50 | CHECK(weak.weak_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 550 | |||||||
| 551 | 2 | 50 | TestWP w2 = weak; | ||||
| 552 | 1 | 50 | CHECK(weak.use_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 553 | 1 | 50 | CHECK(weak.weak_count() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 554 | |||||||
| 555 | 1 | obj.reset(); | |||||
| 556 | 1 | 50 | CHECK(weak.use_count() == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 557 | 1 | 50 | CHECK(weak.weak_count() == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 558 | } | ||||||
| 559 | |||||||
| 560 | 19 | 50 | SECTION("weak generalization") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 561 | 2 | 50 | TestSP obj = new Test; | ||||
| 50 | |||||||
| 562 | 2 | 50 | panda::weak |
||||
| 563 | 1 | 50 | CHECK(weak.use_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 564 | 1 | 50 | CHECK(weak.weak_count() == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 565 | |||||||
| 566 | // check that weak |
||||||
| 567 | 1 | 50 | weak = panda::weak |
||||
| 50 | |||||||
| 568 | 1 | 50 | CHECK(weak.weak_count() == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 569 | |||||||
| 570 | 1 | 50 | weak = TestWP(); | ||||
| 50 | |||||||
| 571 | 1 | 50 | CHECK(weak.weak_count() == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 572 | } | ||||||
| 573 | |||||||
| 574 | 18 | 50 | CHECK(Tracer::dtor_calls == Tracer::ctor_total()); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 575 | } | ||||||
| 576 | |||||||
| 577 | 48 | 50 | SECTION("Refcntd") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 578 | 3 | 50 | SECTION("on_delete") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 579 | 2 | 50 | TestDelSP obj = new TestDel(); | ||||
| 50 | |||||||
| 580 | 1 | obj.reset(); | |||||
| 581 | 1 | 50 | CHECK(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 582 | 1 | 50 | CHECK(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 583 | 1 | 50 | CHECK(on_delete_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 584 | } | ||||||
| 585 | 3 | 50 | SECTION("resurect") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 586 | 1 | 50 | auto ptr = new TestRes(); | ||||
| 50 | |||||||
| 587 | 2 | TestResSP obj = ptr; | |||||
| 588 | 1 | obj.reset(); | |||||
| 589 | 1 | 50 | CHECK(Tracer::ctor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 590 | 1 | 50 | CHECK(Tracer::dtor_calls == 0); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 591 | 1 | 50 | CHECK(on_delete_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 592 | |||||||
| 593 | 1 | ptr->release(); | |||||
| 594 | 1 | 50 | CHECK(Tracer::dtor_calls == 1); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 595 | 1 | 50 | CHECK(on_delete_calls == 2); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 596 | } | ||||||
| 597 | } | ||||||
| 598 | |||||||
| 599 | 47 | 50 | SECTION("compiles") { | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 100 | |||||||
| 600 | 1 | 50 | REQUIRE(foo(iptr(nullptr)) == 10); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 601 | 1 | 50 | REQUIRE(foo(iptr(nullptr)) == 20); | ||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 602 | 1 | 50 | REQUIRE(foo(iptr |
||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 50 | |||||||
| 0 | |||||||
| 0 | |||||||
| 603 | } | ||||||
| 604 | 118 | 50 | } | ||||
| 50 |