// // Tests for // intrusive_shared_ptr& operator=(std::nullptr_t); // #include #include #include "test_policy.h" struct T { int i; }; template static void tests() { T obj{3}; // Assign nullptr to non-null { tracked_shared_ptr ptr(&obj, libkern::retain); tracking_policy::reset(); tracked_shared_ptr& ref = (ptr = nullptr); CHECK(tracking_policy::releases == 1); CHECK(tracking_policy::retains == 0); CHECK(&ref == &ptr); CHECK(ptr.get() == nullptr); } // Assign nullptr to null { tracked_shared_ptr ptr = nullptr; tracking_policy::reset(); tracked_shared_ptr& ref = (ptr = nullptr); CHECK(tracking_policy::releases == 0); CHECK(tracking_policy::retains == 0); CHECK(&ref == &ptr); CHECK(ptr.get() == nullptr); } } T_DECL(assign_nullptr, "intrusive_shared_ptr.assign.nullptr", T_META_TAG_VM_PREFERRED) { tests(); tests(); }