Branch Coverage

t/iptr.cc
Criterion Covered Total %
branch 1566 3848 40.7


line true false branch
12 0 55 struct Test : Tracer, Refcnt {
7 0 struct Test : Tracer, Refcnt {
13 48 0 using Tracer::Tracer;
16 0 20 struct TestChild : Test {
20 0 1 struct TestDel : Tracer, Refcntd {
1 0 struct TestDel : Tracer, Refcntd {
26 0 1 struct TestRes : Tracer, Refcntd {
30 1 0 TestRes () : resurected() {}
34 1 1 if (resurected) return;
63 46 0 SECTION("ctor") {
46 0 SECTION("ctor") {
46 0 SECTION("ctor") {
46 0 SECTION("ctor") {
6 40 SECTION("ctor") {
64 6 0 SECTION("empty") {
6 0 SECTION("empty") {
6 0 SECTION("empty") {
6 0 SECTION("empty") {
1 5 SECTION("empty") {
67 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
68 1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
0 0 REQUIRE(Tracer::ctor_calls == 0);
0 0 REQUIRE(Tracer::ctor_calls == 0);
70 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
73 6 0 SECTION("from object") {
6 0 SECTION("from object") {
6 0 SECTION("from object") {
6 0 SECTION("from object") {
1 5 SECTION("from object") {
75 1 0 auto p = TestSP(new Test());
1 0 auto p = TestSP(new Test());
76 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
77 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
78 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
80 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
83 6 0 SECTION("from iptr") {
6 0 SECTION("from iptr") {
6 0 SECTION("from iptr") {
6 0 SECTION("from iptr") {
1 5 SECTION("from iptr") {
85 1 0 auto src = TestSP(new Test());
1 0 auto src = TestSP(new Test());
86 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
88 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
89 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
90 1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
0 0 REQUIRE(p->refcnt() == 2);
0 0 REQUIRE(p->refcnt() == 2);
92 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
95 6 0 SECTION("from foreign iptr") {
6 0 SECTION("from foreign iptr") {
6 0 SECTION("from foreign iptr") {
6 0 SECTION("from foreign iptr") {
1 5 SECTION("from foreign iptr") {
97 1 0 auto src = TestChildSP(new TestChild());
1 0 auto src = TestChildSP(new TestChild());
98 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
100 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
101 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
102 1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
1 0 REQUIRE(p->refcnt() == 2);
0 0 REQUIRE(p->refcnt() == 2);
0 0 REQUIRE(p->refcnt() == 2);
104 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
107 6 0 SECTION("move from iptr") {
6 0 SECTION("move from iptr") {
6 0 SECTION("move from iptr") {
6 0 SECTION("move from iptr") {
1 5 SECTION("move from iptr") {
109 1 0 auto src = TestSP(new Test(123));
1 0 auto src = TestSP(new Test(123));
111 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
112 1 0 REQUIRE(!src);
1 0 REQUIRE(!src);
1 0 REQUIRE(!src);
1 0 REQUIRE(!src);
0 0 REQUIRE(!src);
0 0 REQUIRE(!src);
113 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
114 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
115 1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
0 0 REQUIRE(p->value == 123);
0 0 REQUIRE(p->value == 123);
117 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
120 6 0 SECTION("move from foreign iptr") {
6 0 SECTION("move from foreign iptr") {
6 0 SECTION("move from foreign iptr") {
6 0 SECTION("move from foreign iptr") {
1 5 SECTION("move from foreign iptr") {
122 1 0 auto src = TestChildSP(new TestChild(321));
1 0 auto src = TestChildSP(new TestChild(321));
124 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
125 1 0 REQUIRE(!src);
1 0 REQUIRE(!src);
1 0 REQUIRE(!src);
1 0 REQUIRE(!src);
0 0 REQUIRE(!src);
0 0 REQUIRE(!src);
126 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
127 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
128 1 0 REQUIRE(p->value == 321);
1 0 REQUIRE(p->value == 321);
1 0 REQUIRE(p->value == 321);
1 0 REQUIRE(p->value == 321);
1 0 REQUIRE(p->value == 321);
0 0 REQUIRE(p->value == 321);
0 0 REQUIRE(p->value == 321);
130 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
134 46 0 SECTION("reset") {
46 0 SECTION("reset") {
46 0 SECTION("reset") {
46 0 SECTION("reset") {
3 43 SECTION("reset") {
135 3 0 SECTION("no args") {
3 0 SECTION("no args") {
3 0 SECTION("no args") {
3 0 SECTION("no args") {
1 2 SECTION("no args") {
136 1 0 auto p = TestSP(new Test());
1 0 auto p = TestSP(new Test());
137 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
139 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
140 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
143 3 0 SECTION("with same object") {
3 0 SECTION("with same object") {
3 0 SECTION("with same object") {
3 0 SECTION("with same object") {
1 2 SECTION("with same object") {
144 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
145 1 0 auto o = new Test(2);
1 0 auto o = new Test(2);
146 1 0 p.reset(o);
147 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
148 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
149 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
151 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
152 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
155 3 0 SECTION("foreign object") {
3 0 SECTION("foreign object") {
3 0 SECTION("foreign object") {
3 0 SECTION("foreign object") {
1 2 SECTION("foreign object") {
156 1 0 auto p = TestSP(new Test(10));
1 0 auto p = TestSP(new Test(10));
157 1 0 auto o = new TestChild(20);
1 0 auto o = new TestChild(20);
158 1 0 p.reset(o);
159 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
160 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
161 1 0 REQUIRE(p->value == 20);
1 0 REQUIRE(p->value == 20);
1 0 REQUIRE(p->value == 20);
1 0 REQUIRE(p->value == 20);
1 0 REQUIRE(p->value == 20);
0 0 REQUIRE(p->value == 20);
0 0 REQUIRE(p->value == 20);
163 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
164 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
168 46 0 SECTION("assign") {
46 0 SECTION("assign") {
46 0 SECTION("assign") {
46 0 SECTION("assign") {
14 32 SECTION("assign") {
169 14 0 SECTION("NULL") {
14 0 SECTION("NULL") {
14 0 SECTION("NULL") {
14 0 SECTION("NULL") {
2 12 SECTION("NULL") {
170 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
173 1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
1 0 REQUIRE(Tracer::ctor_calls == 0);
0 0 REQUIRE(Tracer::ctor_calls == 0);
0 0 REQUIRE(Tracer::ctor_calls == 0);
174 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
175 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
177 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
179 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
180 1 0 auto p = TestSP(new Test());
1 0 auto p = TestSP(new Test());
182 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
183 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
184 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
186 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
190 14 0 SECTION("same object") {
14 0 SECTION("same object") {
14 0 SECTION("same object") {
14 0 SECTION("same object") {
2 12 SECTION("same object") {
191 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
193 1 0 p = new Test(2);
1 0 p = new Test(2);
194 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
195 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
196 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
197 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
198 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
200 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
202 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
203 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
204 1 0 p = new Test(2);
1 0 p = new Test(2);
205 1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
206 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
207 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
208 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
209 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
211 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
215 14 0 SECTION("foreign object") {
14 0 SECTION("foreign object") {
14 0 SECTION("foreign object") {
14 0 SECTION("foreign object") {
2 12 SECTION("foreign object") {
216 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
218 1 0 p = new TestChild(2);
1 0 p = new TestChild(2);
219 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
220 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
221 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
222 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
223 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
225 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
227 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
228 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
229 1 0 p = new TestChild(2);
1 0 p = new TestChild(2);
230 1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
231 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
232 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
233 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
234 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
236 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
240 14 0 SECTION("same iptr") {
14 0 SECTION("same iptr") {
14 0 SECTION("same iptr") {
14 0 SECTION("same iptr") {
2 12 SECTION("same iptr") {
241 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
243 1 0 auto p2 = TestSP(new Test(2));
1 0 auto p2 = TestSP(new Test(2));
245 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
246 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
247 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
248 1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
250 1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
251 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
253 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
255 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
256 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
257 1 0 auto p2 = TestSP(new Test(2));
1 0 auto p2 = TestSP(new Test(2));
259 1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
260 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
261 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
262 1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
264 1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
265 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
267 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
271 14 0 SECTION("foreign iptr") {
14 0 SECTION("foreign iptr") {
14 0 SECTION("foreign iptr") {
14 0 SECTION("foreign iptr") {
2 12 SECTION("foreign iptr") {
272 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
274 1 0 auto p2 = TestChildSP(new TestChild(2));
1 0 auto p2 = TestChildSP(new TestChild(2));
276 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
277 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
278 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
279 1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
281 1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
282 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
284 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
286 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
287 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
288 1 0 auto p2 = TestChildSP(new TestChild(2));
1 0 auto p2 = TestChildSP(new TestChild(2));
290 1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
291 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
292 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
293 1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
1 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
0 0 REQUIRE(p2->refcnt() == 2);
295 1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
296 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
298 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
302 14 0 SECTION("move same iptr") {
14 0 SECTION("move same iptr") {
14 0 SECTION("move same iptr") {
14 0 SECTION("move same iptr") {
2 12 SECTION("move same iptr") {
303 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
305 1 0 auto p2 = TestSP(new Test(2));
1 0 auto p2 = TestSP(new Test(2));
307 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
308 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
309 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
310 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
311 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
312 1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
0 0 REQUIRE(!p2);
0 0 REQUIRE(!p2);
314 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
316 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
318 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
319 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
320 1 0 auto p2 = TestSP(new Test(2));
1 0 auto p2 = TestSP(new Test(2));
322 1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
323 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
324 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
325 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
326 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
327 1 0 REQUIRE(p2);
1 0 REQUIRE(p2);
1 0 REQUIRE(p2);
1 0 REQUIRE(p2);
0 0 REQUIRE(p2);
0 0 REQUIRE(p2);
328 1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
329 1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
0 0 REQUIRE(p2->value == 1);
0 0 REQUIRE(p2->value == 1);
331 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
332 1 0 REQUIRE(p2);
1 0 REQUIRE(p2);
1 0 REQUIRE(p2);
1 0 REQUIRE(p2);
0 0 REQUIRE(p2);
0 0 REQUIRE(p2);
333 1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
1 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
0 0 REQUIRE(p2->refcnt() == 1);
334 1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
1 0 REQUIRE(p2->value == 1);
0 0 REQUIRE(p2->value == 1);
0 0 REQUIRE(p2->value == 1);
335 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
337 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
341 14 0 SECTION("move foreign iptr") {
14 0 SECTION("move foreign iptr") {
14 0 SECTION("move foreign iptr") {
14 0 SECTION("move foreign iptr") {
2 12 SECTION("move foreign iptr") {
342 2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
2 0 SECTION("from empty") {
1 1 SECTION("from empty") {
344 1 0 auto p2 = TestChildSP(new TestChild(2));
1 0 auto p2 = TestChildSP(new TestChild(2));
346 1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
1 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
0 0 REQUIRE(Tracer::ctor_calls == 1);
347 1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
1 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
0 0 REQUIRE(Tracer::dtor_calls == 0);
348 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
349 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
350 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
351 1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
0 0 REQUIRE(!p2);
0 0 REQUIRE(!p2);
353 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
355 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
357 2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
2 0 SECTION("from object") {
1 1 SECTION("from object") {
358 1 0 auto p = TestSP(new Test(1));
1 0 auto p = TestSP(new Test(1));
359 1 0 auto p2 = TestChildSP(new TestChild(2));
1 0 auto p2 = TestChildSP(new TestChild(2));
361 1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
1 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
0 0 REQUIRE(Tracer::ctor_calls == 2);
362 1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
1 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
0 0 REQUIRE(Tracer::dtor_calls == 1);
363 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
364 1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
1 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
0 0 REQUIRE(p->refcnt() == 1);
365 1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
1 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
0 0 REQUIRE(p->value == 2);
366 1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
1 0 REQUIRE(!p2);
0 0 REQUIRE(!p2);
0 0 REQUIRE(!p2);
368 1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
1 0 REQUIRE(!p);
0 0 REQUIRE(!p);
0 0 REQUIRE(!p);
369 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
371 1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
1 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
0 0 REQUIRE(Tracer::dtor_calls == 2);
376 46 0 SECTION("dereference") {
46 0 SECTION("dereference") {
46 0 SECTION("dereference") {
46 0 SECTION("dereference") {
1 45 SECTION("dereference") {
377 1 0 auto obj = new Test(123);
1 0 auto obj = new Test(123);
379 1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
1 0 REQUIRE(p->value == 123);
0 0 REQUIRE(p->value == 123);
0 0 REQUIRE(p->value == 123);
380 1 0 REQUIRE((*p).value == 123);
1 0 REQUIRE((*p).value == 123);
1 0 REQUIRE((*p).value == 123);
1 0 REQUIRE((*p).value == 123);
1 0 REQUIRE((*p).value == 123);
0 0 REQUIRE((*p).value == 123);
0 0 REQUIRE((*p).value == 123);
381 1 0 REQUIRE(p.get()->value == 123);
1 0 REQUIRE(p.get()->value == 123);
1 0 REQUIRE(p.get()->value == 123);
1 0 REQUIRE(p.get()->value == 123);
1 0 REQUIRE(p.get()->value == 123);
0 0 REQUIRE(p.get()->value == 123);
0 0 REQUIRE(p.get()->value == 123);
382 1 0 REQUIRE(p.get() == obj);
1 0 REQUIRE(p.get() == obj);
1 0 REQUIRE(p.get() == obj);
1 0 REQUIRE(p.get() == obj);
1 0 REQUIRE(p.get() == obj);
0 0 REQUIRE(p.get() == obj);
0 0 REQUIRE(p.get() == obj);
383 1 0 REQUIRE(((Test*)p)->value == 123);
1 0 REQUIRE(((Test*)p)->value == 123);
1 0 REQUIRE(((Test*)p)->value == 123);
1 0 REQUIRE(((Test*)p)->value == 123);
1 0 REQUIRE(((Test*)p)->value == 123);
0 0 REQUIRE(((Test*)p)->value == 123);
0 0 REQUIRE(((Test*)p)->value == 123);
384 1 0 REQUIRE((Test*)p == obj);
1 0 REQUIRE((Test*)p == obj);
1 0 REQUIRE((Test*)p == obj);
1 0 REQUIRE((Test*)p == obj);
1 0 REQUIRE((Test*)p == obj);
0 0 REQUIRE((Test*)p == obj);
0 0 REQUIRE((Test*)p == obj);
385 1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
1 0 REQUIRE(p);
0 0 REQUIRE(p);
0 0 REQUIRE(p);
386 1 0 REQUIRE((bool)p == true);
1 0 REQUIRE((bool)p == true);
1 0 REQUIRE((bool)p == true);
1 0 REQUIRE((bool)p == true);
1 0 REQUIRE((bool)p == true);
0 0 REQUIRE((bool)p == true);
0 0 REQUIRE((bool)p == true);
389 46 0 SECTION("ops") {
46 0 SECTION("ops") {
46 0 SECTION("ops") {
46 0 SECTION("ops") {
1 45 SECTION("ops") {
390 1 0 auto ptr = new Test(123);
1 0 auto ptr = new Test(123);
393 1 0 CHECK(sp1 == sp2);
1 0 CHECK(sp1 == sp2);
1 0 CHECK(sp1 == sp2);
1 0 CHECK(sp1 == sp2);
1 0 CHECK(sp1 == sp2);
0 0 CHECK(sp1 == sp2);
0 0 CHECK(sp1 == sp2);
394 1 0 CHECK(sp1 == ptr);
1 0 CHECK(sp1 == ptr);
1 0 CHECK(sp1 == ptr);
1 0 CHECK(sp1 == ptr);
1 0 CHECK(sp1 == ptr);
0 0 CHECK(sp1 == ptr);
0 0 CHECK(sp1 == ptr);
397 46 0 SECTION("weak") {
46 0 SECTION("weak") {
46 0 SECTION("weak") {
46 0 SECTION("weak") {
18 28 SECTION("weak") {
398 18 0 SECTION("ctor") {
18 0 SECTION("ctor") {
18 0 SECTION("ctor") {
18 0 SECTION("ctor") {
8 10 SECTION("ctor") {
399 8 0 SECTION("empty") {
8 0 SECTION("empty") {
8 0 SECTION("empty") {
8 0 SECTION("empty") {
1 7 SECTION("empty") {
400 1 0 TestWP empty;
401 1 0 CHECK_FALSE(empty);
1 0 CHECK_FALSE(empty);
1 0 CHECK_FALSE(empty);
1 0 CHECK_FALSE(empty);
1 0 CHECK_FALSE(empty);
0 0 CHECK_FALSE(empty);
0 0 CHECK_FALSE(empty);
403 8 0 SECTION("from iptr") {
8 0 SECTION("from iptr") {
8 0 SECTION("from iptr") {
8 0 SECTION("from iptr") {
2 6 SECTION("from iptr") {
404 2 0 SECTION("base") {
2 0 SECTION("base") {
2 0 SECTION("base") {
2 0 SECTION("base") {
1 1 SECTION("base") {
405 1 0 TestSP obj = new Test(123);
1 0 TestSP obj = new Test(123);
406 1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
407 1 0 TestWP weak = obj;
408 1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
410 2 0 SECTION("derived") {
2 0 SECTION("derived") {
2 0 SECTION("derived") {
2 0 SECTION("derived") {
1 1 SECTION("derived") {
411 1 0 TestChildSP obj = new TestChild(123);
1 0 TestChildSP obj = new TestChild(123);
412 1 0 TestWP weak = obj;
413 1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
1 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
416 8 0 SECTION("from bad") {
8 0 SECTION("from bad") {
8 0 SECTION("from bad") {
8 0 SECTION("from bad") {
2 6 SECTION("from bad") {
417 2 0 SECTION("bad iptr") {
2 0 SECTION("bad iptr") {
2 0 SECTION("bad iptr") {
2 0 SECTION("bad iptr") {
1 1 SECTION("bad iptr") {
419 1 0 TestWP weak(nothing);
420 1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
0 0 CHECK_FALSE(weak);
0 0 CHECK_FALSE(weak);
423 2 0 SECTION("bad weak_iptr") {
2 0 SECTION("bad weak_iptr") {
2 0 SECTION("bad weak_iptr") {
2 0 SECTION("bad weak_iptr") {
1 1 SECTION("bad weak_iptr") {
424 1 0 TestWP nothing;
425 1 0 TestWP weak(nothing);
426 1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
1 0 CHECK_FALSE(weak);
0 0 CHECK_FALSE(weak);
0 0 CHECK_FALSE(weak);
430 8 0 SECTION("from weak") {
8 0 SECTION("from weak") {
8 0 SECTION("from weak") {
8 0 SECTION("from weak") {
3 5 SECTION("from weak") {
431 3 0 TestSP base = new Test(123);
3 0 TestSP base = new Test(123);
432 3 0 TestChildSP der = new TestChild(123);
3 0 TestChildSP der = new TestChild(123);
433 3 0 TestWP wbase = base;
434 3 0 TestChildWP wder = der;
436 3 0 SECTION("base") {
3 0 SECTION("base") {
3 0 SECTION("base") {
3 0 SECTION("base") {
1 2 SECTION("base") {
437 1 0 TestWP weak = wbase;
438 1 0 CHECK(weak.lock() == base);
1 0 CHECK(weak.lock() == base);
1 0 CHECK(weak.lock() == base);
1 0 CHECK(weak.lock() == base);
1 0 CHECK(weak.lock() == base);
1 0 CHECK(weak.lock() == base);
0 0 CHECK(weak.lock() == base);
0 0 CHECK(weak.lock() == base);
439 1 0 CHECK(base->refcnt() == 1);
1 0 CHECK(base->refcnt() == 1);
1 0 CHECK(base->refcnt() == 1);
1 0 CHECK(base->refcnt() == 1);
1 0 CHECK(base->refcnt() == 1);
0 0 CHECK(base->refcnt() == 1);
0 0 CHECK(base->refcnt() == 1);
441 3 0 SECTION("derived") {
3 0 SECTION("derived") {
3 0 SECTION("derived") {
3 0 SECTION("derived") {
1 2 SECTION("derived") {
443 1 0 CHECK(weak.lock() == der);
1 0 CHECK(weak.lock() == der);
1 0 CHECK(weak.lock() == der);
1 0 CHECK(weak.lock() == der);
1 0 CHECK(weak.lock() == der);
1 0 CHECK(weak.lock() == der);
0 0 CHECK(weak.lock() == der);
0 0 CHECK(weak.lock() == der);
444 1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
0 0 CHECK(der->refcnt() == 1);
0 0 CHECK(der->refcnt() == 1);
447 3 0 SECTION("move") {
3 0 SECTION("move") {
3 0 SECTION("move") {
3 0 SECTION("move") {
1 2 SECTION("move") {
448 1 0 TestWP moved(std::move(wbase));
449 1 0 CHECK(moved.weak_count() == 1);
1 0 CHECK(moved.weak_count() == 1);
1 0 CHECK(moved.weak_count() == 1);
1 0 CHECK(moved.weak_count() == 1);
1 0 CHECK(moved.weak_count() == 1);
0 0 CHECK(moved.weak_count() == 1);
0 0 CHECK(moved.weak_count() == 1);
450 1 0 CHECK(moved.use_count() == 1);
1 0 CHECK(moved.use_count() == 1);
1 0 CHECK(moved.use_count() == 1);
1 0 CHECK(moved.use_count() == 1);
1 0 CHECK(moved.use_count() == 1);
0 0 CHECK(moved.use_count() == 1);
0 0 CHECK(moved.use_count() == 1);
455 18 0 SECTION("assign") {
18 0 SECTION("assign") {
18 0 SECTION("assign") {
18 0 SECTION("assign") {
6 12 SECTION("assign") {
456 6 0 TestWP empty;
457 6 0 TestSP base = new Test(123);
6 0 TestSP base = new Test(123);
458 6 0 TestChildSP der = new TestChild(123);
6 0 TestChildSP der = new TestChild(123);
459 6 0 TestWP wbase = base;
460 6 0 TestChildWP wder = der;
462 6 0 TestWP wbase2;
463 6 0 TestChildWP wder2;
465 6 0 SECTION("empty") {
6 0 SECTION("empty") {
6 0 SECTION("empty") {
6 0 SECTION("empty") {
1 5 SECTION("empty") {
466 1 0 TestWP e2;
467 1 0 e2 = empty;
468 1 0 CHECK_FALSE(e2);
1 0 CHECK_FALSE(e2);
1 0 CHECK_FALSE(e2);
1 0 CHECK_FALSE(e2);
1 0 CHECK_FALSE(e2);
0 0 CHECK_FALSE(e2);
0 0 CHECK_FALSE(e2);
471 6 0 SECTION("base") {
6 0 SECTION("base") {
6 0 SECTION("base") {
6 0 SECTION("base") {
1 5 SECTION("base") {
472 1 0 wbase2 = base;
473 1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
0 0 CHECK(wbase2.lock() == base);
0 0 CHECK(wbase2.lock() == base);
474 1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
475 1 0 wbase2 = der;
476 1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
0 0 CHECK(wbase2.lock() == der);
0 0 CHECK(wbase2.lock() == der);
477 1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
478 1 0 wbase2 = wbase;
479 1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
0 0 CHECK(wbase2.lock() == base);
0 0 CHECK(wbase2.lock() == base);
480 1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
481 1 0 wbase2 = wder;
482 1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
0 0 CHECK(wbase2.lock() == der);
0 0 CHECK(wbase2.lock() == der);
483 1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
1 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
0 0 CHECK(wbase2.weak_count() == 2);
485 6 0 SECTION("derived") {
6 0 SECTION("derived") {
6 0 SECTION("derived") {
6 0 SECTION("derived") {
1 5 SECTION("derived") {
486 1 0 wder2 = der;
487 1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
0 0 CHECK(wder2.lock() == der);
0 0 CHECK(wder2.lock() == der);
488 1 0 wder2 = wder;
489 1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
1 0 CHECK(wder2.lock() == der);
0 0 CHECK(wder2.lock() == der);
0 0 CHECK(wder2.lock() == der);
490 1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
1 0 CHECK(der->refcnt() == 1);
0 0 CHECK(der->refcnt() == 1);
0 0 CHECK(der->refcnt() == 1);
493 6 0 SECTION("move") {
6 0 SECTION("move") {
6 0 SECTION("move") {
6 0 SECTION("move") {
1 5 SECTION("move") {
494 1 0 wbase2 = std::move(wbase);
495 1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
1 0 CHECK(wbase2.lock() == base);
0 0 CHECK(wbase2.lock() == base);
0 0 CHECK(wbase2.lock() == base);
496 1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
0 0 CHECK(wbase2.weak_count() == 1);
0 0 CHECK(wbase2.weak_count() == 1);
498 1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
1 0 CHECK(wbase2.lock() == der);
0 0 CHECK(wbase2.lock() == der);
0 0 CHECK(wbase2.lock() == der);
499 1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
1 0 CHECK(wbase2.weak_count() == 1);
0 0 CHECK(wbase2.weak_count() == 1);
0 0 CHECK(wbase2.weak_count() == 1);
502 6 0 SECTION("from bad") {
6 0 SECTION("from bad") {
6 0 SECTION("from bad") {
6 0 SECTION("from bad") {
2 4 SECTION("from bad") {
503 2 0 SECTION("bad iptr") {
2 0 SECTION("bad iptr") {
2 0 SECTION("bad iptr") {
2 0 SECTION("bad iptr") {
1 1 SECTION("bad iptr") {
505 1 0 wbase2 = nothing;
508 2 0 SECTION("bad weak_iptr") {
2 0 SECTION("bad weak_iptr") {
2 0 SECTION("bad weak_iptr") {
2 0 SECTION("bad weak_iptr") {
1 1 SECTION("bad weak_iptr") {
509 1 0 TestWP nothing;
510 1 0 wbase2 = nothing;
512 2 0 CHECK_FALSE(wbase2);
2 0 CHECK_FALSE(wbase2);
2 0 CHECK_FALSE(wbase2);
2 0 CHECK_FALSE(wbase2);
2 0 CHECK_FALSE(wbase2);
0 0 CHECK_FALSE(wbase2);
0 0 CHECK_FALSE(wbase2);
513 2 0 CHECK_FALSE(wbase2.lock());
2 0 CHECK_FALSE(wbase2.lock());
2 0 CHECK_FALSE(wbase2.lock());
2 0 CHECK_FALSE(wbase2.lock());
2 0 CHECK_FALSE(wbase2.lock());
2 0 CHECK_FALSE(wbase2.lock());
0 0 CHECK_FALSE(wbase2.lock());
0 0 CHECK_FALSE(wbase2.lock());
517 18 0 SECTION("lock") {
18 0 SECTION("lock") {
18 0 SECTION("lock") {
18 0 SECTION("lock") {
2 16 SECTION("lock") {
519 2 0 TestWP weak;
520 2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
0 0 CHECK_FALSE(weak.lock());
0 0 CHECK_FALSE(weak.lock());
522 2 0 SECTION("base") {
2 0 SECTION("base") {
2 0 SECTION("base") {
2 0 SECTION("base") {
1 1 SECTION("base") {
523 1 0 obj = new Test(123);
1 0 obj = new Test(123);
525 2 0 SECTION("derived") {
2 0 SECTION("derived") {
2 0 SECTION("derived") {
2 0 SECTION("derived") {
1 1 SECTION("derived") {
526 1 0 obj = new TestChild(123);
1 0 obj = new TestChild(123);
528 2 0 weak = obj;
530 2 0 if (TestSP tmp = weak.lock()) {
2 0 if (TestSP tmp = weak.lock()) {
531 2 0 CHECK(obj->refcnt() == 2);
2 0 CHECK(obj->refcnt() == 2);
2 0 CHECK(obj->refcnt() == 2);
2 0 CHECK(obj->refcnt() == 2);
2 0 CHECK(obj->refcnt() == 2);
0 0 CHECK(obj->refcnt() == 2);
0 0 CHECK(obj->refcnt() == 2);
532 2 0 CHECK(obj == tmp);
2 0 CHECK(obj == tmp);
2 0 CHECK(obj == tmp);
2 0 CHECK(obj == tmp);
2 0 CHECK(obj == tmp);
0 0 CHECK(obj == tmp);
0 0 CHECK(obj == tmp);
534 2 0 CHECK(obj->refcnt() == 1);
2 0 CHECK(obj->refcnt() == 1);
2 0 CHECK(obj->refcnt() == 1);
2 0 CHECK(obj->refcnt() == 1);
2 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
0 0 CHECK(obj->refcnt() == 1);
536 2 0 CHECK(Tracer::dtor_calls == 1);
2 0 CHECK(Tracer::dtor_calls == 1);
2 0 CHECK(Tracer::dtor_calls == 1);
2 0 CHECK(Tracer::dtor_calls == 1);
2 0 CHECK(Tracer::dtor_calls == 1);
0 0 CHECK(Tracer::dtor_calls == 1);
0 0 CHECK(Tracer::dtor_calls == 1);
537 2 0 CHECK(weak.expired());
2 0 CHECK(weak.expired());
2 0 CHECK(weak.expired());
2 0 CHECK(weak.expired());
0 0 CHECK(weak.expired());
0 0 CHECK(weak.expired());
538 2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
2 0 CHECK_FALSE(weak.lock());
0 0 CHECK_FALSE(weak.lock());
0 0 CHECK_FALSE(weak.lock());
541 18 0 SECTION("use_count") {
18 0 SECTION("use_count") {
18 0 SECTION("use_count") {
18 0 SECTION("use_count") {
1 17 SECTION("use_count") {
542 1 0 TestWP weak;
543 1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
0 0 CHECK(weak.use_count() == 0);
0 0 CHECK(weak.use_count() == 0);
544 1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
0 0 CHECK(weak.weak_count() == 0);
0 0 CHECK(weak.weak_count() == 0);
546 1 0 TestSP obj = new Test;
1 0 TestSP obj = new Test;
547 1 0 weak = obj;
548 1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
0 0 CHECK(weak.use_count() == 1);
0 0 CHECK(weak.use_count() == 1);
549 1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
0 0 CHECK(weak.weak_count() == 1);
0 0 CHECK(weak.weak_count() == 1);
551 1 0 TestWP w2 = weak;
552 1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
0 0 CHECK(weak.use_count() == 1);
0 0 CHECK(weak.use_count() == 1);
553 1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
0 0 CHECK(weak.weak_count() == 2);
0 0 CHECK(weak.weak_count() == 2);
556 1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
1 0 CHECK(weak.use_count() == 0);
0 0 CHECK(weak.use_count() == 0);
0 0 CHECK(weak.use_count() == 0);
557 1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
1 0 CHECK(weak.weak_count() == 2);
0 0 CHECK(weak.weak_count() == 2);
0 0 CHECK(weak.weak_count() == 2);
560 18 0 SECTION("weak generalization") {
18 0 SECTION("weak generalization") {
18 0 SECTION("weak generalization") {
18 0 SECTION("weak generalization") {
1 17 SECTION("weak generalization") {
561 1 0 TestSP obj = new Test;
1 0 TestSP obj = new Test;
562 1 0 panda::weak weak = obj;
563 1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
1 0 CHECK(weak.use_count() == 1);
0 0 CHECK(weak.use_count() == 1);
0 0 CHECK(weak.use_count() == 1);
564 1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
1 0 CHECK(weak.weak_count() == 1);
0 0 CHECK(weak.weak_count() == 1);
0 0 CHECK(weak.weak_count() == 1);
567 1 0 weak = panda::weak(TestWP());
1 0 weak = panda::weak(TestWP());
568 1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
0 0 CHECK(weak.weak_count() == 0);
0 0 CHECK(weak.weak_count() == 0);
570 1 0 weak = TestWP();
1 0 weak = TestWP();
571 1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
1 0 CHECK(weak.weak_count() == 0);
0 0 CHECK(weak.weak_count() == 0);
0 0 CHECK(weak.weak_count() == 0);
574 18 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
18 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
18 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
18 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
18 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
0 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
0 0 CHECK(Tracer::dtor_calls == Tracer::ctor_total());
577 46 0 SECTION("Refcntd") {
46 0 SECTION("Refcntd") {
46 0 SECTION("Refcntd") {
46 0 SECTION("Refcntd") {
2 44 SECTION("Refcntd") {
578 2 0 SECTION("on_delete") {
2 0 SECTION("on_delete") {
2 0 SECTION("on_delete") {
2 0 SECTION("on_delete") {
1 1 SECTION("on_delete") {
579 1 0 TestDelSP obj = new TestDel();
1 0 TestDelSP obj = new TestDel();
581 1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
0 0 CHECK(Tracer::ctor_calls == 1);
0 0 CHECK(Tracer::ctor_calls == 1);
582 1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
0 0 CHECK(Tracer::dtor_calls == 1);
0 0 CHECK(Tracer::dtor_calls == 1);
583 1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
0 0 CHECK(on_delete_calls == 1);
0 0 CHECK(on_delete_calls == 1);
585 2 0 SECTION("resurect") {
2 0 SECTION("resurect") {
2 0 SECTION("resurect") {
2 0 SECTION("resurect") {
1 1 SECTION("resurect") {
586 1 0 auto ptr = new TestRes();
1 0 auto ptr = new TestRes();
589 1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
1 0 CHECK(Tracer::ctor_calls == 1);
0 0 CHECK(Tracer::ctor_calls == 1);
0 0 CHECK(Tracer::ctor_calls == 1);
590 1 0 CHECK(Tracer::dtor_calls == 0);
1 0 CHECK(Tracer::dtor_calls == 0);
1 0 CHECK(Tracer::dtor_calls == 0);
1 0 CHECK(Tracer::dtor_calls == 0);
1 0 CHECK(Tracer::dtor_calls == 0);
0 0 CHECK(Tracer::dtor_calls == 0);
0 0 CHECK(Tracer::dtor_calls == 0);
591 1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
1 0 CHECK(on_delete_calls == 1);
0 0 CHECK(on_delete_calls == 1);
0 0 CHECK(on_delete_calls == 1);
594 1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
1 0 CHECK(Tracer::dtor_calls == 1);
0 0 CHECK(Tracer::dtor_calls == 1);
0 0 CHECK(Tracer::dtor_calls == 1);
595 1 0 CHECK(on_delete_calls == 2);
1 0 CHECK(on_delete_calls == 2);
1 0 CHECK(on_delete_calls == 2);
1 0 CHECK(on_delete_calls == 2);
1 0 CHECK(on_delete_calls == 2);
0 0 CHECK(on_delete_calls == 2);
0 0 CHECK(on_delete_calls == 2);
599 46 0 SECTION("compiles") {
46 0 SECTION("compiles") {
46 0 SECTION("compiles") {
46 0 SECTION("compiles") {
1 45 SECTION("compiles") {
600 1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
0 0 REQUIRE(foo(iptr(nullptr)) == 10);
0 0 REQUIRE(foo(iptr(nullptr)) == 10);
601 1 0 REQUIRE(foo(iptr(nullptr)) == 20);
1 0 REQUIRE(foo(iptr(nullptr)) == 20);
1 0 REQUIRE(foo(iptr(nullptr)) == 20);
1 0 REQUIRE(foo(iptr(nullptr)) == 20);
1 0 REQUIRE(foo(iptr(nullptr)) == 20);
0 0 REQUIRE(foo(iptr(nullptr)) == 20);
0 0 REQUIRE(foo(iptr(nullptr)) == 20);
602 1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
1 0 REQUIRE(foo(iptr(nullptr)) == 10);
0 0 REQUIRE(foo(iptr(nullptr)) == 10);
0 0 REQUIRE(foo(iptr(nullptr)) == 10);
604 18 0 }
18 0 }