31 using std::shared_ptr;
34 using lumiera::error::LUMIERA_ERROR_ASSERTION;
41 explicit X(
long x=0) :
x_(x) {}
42 operator long () {
return x_; }
82 CHECK (1 == p1.use_count());
87 CHECK (1 == p2.use_count());
90 CHECK (1 == p1.use_count());
91 CHECK (1 == p2.use_count());
94 CHECK (2 == p1.use_count());
95 CHECK (2 == p2.use_count());
98 CHECK (1 == p1.use_count());
102 CHECK (0 == p1.use_count());
113 CHECK (1 == pX.use_count());
117 CHECK (1 == pX.use_count());
119 shared_ptr<X> sp1 (wX);
120 shared_ptr<X> sp2 (pX);
121 shared_ptr<X> sp3; sp3 = pX;
123 CHECK (22 == sp3->x_);
124 CHECK (4 == pX.use_count());
126 CHECK (*sp1 == *sp2);
127 CHECK (*sp2 == *sp3);
132 CHECK (0 == pX.use_count());
133 CHECK (4 == pX2.use_count());
138 CHECK (0 == pX2.use_count());
139 CHECK (4 == pXX.use_count());
141 sp3 = sp2 = sp1 = pX;
142 CHECK (22 == pXX->x_);
143 CHECK (1 == pXX.use_count());
148 CHECK (22 == wX.lock()->x_);
149 CHECK (1 == pXX.use_count());
160 std::unique_ptr<X> up (
new X(23));
163 P<X> pX (std::move(up));
166 CHECK (1 == pX.use_count());
167 CHECK (23 == pX->x_);
206 CHECK (
INSTANCEOF (shared_ptr<string>, &pLoLoL));
219 pX.reset (
new XX(5));
223 CHECK (5 == pX2->x_);
224 CHECK (6 == pX2->xx_);
226 pX3.reset (
new X(7));
244 PX pX3, pX4, pX5, pX6;
248 pX4.reset(
new X(*pXX));
250 CHECK ( (pX1 == pX1));
251 CHECK (!(pX1 != pX1));
252 CHECK (!(pX1 < pX1));
253 CHECK (!(pX1 > pX1));
254 CHECK ( (pX1 <= pX1));
255 CHECK ( (pX1 >= pX1));
257 CHECK (!(pX1 == pX2));
258 CHECK ( (pX1 != pX2));
259 CHECK ( (pX1 < pX2));
260 CHECK (!(pX1 > pX2));
261 CHECK ( (pX1 <= pX2));
262 CHECK (!(pX1 >= pX2));
264 CHECK (!(pX2 == pXX));
265 CHECK ( (pX2 != pXX));
266 CHECK ( (pX2 < pXX));
267 CHECK (!(pX2 > pXX));
268 CHECK ( (pX2 <= pXX));
269 CHECK (!(pX2 >= pXX));
271 CHECK (!(pX1 == pXX));
272 CHECK ( (pX1 != pXX));
273 CHECK ( (pX1 < pXX));
274 CHECK (!(pX1 > pXX));
275 CHECK ( (pX1 <= pXX));
276 CHECK (!(pX1 >= pXX));
278 CHECK ( (pX3 == pXX));
279 CHECK (!(pX3 != pXX));
280 CHECK (!(pX3 < pXX));
281 CHECK (!(pX3 > pXX));
282 CHECK ( (pX3 <= pXX));
283 CHECK ( (pX3 >= pXX));
285 CHECK ( (pX4 == pXX));
286 CHECK (!(pX4 != pXX));
287 CHECK (!(pX4 < pXX));
288 CHECK (!(pX4 > pXX));
289 CHECK ( (pX4 <= pXX));
290 CHECK ( (pX4 >= pXX));
292 CHECK (!(pXX == pX5));
293 CHECK ( (pXX != pX5));
295 CHECK ( (pX5 == pX6));
296 CHECK (!(pX5 != pX6));
Customised refcounting smart pointer template, built upon std::shared_ptr, but forwarding type relati...
void check_shared_ownership()
void check_ownership_transfer()
void check_type_relations()
Implementation namespace for support and library code.
Test runner and basic definitions for tests.
Customised refcounting smart pointer.
Simplistic test class runner.
#define LAUNCHER(_TEST_CLASS_, _GROUPS_)
std::strong_ordering operator<=>(X const &) const =default
A collection of frequently used helper functions to support unit testing.
#define VERIFY_ERROR(ERROR_ID, ERRONEOUS_STATEMENT)
Macro to verify that a statement indeed raises an exception.
Tiny helper functions and shortcuts to be used everywhere Consider this header to be effectively incl...
#define INSTANCEOF(CLASS, EXPR)
shortcut for subclass test, intended for assertions only.