summaryrefslogtreecommitdiff
path: root/asl/tests
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-01-01 19:18:19 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-01-01 19:18:19 +0100
commit22131693e1892c5477c998ab63bf476d152b17cb (patch)
tree8cd7fbf85aa7a24db3da3d2ac1a86ec6d4c4f0f9 /asl/tests
parentb2eddfabffeb78fc5b49f9c17d70175d2dfed2e0 (diff)
Implement move constructor for buffer
Diffstat (limited to 'asl/tests')
-rw-r--r--asl/tests/buffer_tests.cpp55
-rw-r--r--asl/tests/test_types.hpp1
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;
}
}