Skip to content

Commit 235c9ce

Browse files
authored
Merge pull request #4 from bugparty/copilot/sub-pr-2-again
Add test coverage for move/swap operations with non-trivially copyable types
2 parents 002c14f + cf5f003 commit 235c9ce

3 files changed

Lines changed: 72 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ cmake-build-debug
33
cmake-build-release
44
build
55
Testing/Temporary
6+
_codeql_build_dir
67

_codeql_detected_source_root

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.

test_main.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,76 @@ TEST(RingBufferTest, NonMemberSwapWorks) {
336336
EXPECT_EQ(b2.back(), 4);
337337
}
338338

339+
// Tests for move and swap with non-trivially copyable types
340+
TEST(RingBufferTest, MoveConstructionWithNonTriviallyCopyableType) {
341+
ring_buffer<std::string, 4> b1;
342+
b1.push_back("hello");
343+
b1.push_back("world");
344+
b1.push_back("test");
345+
b1.pop_front();
346+
b1.push_back("data");
347+
348+
ring_buffer<std::string, 4> b2(std::move(b1));
349+
350+
EXPECT_TRUE(b1.empty());
351+
EXPECT_EQ(b2.size(), 3);
352+
EXPECT_EQ(b2.front(), "world");
353+
EXPECT_EQ(b2.back(), "data");
354+
}
355+
356+
TEST(RingBufferTest, MoveAssignmentWithNonTriviallyCopyableType) {
357+
ring_buffer<std::string, 3> b1;
358+
b1.push_back("foo");
359+
b1.push_back("bar");
360+
361+
ring_buffer<std::string, 3> b2;
362+
b2.push_back("existing");
363+
b2 = std::move(b1);
364+
365+
EXPECT_TRUE(b1.empty());
366+
EXPECT_EQ(b2.size(), 2);
367+
EXPECT_EQ(b2.front(), "foo");
368+
EXPECT_EQ(b2.back(), "bar");
369+
}
370+
371+
TEST(RingBufferTest, SwapWithNonTriviallyCopyableType) {
372+
ring_buffer<std::string, 3> b1;
373+
b1.push_back("one");
374+
b1.push_back("two");
375+
376+
ring_buffer<std::string, 3> b2;
377+
b2.push_back("alpha");
378+
b2.push_back("beta");
379+
b2.push_back("gamma");
380+
381+
b1.swap(b2);
382+
383+
EXPECT_EQ(b1.size(), 3);
384+
EXPECT_EQ(b1.front(), "alpha");
385+
EXPECT_EQ(b1.back(), "gamma");
386+
EXPECT_EQ(b2.size(), 2);
387+
EXPECT_EQ(b2.front(), "one");
388+
EXPECT_EQ(b2.back(), "two");
389+
}
390+
391+
TEST(RingBufferTest, NonMemberSwapWithNonTriviallyCopyableType) {
392+
ring_buffer<std::vector<int>, 2> b1;
393+
b1.push_back(std::vector<int>{1, 2, 3});
394+
b1.push_back(std::vector<int>{4, 5, 6});
395+
396+
ring_buffer<std::vector<int>, 2> b2;
397+
b2.push_back(std::vector<int>{7, 8, 9});
398+
399+
using std::swap;
400+
swap(b1, b2);
401+
402+
EXPECT_EQ(b1.size(), 1);
403+
EXPECT_EQ(b1.front(), (std::vector<int>{7, 8, 9}));
404+
EXPECT_EQ(b2.size(), 2);
405+
EXPECT_EQ(b2.front(), (std::vector<int>{1, 2, 3}));
406+
EXPECT_EQ(b2.back(), (std::vector<int>{4, 5, 6}));
407+
}
408+
339409
int main(int argc, char **argv) {
340410
::testing::InitGoogleTest(&argc, argv);
341411
return RUN_ALL_TESTS();

0 commit comments

Comments
 (0)