diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/test/ref_ptr_test.cpp | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/test/ref_ptr_test.cpp')
-rw-r--r-- | source/test/ref_ptr_test.cpp | 83 |
1 files changed, 83 insertions, 0 deletions
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<Base> p1 = make_ref<Test1>(); + RefPtr<Base> p2 = make_ref<Test2>(); + + EXPECT_TRUE(is<Test1>(p1)); + EXPECT_FALSE(is<Test2>(p1)); + EXPECT_TRUE(is<Test2>(p2)); + EXPECT_FALSE(is<Test1>(p2)); + + RefPtr<Base> p3 = p1; + RefPtr<Base> p4 = p2; + + p3 = p3; + swap(p3, p4); + + EXPECT_TRUE(is<Test1>(p4)); + EXPECT_FALSE(is<Test2>(p4)); + EXPECT_TRUE(is<Test2>(p3)); + EXPECT_FALSE(is<Test1>(p3)); + + EXPECT_EQ(p3, p2); + EXPECT_EQ(p4, p1); + + swap(p3, p4); + + EXPECT_EQ(p3, p1); + EXPECT_EQ(p4, p2); + + RefPtr<Base> p5; + EXPECT_FALSE(p5); + + EXPECT_NE(p4, p1); + EXPECT_NE(p3, p2); + EXPECT_NE(p3, p5); + + p5 = p2; + p2 = move(p5); + EXPECT_TRUE(is<Test2>(p2)); + + RefPtr<Test1> p6 = as<Test1>(p1); + RefPtr<Test2> p7 = as<Test2>(p2); + RefPtr<Test2> p8 = as<Test2>(p1); + EXPECT_TRUE((bool)p6); + EXPECT_TRUE((bool)p7); + EXPECT_FALSE((bool)p8); + } + + EXPECT_EQ(0, g_test1Count); + EXPECT_EQ(0, g_test2Count); +} |