| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "SharedRef.hpp" | ||
| 2 | |||
| 3 | #include "Shape.hpp" | ||
| 4 | #include "Verbose.hpp" | ||
| 5 | #include "compat/gsl14.hpp" | ||
| 6 | |||
| 7 | #include <gmock/gmock.h> | ||
| 8 | #include <vector> | ||
| 9 | |||
| 10 | using namespace testing; | ||
| 11 | using namespace testing::internal; | ||
| 12 | |||
| 13 | // Anonymous namespace for definitions that are local to this file. | ||
| 14 | namespace { | ||
| 15 | template <typename T> | ||
| 16 | using SharedContainer = std::vector<SharedRef<T>>; | ||
| 17 | |||
| 18 | // Both refer to the same object (same address) | ||
| 19 | template <typename T> | ||
| 20 | 3 | bool same(const SharedRef<T>& a, const SharedRef<T>& b) { | |
| 21 | 3 | return &a.get() == &b.get(); | |
| 22 | } | ||
| 23 | |||
| 24 | 6 | bool less(const Verbose<>& left, const Verbose<>& right) { | |
| 25 | 6 | return left.name() < right.name(); | |
| 26 | } | ||
| 27 | |||
| 28 | 28 | const std::string& name(const Verbose<Circle>& v) { return v.name(); } | |
| 29 | |||
| 30 | 39 | const std::string& name(const Verbose<>& v) { return v.name(); } | |
| 31 | |||
| 32 | 9 | double area(const Shape& a) { return a.area(); } | |
| 33 | |||
| 34 | // Print the elements of a container of smart references. | ||
| 35 | template <typename T> | ||
| 36 | 4 | void print( | |
| 37 | const SharedContainer<Verbose<T>>& container, | ||
| 38 | const std::string& prefix = "print: ") { | ||
| 39 |
2/2✓ Branch 9 taken 12 times.
✓ Branch 10 taken 4 times.
|
16 | for (const auto& elem : container) { |
| 40 |
3/6✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
✓ Branch 12 taken 12 times.
✗ Branch 13 not taken.
✓ Branch 18 taken 12 times.
✗ Branch 19 not taken.
|
12 | std::cout << prefix << name(elem) << std::endl; |
| 41 |
5/16✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
✓ Branch 20 taken 12 times.
✗ Branch 21 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 12 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
12 | EXPECT_THAT(name(elem), Not(HasSubstr("copy"))); |
| 42 |
5/16✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
✓ Branch 20 taken 12 times.
✗ Branch 21 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 12 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
|
12 | EXPECT_THAT(name(elem), Not(HasSubstr("move"))); |
| 43 | } | ||
| 44 | 4 | } | |
| 45 | } // anonymous namespace | ||
| 46 | |||
| 47 | // NOLINTBEGIN(*-avoid-magic-numbers) | ||
| 48 | |||
| 49 | 8 | TEST(SharedRef, constructor) { | |
| 50 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto a = makeSharedRef<Verbose<Circle>>("one", 1.0); |
| 51 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto b = makeSharedRef<Verbose<Circle>>("two", 2.0); |
| 52 | // auto c = SharedRef<Verbose<Circle>> { }; // no dangling references! | ||
| 53 | |||
| 54 |
2/12✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
2 | EXPECT_FALSE(same(a, b)); |
| 55 |
2/10✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
2 | EXPECT_NE(name(a), name(b)); |
| 56 |
4/14✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
|
2 | EXPECT_NE(area(a), area(b)); |
| 57 | 4 | } | |
| 58 | |||
| 59 | 8 | TEST(SharedRef, copy) { | |
| 60 | // SharedRef is copyable because shared_ptr is copyable. | ||
| 61 |
1/10✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2 | EXPECT_TRUE(std::is_copy_constructible<SharedRef<Shape>>::value); |
| 62 |
1/10✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2 | EXPECT_TRUE(std::is_copy_assignable<SharedRef<Shape>>::value); |
| 63 | |||
| 64 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto a = makeSharedRef<Verbose<Circle>>("one", 1.0); |
| 65 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto b = makeSharedRef<Verbose<Circle>>("two", 2.0); |
| 66 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto c = makeSharedRef<Verbose<Circle>>("three", 3.0); |
| 67 | 2 | auto d = SharedRef<Verbose<Circle>>{a}; // copy constructor | |
| 68 | |||
| 69 | 2 | c = b; // copy assignment | |
| 70 | |||
| 71 | // Copying modifies the reference, not the object. | ||
| 72 | |||
| 73 |
2/12✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
2 | EXPECT_TRUE(same(a, d)); // both refer to same object |
| 74 |
2/10✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
2 | EXPECT_EQ(name(a), name(d)); |
| 75 |
4/14✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
|
2 | EXPECT_EQ(area(a), area(d)); |
| 76 | |||
| 77 |
2/12✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
2 | EXPECT_TRUE(same(b, c)); // both refer to same object |
| 78 |
2/10✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
2 | EXPECT_EQ(name(b), name(c)); |
| 79 |
4/14✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
|
2 | EXPECT_EQ(area(b), area(c)); |
| 80 | |||
| 81 |
4/14✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
|
2 | EXPECT_THAT(name(c), EndsWith("two")); |
| 82 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("three"))); |
| 83 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("copy"))); |
| 84 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("move"))); |
| 85 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("construct"))); |
| 86 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("assign"))); |
| 87 | |||
| 88 |
4/14✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
|
2 | EXPECT_THAT(name(d), EndsWith("one")); |
| 89 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("copy"))); |
| 90 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("move"))); |
| 91 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("construct"))); |
| 92 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("assign"))); |
| 93 | 4 | } | |
| 94 | |||
| 95 | 8 | TEST(SharedRef, move) { | |
| 96 | // SharedRef is moveable because shared_ptr is moveable. | ||
| 97 |
1/10✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2 | EXPECT_TRUE(std::is_move_constructible<SharedRef<Shape>>::value); |
| 98 |
1/10✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
2 | EXPECT_TRUE(std::is_move_assignable<SharedRef<Shape>>::value); |
| 99 | |||
| 100 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto a = makeSharedRef<Verbose<Circle>>("one", 1.0); |
| 101 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto b = makeSharedRef<Verbose<Circle>>("two", 2.0); |
| 102 |
1/2✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | auto c = makeSharedRef<Verbose<Circle>>("three", 3.0); |
| 103 | 4 | auto d = SharedRef<Verbose<Circle>>{std::move(a)}; // move constructor | |
| 104 | |||
| 105 | 2 | c = std::move(b); // move assignment | |
| 106 | |||
| 107 | // Moving modifies the reference, not the object. | ||
| 108 | |||
| 109 |
4/14✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
|
2 | EXPECT_THAT(name(c), EndsWith("two")); |
| 110 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("three"))); |
| 111 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("copy"))); |
| 112 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("move"))); |
| 113 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("construct"))); |
| 114 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(c), Not(HasSubstr("assign"))); |
| 115 | |||
| 116 |
4/14✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
|
2 | EXPECT_THAT(name(d), EndsWith("one")); |
| 117 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("copy"))); |
| 118 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("move"))); |
| 119 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("construct"))); |
| 120 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
|
2 | EXPECT_THAT(name(d), Not(HasSubstr("assign"))); |
| 121 | 4 | } | |
| 122 | |||
| 123 | 8 | TEST(SharedRef, rebind) { | |
| 124 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CaptureStdout(); |
| 125 |
4/10✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
6 | auto a = SharedRef<Shape>{new Verbose<Square>{"square", 3.0}}; |
| 126 | 2 | auto b = a; // copy reference, not object | |
| 127 |
4/10✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
|
6 | b = SharedRef<Shape>{new Verbose<Circle>{"circle", 3.0}}; |
| 128 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | auto actual = GetCapturedStdout(); |
| 129 |
4/14✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
|
2 | EXPECT_NE(area(a), area(b)); |
| 130 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
|
2 | EXPECT_THAT(actual, Not(HasSubstr("copy"))); |
| 131 |
5/16✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
|
2 | EXPECT_THAT(actual, Not(HasSubstr("move"))); |
| 132 |
3/6✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | std::cout << std::endl << actual << std::endl; |
| 133 | 4 | } | |
| 134 | |||
| 135 | 8 | TEST(SharedRef, swap) { | |
| 136 |
4/10✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
6 | auto a = SharedRef<Shape>{new Verbose<Square>{"square", 1.0}}; |
| 137 |
4/10✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
6 | auto b = SharedRef<Shape>{new Verbose<Circle>{"circle", 2.0}}; |
| 138 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CaptureStdout(); |
| 139 | 2 | swap(a, b); // swap references, not objects | |
| 140 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | auto actual = GetCapturedStdout(); |
| 141 |
3/12✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
2 | EXPECT_EQ(1.0, area(b)); |
| 142 |
1/12✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
2 | EXPECT_TRUE(actual.empty()) << actual; |
| 143 | 4 | } | |
| 144 | |||
| 145 | 8 | TEST(SharedRef, container) { | |
| 146 | 2 | auto container = SharedContainer<Verbose<>>{}; | |
| 147 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | container.emplace_back(std::make_shared<Verbose<>>("one")); |
| 148 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | container.emplace_back(std::make_shared<Verbose<>>("two")); |
| 149 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | container.emplace_back(std::make_shared<Verbose<>>("three")); |
| 150 | |||
| 151 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
6 | print(container, "original :"); |
| 152 |
2/10✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
|
2 | EXPECT_EQ("two", name(container[1])); |
| 153 | |||
| 154 | // Copying a container of references | ||
| 155 | // does not copy the referenced objects. | ||
| 156 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | auto container_copy = container; |
| 157 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
6 | print(container_copy, "copy: "); |
| 158 | |||
| 159 | // Sorting a container of references | ||
| 160 | // does not affect the original container. | ||
| 161 | #if __cplusplus >= 202002L // since C++20 | ||
| 162 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | std::ranges::sort(container_copy, less); |
| 163 | #else // until C++20 | ||
| 164 | std::sort(container_copy.begin(), container_copy.end(), less); | ||
| 165 | #endif // C++20 | ||
| 166 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
6 | print(container_copy, "sorted: "); |
| 167 |
2/10✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
|
2 | EXPECT_EQ(name(container[2]), name(container_copy[1])); |
| 168 | |||
| 169 | // Moving a container of references | ||
| 170 | // does not move the objects. | ||
| 171 | 4 | auto container_move = std::move(container); | |
| 172 |
2/4✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
6 | print(container_move, "move: "); |
| 173 | 4 | } | |
| 174 | |||
| 175 | // NOLINTEND(*-avoid-magic-numbers) | ||
| 176 |