Skip to content

Commit 1eb6929

Browse files
committed
add test.cc
1 parent 8698654 commit 1eb6929

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#include <memory>
2+
#include "gtest/gtest.h"
3+
class ShareDefault : public std::enable_shared_from_this<ShareDefault> {
4+
};
5+
6+
class ShareNoExplicitEnableSharedFromThis : public std::enable_shared_from_this<ShareNoExplicitEnableSharedFromThis> {
7+
public:
8+
ShareNoExplicitEnableSharedFromThis() = default;
9+
ShareNoExplicitEnableSharedFromThis(const ShareNoExplicitEnableSharedFromThis&) /*: enable_shared_from_this<>() */ {}
10+
};
11+
12+
class ShareNoExplicitCtorNeedArg : public std::enable_shared_from_this<ShareNoExplicitCtorNeedArg> {
13+
public:
14+
ShareNoExplicitCtorNeedArg(int i) : i_(i);
15+
ShareNoExplicitCtorNeedArg(const ShareNoExplicitCtorNeedArg&) /*: enable_shared_from_this<>() */ {}
16+
private:
17+
int i_;
18+
};
19+
20+
class ShareFoo : public std::enable_shared_from_this<ShareFoo> {
21+
public:
22+
ShareFoo() = default;
23+
ShareFoo(const ShareFoo&) : enable_shared_from_this<ShareFoo>() {}
24+
};
25+
26+
class ShareBar : public std::enable_shared_from_this<ShareBar> {
27+
public:
28+
ShareBar() = default;
29+
ShareBar(const ShareBar& that) : enable_shared_from_this<ShareBar>(that) {}
30+
};
31+
32+
TEST(ShareDefaultTest, copyShareNoExplicitEnableSharedFromThis) {
33+
using ShareStruct = ShareNoExplicitEnableSharedFromThis;
34+
auto pShare = std::make_shared<ShareStruct>();
35+
EXPECT_EQ(1, pShare.use_count());
36+
auto copyShare = std::make_shared<ShareStruct>(*pShare);
37+
ASSERT_EQ(1, pShare.use_count());
38+
ASSERT_EQ(1, copyShare.use_count());
39+
auto copyPtr = pShare;
40+
ASSERT_EQ(2, copyPtr.use_count());
41+
ASSERT_EQ(2, pShare.use_count());
42+
ASSERT_EQ(1, copyShare.use_count());
43+
}
44+
45+
TEST(ShareDefaultTest, copyShareNoExplicitCtorNeedArg) {
46+
using ShareStruct = ShareNoExplicitCtorNeedArg;
47+
auto pShare = std::make_shared<ShareStruct>();
48+
EXPECT_EQ(1, pShare.use_count());
49+
auto copyShare = std::make_shared<ShareStruct>(*pShare);
50+
ASSERT_EQ(1, pShare.use_count());
51+
ASSERT_EQ(1, copyShare.use_count());
52+
auto copyPtr = pShare;
53+
ASSERT_EQ(2, copyPtr.use_count());
54+
ASSERT_EQ(2, pShare.use_count());
55+
ASSERT_EQ(1, copyShare.use_count());
56+
}
57+
58+
TEST(ShareDefaultTest, copyShareDefault) {
59+
using ShareStruct = ShareDefault;
60+
auto pShare = std::make_shared<ShareStruct>();
61+
EXPECT_EQ(1, pShare.use_count());
62+
auto copyShare = std::make_shared<ShareStruct>(*pShare);
63+
ASSERT_EQ(1, pShare.use_count());
64+
ASSERT_EQ(1, copyShare.use_count());
65+
auto copyPtr = pShare;
66+
ASSERT_EQ(2, copyPtr.use_count());
67+
ASSERT_EQ(2, pShare.use_count());
68+
ASSERT_EQ(1, copyShare.use_count());
69+
}
70+
71+
TEST(ShareFooTest, copyShareFoo) {
72+
using ShareStruct = ShareFoo;
73+
auto pShare = std::make_shared<ShareStruct>();
74+
EXPECT_EQ(1, pShare.use_count());
75+
auto copyShare = std::make_shared<ShareStruct>(*pShare);
76+
ASSERT_EQ(1, pShare.use_count());
77+
ASSERT_EQ(1, copyShare.use_count());
78+
auto copyPtr = pShare;
79+
ASSERT_EQ(2, copyPtr.use_count());
80+
ASSERT_EQ(2, pShare.use_count());
81+
ASSERT_EQ(1, copyShare.use_count());
82+
}
83+
84+
TEST(ShareBarTest, copyShareBar) {
85+
using ShareStruct = ShareBar;
86+
auto pShare = std::make_shared<ShareStruct>();
87+
EXPECT_EQ(1, pShare.use_count());
88+
auto copyShare = std::make_shared<ShareStruct>(*pShare);
89+
EXPECT_EQ(1, pShare.use_count());
90+
ASSERT_EQ(1, copyShare.use_count());
91+
auto copyPtr = pShare;
92+
ASSERT_EQ(2, copyPtr.use_count());
93+
ASSERT_EQ(2, pShare.use_count());
94+
ASSERT_EQ(1, copyShare.use_count());
95+
}

0 commit comments

Comments
 (0)