@@ -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+
339409int main (int argc, char **argv) {
340410 ::testing::InitGoogleTest (&argc, argv);
341411 return RUN_ALL_TESTS ();
0 commit comments