X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/eb6b6ca394357805f2bdba989abae309f718b4d8..f427ee49d309d8fc33ebf3042c3a775f2f530ded:/tests/intrusive_shared_ptr_src/assign.nullptr.cpp diff --git a/tests/intrusive_shared_ptr_src/assign.nullptr.cpp b/tests/intrusive_shared_ptr_src/assign.nullptr.cpp new file mode 100644 index 000000000..55068d601 --- /dev/null +++ b/tests/intrusive_shared_ptr_src/assign.nullptr.cpp @@ -0,0 +1,46 @@ +// +// 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") { + tests(); + tests(); +}