diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2025-01-01 19:18:19 +0100 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2025-01-01 19:18:19 +0100 |
commit | 22131693e1892c5477c998ab63bf476d152b17cb (patch) | |
tree | 8cd7fbf85aa7a24db3da3d2ac1a86ec6d4c4f0f9 /asl/tests | |
parent | b2eddfabffeb78fc5b49f9c17d70175d2dfed2e0 (diff) |
Implement move constructor for buffer
Diffstat (limited to 'asl/tests')
-rw-r--r-- | asl/tests/buffer_tests.cpp | 55 | ||||
-rw-r--r-- | asl/tests/test_types.hpp | 1 |
2 files changed, 56 insertions, 0 deletions
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<DestructorObserver> buf;
+ buf.push(&d[0]);
+ buf.push(&d[1]);
+ buf.push(&d[2]);
+
+ {
+ asl::buffer<DestructorObserver> 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<uint64_t> buf;
+ buf.push(1U);
+ buf.push(2U);
+
+ asl::buffer<uint64_t> 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<DestructorObserver> buf;
+ buf.push(&d[0]);
+ buf.push(&d[1]);
+
+ {
+ asl::buffer<DestructorObserver> 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;
}
} |