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