From 6352e8e3196f78388b6c771073f9e03eaa612673 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Tue, 20 Jun 2023 14:33:09 +1000 Subject: everything everywhere all at once --- source/test/ref_ptr_test.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 source/test/ref_ptr_test.cpp (limited to 'source/test/ref_ptr_test.cpp') diff --git a/source/test/ref_ptr_test.cpp b/source/test/ref_ptr_test.cpp new file mode 100644 index 0000000..cc585f2 --- /dev/null +++ b/source/test/ref_ptr_test.cpp @@ -0,0 +1,83 @@ +#include "StarRefPtr.hpp" +#include "StarCasting.hpp" + +#include "gtest/gtest.h" + +using namespace Star; + +int g_test1Count = 0; +int g_test2Count = 0; + +struct Base : RefCounter {}; + +struct Test1 : Base { + Test1() { + ++g_test1Count; + } + + ~Test1() { + --g_test1Count; + } +}; + +struct Test2 : Base { + Test2() { + ++g_test2Count; + } + + ~Test2() { + --g_test2Count; + } +}; + +TEST(IntrusivePtr, All) { + { + RefPtr p1 = make_ref(); + RefPtr p2 = make_ref(); + + EXPECT_TRUE(is(p1)); + EXPECT_FALSE(is(p1)); + EXPECT_TRUE(is(p2)); + EXPECT_FALSE(is(p2)); + + RefPtr p3 = p1; + RefPtr p4 = p2; + + p3 = p3; + swap(p3, p4); + + EXPECT_TRUE(is(p4)); + EXPECT_FALSE(is(p4)); + EXPECT_TRUE(is(p3)); + EXPECT_FALSE(is(p3)); + + EXPECT_EQ(p3, p2); + EXPECT_EQ(p4, p1); + + swap(p3, p4); + + EXPECT_EQ(p3, p1); + EXPECT_EQ(p4, p2); + + RefPtr p5; + EXPECT_FALSE(p5); + + EXPECT_NE(p4, p1); + EXPECT_NE(p3, p2); + EXPECT_NE(p3, p5); + + p5 = p2; + p2 = move(p5); + EXPECT_TRUE(is(p2)); + + RefPtr p6 = as(p1); + RefPtr p7 = as(p2); + RefPtr p8 = as(p1); + EXPECT_TRUE((bool)p6); + EXPECT_TRUE((bool)p7); + EXPECT_FALSE((bool)p8); + } + + EXPECT_EQ(0, g_test1Count); + EXPECT_EQ(0, g_test2Count); +} -- cgit v1.2.3