Skip to content

Commit bce20c9

Browse files
committed
Increate coverage of observer assignment operator
1 parent f35e1a3 commit bce20c9

File tree

1 file changed

+188
-24
lines changed

1 file changed

+188
-24
lines changed

tests/runtime_tests.cpp

Lines changed: 188 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,7 +1579,7 @@ TEST_CASE("observer default constructor", "[observer_construction]") {
15791579
memory_tracker mem_track;
15801580

15811581
{
1582-
test_optr ptr{};
1582+
test_optr ptr;
15831583
REQUIRE(instances == 0);
15841584
REQUIRE(ptr.get() == nullptr);
15851585
REQUIRE(ptr.expired() == true);
@@ -2023,7 +2023,7 @@ TEST_CASE("observer operator bool invalid", "[observer_utility]") {
20232023
REQUIRE(mem_track.double_del() == 0u);
20242024
}
20252025

2026-
TEST_CASE("observer copy assignment operator from valid", "[observer_assignment]") {
2026+
TEST_CASE("observer copy assignment operator valid to empty", "[observer_assignment]") {
20272027
memory_tracker mem_track;
20282028

20292029
{
@@ -2033,9 +2033,9 @@ TEST_CASE("observer copy assignment operator from valid", "[observer_assignment]
20332033
test_optr ptr;
20342034
ptr = ptr_orig;
20352035
REQUIRE(instances == 1);
2036-
REQUIRE(ptr.get() != nullptr);
2036+
REQUIRE(ptr.get() == ptr_owner.get());
20372037
REQUIRE(ptr.expired() == false);
2038-
REQUIRE(ptr_orig.get() != nullptr);
2038+
REQUIRE(ptr_orig.get() == ptr_owner.get());
20392039
REQUIRE(ptr_orig.expired() == false);
20402040
}
20412041

@@ -2047,7 +2047,32 @@ TEST_CASE("observer copy assignment operator from valid", "[observer_assignment]
20472047
REQUIRE(mem_track.double_del() == 0u);
20482048
}
20492049

2050-
TEST_CASE("observer copy assignment operator from empty", "[observer_assignment]") {
2050+
TEST_CASE("observer copy assignment operator valid to valid", "[observer_assignment]") {
2051+
memory_tracker mem_track;
2052+
2053+
{
2054+
test_ptr ptr_owner1{new test_object};
2055+
test_ptr ptr_owner2{new test_object};
2056+
test_optr ptr_orig{ptr_owner1};
2057+
{
2058+
test_optr ptr(ptr_owner2);
2059+
ptr = ptr_orig;
2060+
REQUIRE(instances == 2);
2061+
REQUIRE(ptr.get() == ptr_owner1.get());
2062+
REQUIRE(ptr.expired() == false);
2063+
REQUIRE(ptr_orig.get() == ptr_owner1.get());
2064+
REQUIRE(ptr_orig.expired() == false);
2065+
}
2066+
2067+
REQUIRE(instances == 2);
2068+
}
2069+
2070+
REQUIRE(instances == 0);
2071+
REQUIRE(mem_track.leaks() == 0u);
2072+
REQUIRE(mem_track.double_del() == 0u);
2073+
}
2074+
2075+
TEST_CASE("observer copy assignment operator empty to empty", "[observer_assignment]") {
20512076
memory_tracker mem_track;
20522077

20532078
{
@@ -2070,7 +2095,7 @@ TEST_CASE("observer copy assignment operator from empty", "[observer_assignment]
20702095
REQUIRE(mem_track.double_del() == 0u);
20712096
}
20722097

2073-
TEST_CASE("observer move assignment operator from valid", "[observer_assignment]") {
2098+
TEST_CASE("observer move assignment operator valid to empty", "[observer_assignment]") {
20742099
memory_tracker mem_track;
20752100

20762101
{
@@ -2080,7 +2105,7 @@ TEST_CASE("observer move assignment operator from valid", "[observer_assignment]
20802105
test_optr ptr;
20812106
ptr = std::move(ptr_orig);
20822107
REQUIRE(instances == 1);
2083-
REQUIRE(ptr.get() != nullptr);
2108+
REQUIRE(ptr.get() == ptr_owner.get());
20842109
REQUIRE(ptr.expired() == false);
20852110
REQUIRE(ptr_orig.get() == nullptr);
20862111
REQUIRE(ptr_orig.expired() == true);
@@ -2094,7 +2119,32 @@ TEST_CASE("observer move assignment operator from valid", "[observer_assignment]
20942119
REQUIRE(mem_track.double_del() == 0u);
20952120
}
20962121

2097-
TEST_CASE("observer move assignment operator from empty", "[observer_assignment]") {
2122+
TEST_CASE("observer move assignment operator valid to valid", "[observer_assignment]") {
2123+
memory_tracker mem_track;
2124+
2125+
{
2126+
test_ptr ptr_owner1{new test_object};
2127+
test_ptr ptr_owner2{new test_object};
2128+
test_optr ptr_orig{ptr_owner1};
2129+
{
2130+
test_optr ptr{ptr_owner2};
2131+
ptr = std::move(ptr_orig);
2132+
REQUIRE(instances == 2);
2133+
REQUIRE(ptr.get() == ptr_owner1.get());
2134+
REQUIRE(ptr.expired() == false);
2135+
REQUIRE(ptr_orig.get() == nullptr);
2136+
REQUIRE(ptr_orig.expired() == true);
2137+
}
2138+
2139+
REQUIRE(instances == 2);
2140+
}
2141+
2142+
REQUIRE(instances == 0);
2143+
REQUIRE(mem_track.leaks() == 0u);
2144+
REQUIRE(mem_track.double_del() == 0u);
2145+
}
2146+
2147+
TEST_CASE("observer move assignment operator empty to empty", "[observer_assignment]") {
20982148
memory_tracker mem_track;
20992149

21002150
{
@@ -2117,7 +2167,7 @@ TEST_CASE("observer move assignment operator from empty", "[observer_assignment]
21172167
REQUIRE(mem_track.double_del() == 0u);
21182168
}
21192169

2120-
TEST_CASE("observer acquiring assignment operator from valid", "[observer_assignment]") {
2170+
TEST_CASE("observer acquiring assignment operator valid to empty", "[observer_assignment]") {
21212171
memory_tracker mem_track;
21222172

21232173
{
@@ -2126,7 +2176,7 @@ TEST_CASE("observer acquiring assignment operator from valid", "[observer_assign
21262176
ptr = ptr_owner;
21272177

21282178
REQUIRE(instances == 1);
2129-
REQUIRE(ptr.get() != nullptr);
2179+
REQUIRE(ptr.get() == ptr_owner.get());
21302180
REQUIRE(ptr.expired() == false);
21312181
}
21322182

@@ -2135,34 +2185,72 @@ TEST_CASE("observer acquiring assignment operator from valid", "[observer_assign
21352185
REQUIRE(mem_track.double_del() == 0u);
21362186
}
21372187

2138-
TEST_CASE("observer acquiring assignment operator from valid sealed", "[observer_assignment]") {
2188+
TEST_CASE("observer acquiring assignment operator valid to valid", "[observer_assignment]") {
21392189
memory_tracker mem_track;
21402190

21412191
{
2142-
test_sptr ptr_owner = oup::make_observable_sealed<test_object>();
2192+
test_ptr ptr_owner1{new test_object};
2193+
test_ptr ptr_owner2{new test_object};
2194+
test_optr ptr{ptr_owner1};
2195+
ptr = ptr_owner2;
2196+
2197+
REQUIRE(instances == 2);
2198+
REQUIRE(ptr.get() == ptr_owner2.get());
2199+
REQUIRE(ptr.expired() == false);
2200+
}
2201+
2202+
REQUIRE(instances == 0);
2203+
REQUIRE(mem_track.leaks() == 0u);
2204+
REQUIRE(mem_track.double_del() == 0u);
2205+
}
2206+
2207+
TEST_CASE("observer acquiring assignment operator empty to valid", "[observer_assignment]") {
2208+
memory_tracker mem_track;
2209+
2210+
{
2211+
test_ptr ptr_owner1{new test_object};
2212+
test_ptr ptr_owner2;
2213+
test_optr ptr{ptr_owner1};
2214+
ptr = ptr_owner2;
2215+
2216+
REQUIRE(instances == 1);
2217+
REQUIRE(ptr.get() == nullptr);
2218+
REQUIRE(ptr.expired() == true);
2219+
}
2220+
2221+
REQUIRE(instances == 0);
2222+
REQUIRE(mem_track.leaks() == 0u);
2223+
REQUIRE(mem_track.double_del() == 0u);
2224+
}
2225+
2226+
TEST_CASE("observer acquiring assignment operator empty to empty", "[observer_assignment]") {
2227+
memory_tracker mem_track;
2228+
2229+
{
2230+
test_ptr ptr_owner;
21432231
test_optr ptr;
21442232
ptr = ptr_owner;
21452233

2146-
REQUIRE(instances == 1);
2147-
REQUIRE(ptr.get() != nullptr);
2148-
REQUIRE(ptr.expired() == false);
2234+
REQUIRE(instances == 0);
2235+
REQUIRE(ptr.get() == nullptr);
2236+
REQUIRE(ptr.expired() == true);
21492237
}
21502238

21512239
REQUIRE(instances == 0);
21522240
REQUIRE(mem_track.leaks() == 0u);
21532241
REQUIRE(mem_track.double_del() == 0u);
21542242
}
21552243

2156-
TEST_CASE("observer acquiring assignment operator from valid with deleter", "[observer_assignment]") {
2244+
TEST_CASE("observer acquiring assignment operator valid to empty sealed", "[observer_assignment]") {
21572245
memory_tracker mem_track;
21582246

21592247
{
2160-
test_ptr_with_deleter ptr_owner{new test_object, test_deleter{42}};
2248+
test_sptr ptr_owner = oup::make_observable_sealed<test_object>();
21612249
test_optr ptr;
21622250
ptr = ptr_owner;
21632251

21642252
REQUIRE(instances == 1);
2165-
REQUIRE(ptr.get() != nullptr);
2253+
REQUIRE(ptr.get() == ptr_owner.get());
21662254
REQUIRE(ptr.expired() == false);
21672255
}
21682256

@@ -2171,11 +2259,49 @@ TEST_CASE("observer acquiring assignment operator from valid with deleter", "[ob
21712259
REQUIRE(mem_track.double_del() == 0u);
21722260
}
21732261

2174-
TEST_CASE("observer acquiring assignment operator from empty", "[observer_assignment]") {
2262+
TEST_CASE("observer acquiring assignment operator valid to valid sealed", "[observer_assignment]") {
21752263
memory_tracker mem_track;
21762264

21772265
{
2178-
test_ptr ptr_owner;
2266+
test_sptr ptr_owner1 = oup::make_observable_sealed<test_object>();
2267+
test_sptr ptr_owner2 = oup::make_observable_sealed<test_object>();
2268+
test_optr ptr{ptr_owner1};
2269+
ptr = ptr_owner2;
2270+
2271+
REQUIRE(instances == 2);
2272+
REQUIRE(ptr.get() == ptr_owner2.get());
2273+
REQUIRE(ptr.expired() == false);
2274+
}
2275+
2276+
REQUIRE(instances == 0);
2277+
REQUIRE(mem_track.leaks() == 0u);
2278+
REQUIRE(mem_track.double_del() == 0u);
2279+
}
2280+
2281+
TEST_CASE("observer acquiring assignment operator empty to valid sealed", "[observer_assignment]") {
2282+
memory_tracker mem_track;
2283+
2284+
{
2285+
test_sptr ptr_owner1 = oup::make_observable_sealed<test_object>();
2286+
test_sptr ptr_owner2;
2287+
test_optr ptr{ptr_owner1};
2288+
ptr = ptr_owner2;
2289+
2290+
REQUIRE(instances == 1);
2291+
REQUIRE(ptr.get() == nullptr);
2292+
REQUIRE(ptr.expired() == true);
2293+
}
2294+
2295+
REQUIRE(instances == 0);
2296+
REQUIRE(mem_track.leaks() == 0u);
2297+
REQUIRE(mem_track.double_del() == 0u);
2298+
}
2299+
2300+
TEST_CASE("observer acquiring assignment operator empty to empty sealed", "[observer_assignment]") {
2301+
memory_tracker mem_track;
2302+
2303+
{
2304+
test_sptr ptr_owner;
21792305
test_optr ptr;
21802306
ptr = ptr_owner;
21812307

@@ -2189,15 +2315,53 @@ TEST_CASE("observer acquiring assignment operator from empty", "[observer_assign
21892315
REQUIRE(mem_track.double_del() == 0u);
21902316
}
21912317

2192-
TEST_CASE("observer acquiring assignment operator from empty sealed", "[observer_assignment]") {
2318+
TEST_CASE("observer acquiring assignment operator valid to empty with deleter", "[observer_assignment]") {
21932319
memory_tracker mem_track;
21942320

21952321
{
2196-
test_sptr ptr_owner;
2322+
test_ptr_with_deleter ptr_owner{new test_object, test_deleter{42}};
21972323
test_optr ptr;
21982324
ptr = ptr_owner;
21992325

2200-
REQUIRE(instances == 0);
2326+
REQUIRE(instances == 1);
2327+
REQUIRE(ptr.get() == ptr_owner.get());
2328+
REQUIRE(ptr.expired() == false);
2329+
}
2330+
2331+
REQUIRE(instances == 0);
2332+
REQUIRE(mem_track.leaks() == 0u);
2333+
REQUIRE(mem_track.double_del() == 0u);
2334+
}
2335+
2336+
TEST_CASE("observer acquiring assignment operator valid to valid with deleter", "[observer_assignment]") {
2337+
memory_tracker mem_track;
2338+
2339+
{
2340+
test_ptr_with_deleter ptr_owner1{new test_object, test_deleter{42}};
2341+
test_ptr_with_deleter ptr_owner2{new test_object, test_deleter{42}};
2342+
test_optr ptr{ptr_owner1};
2343+
ptr = ptr_owner2;
2344+
2345+
REQUIRE(instances == 2);
2346+
REQUIRE(ptr.get() == ptr_owner2.get());
2347+
REQUIRE(ptr.expired() == false);
2348+
}
2349+
2350+
REQUIRE(instances == 0);
2351+
REQUIRE(mem_track.leaks() == 0u);
2352+
REQUIRE(mem_track.double_del() == 0u);
2353+
}
2354+
2355+
TEST_CASE("observer acquiring assignment operator empty to valid with deleter", "[observer_assignment]") {
2356+
memory_tracker mem_track;
2357+
2358+
{
2359+
test_ptr_with_deleter ptr_owner1{new test_object, test_deleter{42}};
2360+
test_ptr_with_deleter ptr_owner2{nullptr, test_deleter{43}};
2361+
test_optr ptr{ptr_owner1};
2362+
ptr = ptr_owner2;
2363+
2364+
REQUIRE(instances == 1);
22012365
REQUIRE(ptr.get() == nullptr);
22022366
REQUIRE(ptr.expired() == true);
22032367
}
@@ -2207,7 +2371,7 @@ TEST_CASE("observer acquiring assignment operator from empty sealed", "[observer
22072371
REQUIRE(mem_track.double_del() == 0u);
22082372
}
22092373

2210-
TEST_CASE("observer acquiring assignment operator from empty with deleter", "[observer_assignment]") {
2374+
TEST_CASE("observer acquiring assignment operator empty to empty with deleter", "[observer_assignment]") {
22112375
memory_tracker mem_track;
22122376

22132377
{

0 commit comments

Comments
 (0)