From 22131693e1892c5477c998ab63bf476d152b17cb Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Wed, 1 Jan 2025 19:18:19 +0100 Subject: Implement move constructor for buffer --- asl/tests/buffer_tests.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++ asl/tests/test_types.hpp | 1 + 2 files changed, 56 insertions(+) (limited to 'asl/tests') diff --git a/asl/tests/buffer_tests.cpp b/asl/tests/buffer_tests.cpp index 15cc391..556eb2c 100644 --- a/asl/tests/buffer_tests.cpp +++ b/asl/tests/buffer_tests.cpp @@ -228,3 +228,58 @@ ASL_TEST(clear_destructor_heap) ASL_TEST_EXPECT(d1 == true); ASL_TEST_EXPECT(d2 == true); } + +ASL_TEST(move_construct_from_heap) +{ + bool d[3]{}; + asl::buffer buf; + buf.push(&d[0]); + buf.push(&d[1]); + buf.push(&d[2]); + + { + asl::buffer buf2(ASL_MOVE(buf)); + ASL_TEST_EXPECT(buf2.size() == 3); + ASL_TEST_EXPECT(d[0] == false); + ASL_TEST_EXPECT(d[1] == false); + ASL_TEST_EXPECT(d[2] == false); + } + + ASL_TEST_EXPECT(buf.size() == 0); + ASL_TEST_EXPECT(d[0] == true); + ASL_TEST_EXPECT(d[1] == true); + ASL_TEST_EXPECT(d[2] == true); +} + +ASL_TEST(move_construct_inline_trivial) +{ + asl::buffer buf; + buf.push(1U); + buf.push(2U); + + asl::buffer buf2(ASL_MOVE(buf)); + ASL_TEST_EXPECT(buf2[0] == 1U); + ASL_TEST_EXPECT(buf2[1] == 2U); + + ASL_TEST_EXPECT(buf2.size() == 2); + ASL_TEST_EXPECT(buf.size() == 0); +} + +ASL_TEST(move_construct_from_inline_non_trivial) +{ + bool d[2]{}; + asl::buffer buf; + buf.push(&d[0]); + buf.push(&d[1]); + + { + asl::buffer buf2(ASL_MOVE(buf)); + ASL_TEST_EXPECT(buf2.size() == 2); + ASL_TEST_EXPECT(d[0] == false); + ASL_TEST_EXPECT(d[1] == false); + } + + ASL_TEST_EXPECT(buf.size() == 0); + ASL_TEST_EXPECT(d[0] == true); + ASL_TEST_EXPECT(d[1] == true); +} diff --git a/asl/tests/test_types.hpp b/asl/tests/test_types.hpp index f91afb3..1bcf72f 100644 --- a/asl/tests/test_types.hpp +++ b/asl/tests/test_types.hpp @@ -82,6 +82,7 @@ struct DestructorObserver { if (destroyed != nullptr) { + ASL_ASSERT_RELEASE(*destroyed == false); *destroyed = true; } } -- cgit