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