xref: /xnu-8792.81.2/tests/intrusive_shared_ptr_src/dtor.cpp (revision 19c3b8c28c31cb8130e034cfb5df6bf9ba342d90)
1*19c3b8c2SApple OSS Distributions //
2*19c3b8c2SApple OSS Distributions // Tests for
3*19c3b8c2SApple OSS Distributions //  ~intrusive_shared_ptr();
4*19c3b8c2SApple OSS Distributions //
5*19c3b8c2SApple OSS Distributions 
6*19c3b8c2SApple OSS Distributions #include <libkern/c++/intrusive_shared_ptr.h>
7*19c3b8c2SApple OSS Distributions #include <darwintest.h>
8*19c3b8c2SApple OSS Distributions #include <darwintest_utils.h>
9*19c3b8c2SApple OSS Distributions #include "test_policy.h"
10*19c3b8c2SApple OSS Distributions 
11*19c3b8c2SApple OSS Distributions struct T { int i; };
12*19c3b8c2SApple OSS Distributions 
13*19c3b8c2SApple OSS Distributions T_DECL(dtor, "intrusive_shared_ptr.dtor") {
14*19c3b8c2SApple OSS Distributions 	// Destroy a non-null shared pointer
15*19c3b8c2SApple OSS Distributions 	{
16*19c3b8c2SApple OSS Distributions 		T obj{0};
17*19c3b8c2SApple OSS Distributions 		test_policy::retain_count = 3;
18*19c3b8c2SApple OSS Distributions 
19*19c3b8c2SApple OSS Distributions 		{
20*19c3b8c2SApple OSS Distributions 			libkern::intrusive_shared_ptr<T, test_policy> ptr(&obj, libkern::no_retain);
21*19c3b8c2SApple OSS Distributions 			CHECK(test_policy::retain_count == 3);
22*19c3b8c2SApple OSS Distributions 		}
23*19c3b8c2SApple OSS Distributions 
24*19c3b8c2SApple OSS Distributions 		CHECK(test_policy::retain_count == 2);
25*19c3b8c2SApple OSS Distributions 	}
26*19c3b8c2SApple OSS Distributions 
27*19c3b8c2SApple OSS Distributions 	// Destroy a null shared pointer
28*19c3b8c2SApple OSS Distributions 	{
29*19c3b8c2SApple OSS Distributions 		test_policy::retain_count = 3;
30*19c3b8c2SApple OSS Distributions 
31*19c3b8c2SApple OSS Distributions 		{
32*19c3b8c2SApple OSS Distributions 			libkern::intrusive_shared_ptr<T, test_policy> ptr = nullptr;
33*19c3b8c2SApple OSS Distributions 			CHECK(test_policy::retain_count == 3);
34*19c3b8c2SApple OSS Distributions 		}
35*19c3b8c2SApple OSS Distributions 
36*19c3b8c2SApple OSS Distributions 		CHECK(test_policy::retain_count == 3); // not decremented
37*19c3b8c2SApple OSS Distributions 	}
38*19c3b8c2SApple OSS Distributions }
39