1*a1e26a70SApple OSS Distributions #ifndef TESTS_INTRUSIVE_SHARED_PTR_TEST_POLICY_H 2*a1e26a70SApple OSS Distributions #define TESTS_INTRUSIVE_SHARED_PTR_TEST_POLICY_H 3*a1e26a70SApple OSS Distributions 4*a1e26a70SApple OSS Distributions #include <libkern/c++/intrusive_shared_ptr.h> 5*a1e26a70SApple OSS Distributions #include <darwintest_utils.h> 6*a1e26a70SApple OSS Distributions 7*a1e26a70SApple OSS Distributions struct test_policy { 8*a1e26a70SApple OSS Distributions static inline int retain_count = 0; 9*a1e26a70SApple OSS Distributions 10*a1e26a70SApple OSS Distributions template <typename T> 11*a1e26a70SApple OSS Distributions static void retaintest_policy12*a1e26a70SApple OSS Distributions retain(T&) 13*a1e26a70SApple OSS Distributions { 14*a1e26a70SApple OSS Distributions ++retain_count; 15*a1e26a70SApple OSS Distributions } 16*a1e26a70SApple OSS Distributions template <typename T> 17*a1e26a70SApple OSS Distributions static void releasetest_policy18*a1e26a70SApple OSS Distributions release(T&) 19*a1e26a70SApple OSS Distributions { 20*a1e26a70SApple OSS Distributions --retain_count; 21*a1e26a70SApple OSS Distributions } 22*a1e26a70SApple OSS Distributions }; 23*a1e26a70SApple OSS Distributions 24*a1e26a70SApple OSS Distributions struct tracking_policy { 25*a1e26a70SApple OSS Distributions static inline int retains = 0; 26*a1e26a70SApple OSS Distributions static inline int releases = 0; 27*a1e26a70SApple OSS Distributions static inline int refcount = 0; 28*a1e26a70SApple OSS Distributions static inline bool hit_zero = false; 29*a1e26a70SApple OSS Distributions 30*a1e26a70SApple OSS Distributions static void resettracking_policy31*a1e26a70SApple OSS Distributions reset() 32*a1e26a70SApple OSS Distributions { 33*a1e26a70SApple OSS Distributions retains = 0; 34*a1e26a70SApple OSS Distributions releases = 0; 35*a1e26a70SApple OSS Distributions refcount = 0; 36*a1e26a70SApple OSS Distributions hit_zero = false; 37*a1e26a70SApple OSS Distributions } 38*a1e26a70SApple OSS Distributions 39*a1e26a70SApple OSS Distributions template <typename T> 40*a1e26a70SApple OSS Distributions static void retaintracking_policy41*a1e26a70SApple OSS Distributions retain(T&) 42*a1e26a70SApple OSS Distributions { 43*a1e26a70SApple OSS Distributions ++retains; 44*a1e26a70SApple OSS Distributions ++refcount; 45*a1e26a70SApple OSS Distributions } 46*a1e26a70SApple OSS Distributions template <typename T> 47*a1e26a70SApple OSS Distributions static void releasetracking_policy48*a1e26a70SApple OSS Distributions release(T&) 49*a1e26a70SApple OSS Distributions { 50*a1e26a70SApple OSS Distributions ++releases; 51*a1e26a70SApple OSS Distributions --refcount; 52*a1e26a70SApple OSS Distributions if (refcount == 0) { 53*a1e26a70SApple OSS Distributions hit_zero = true; 54*a1e26a70SApple OSS Distributions } 55*a1e26a70SApple OSS Distributions } 56*a1e26a70SApple OSS Distributions }; 57*a1e26a70SApple OSS Distributions 58*a1e26a70SApple OSS Distributions template <int> 59*a1e26a70SApple OSS Distributions struct dummy_policy { 60*a1e26a70SApple OSS Distributions template <typename T> 61*a1e26a70SApple OSS Distributions static void retaindummy_policy62*a1e26a70SApple OSS Distributions retain(T&) 63*a1e26a70SApple OSS Distributions { 64*a1e26a70SApple OSS Distributions } 65*a1e26a70SApple OSS Distributions template <typename T> 66*a1e26a70SApple OSS Distributions static void releasedummy_policy67*a1e26a70SApple OSS Distributions release(T&) 68*a1e26a70SApple OSS Distributions { 69*a1e26a70SApple OSS Distributions } 70*a1e26a70SApple OSS Distributions }; 71*a1e26a70SApple OSS Distributions 72*a1e26a70SApple OSS Distributions template <typename T> 73*a1e26a70SApple OSS Distributions using tracked_shared_ptr = libkern::intrusive_shared_ptr<T, tracking_policy>; 74*a1e26a70SApple OSS Distributions 75*a1e26a70SApple OSS Distributions template <typename T> 76*a1e26a70SApple OSS Distributions using test_shared_ptr = libkern::intrusive_shared_ptr<T, test_policy>; 77*a1e26a70SApple OSS Distributions 78*a1e26a70SApple OSS Distributions #define CHECK(...) T_ASSERT_TRUE((__VA_ARGS__), # __VA_ARGS__) 79*a1e26a70SApple OSS Distributions 80*a1e26a70SApple OSS Distributions #endif // !TESTS_INTRUSIVE_SHARED_PTR_TEST_POLICY_H 81