summaryrefslogtreecommitdiff
path: root/asl/containers
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-06-26 14:29:16 +0200
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-06-26 18:25:00 +0200
commit43ab95880d54319ed8c02133c11392b37557ce58 (patch)
tree3c360015c20b398100ff3df380d06a690782c0a5 /asl/containers
parent47c667740560f06bb9f0bec761de816ba1dc1290 (diff)
Add pop method to chunked_buffer
Diffstat (limited to 'asl/containers')
-rw-r--r--asl/containers/buffer_tests.cpp8
-rw-r--r--asl/containers/chunked_buffer.hpp6
-rw-r--r--asl/containers/chunked_buffer_tests.cpp42
3 files changed, 52 insertions, 4 deletions
diff --git a/asl/containers/buffer_tests.cpp b/asl/containers/buffer_tests.cpp
index dbb8fa9..fc2d6ba 100644
--- a/asl/containers/buffer_tests.cpp
+++ b/asl/containers/buffer_tests.cpp
@@ -442,16 +442,16 @@ ASL_TEST(move_assign_inline_to_heap)
ASL_TEST_EXPECT(buf2.size() == 2);
ASL_TEST_EXPECT(d[0] == false);
ASL_TEST_EXPECT(d[1] == false);
- ASL_TEST_EXPECT(d[2] == false); // moved but not destroyed
- ASL_TEST_EXPECT(d[3] == false); // moved but not destroyed
+ ASL_TEST_EXPECT(d[2] == true);
+ ASL_TEST_EXPECT(d[3] == true);
ASL_TEST_EXPECT(d[4] == true);
ASL_TEST_EXPECT(d[5] == true);
}
ASL_TEST_EXPECT(d[0] == true);
ASL_TEST_EXPECT(d[1] == true);
- ASL_TEST_EXPECT(d[2] == false); // moved but not destroyed
- ASL_TEST_EXPECT(d[3] == false); // moved but not destroyed
+ ASL_TEST_EXPECT(d[2] == true);
+ ASL_TEST_EXPECT(d[3] == true);
ASL_TEST_EXPECT(d[4] == true);
ASL_TEST_EXPECT(d[5] == true);
}
diff --git a/asl/containers/chunked_buffer.hpp b/asl/containers/chunked_buffer.hpp
index 3af7aa2..152ddd2 100644
--- a/asl/containers/chunked_buffer.hpp
+++ b/asl/containers/chunked_buffer.hpp
@@ -335,6 +335,12 @@ public:
resize_uninit_inner(new_size);
}
+ void pop()
+ {
+ ASL_ASSERT(size() > 0);
+ resize_uninit_inner(size() - 1);
+ }
+
template<typename Chunk>
class generic_iterator
{
diff --git a/asl/containers/chunked_buffer_tests.cpp b/asl/containers/chunked_buffer_tests.cpp
index 797f7f1..ba29bfb 100644
--- a/asl/containers/chunked_buffer_tests.cpp
+++ b/asl/containers/chunked_buffer_tests.cpp
@@ -135,6 +135,48 @@ ASL_TEST(push)
}
}
+ASL_TEST(pop)
+{
+ asl::chunked_buffer<int, 2> b;
+
+ for (int i = 0; i < 8; ++i)
+ {
+ b.push(i);
+ }
+ ASL_TEST_EXPECT(b.size() == 8);
+
+ b.pop();
+ ASL_TEST_EXPECT(b.size() == 7);
+ for (int i = 0; i < 7; ++i)
+ {
+ ASL_TEST_EXPECT(b[i] == i);
+ }
+}
+
+ASL_TEST(pop_destruct)
+{
+ asl::chunked_buffer<DestructorObserver, 16> b;
+ bool d[3];
+
+ b.push(&d[0]);
+ b.push(&d[1]);
+ b.push(&d[2]);
+
+ ASL_TEST_EXPECT(!d[0]);
+ ASL_TEST_EXPECT(!d[1]);
+ ASL_TEST_EXPECT(!d[2]);
+
+ b.pop();
+ ASL_TEST_EXPECT(!d[0]);
+ ASL_TEST_EXPECT(!d[1]);
+ ASL_TEST_EXPECT(d[2]);
+
+ b.pop();
+ ASL_TEST_EXPECT(!d[0]);
+ ASL_TEST_EXPECT(d[1]);
+ ASL_TEST_EXPECT(d[2]);
+}
+
ASL_TEST(clear_destroy)
{
bool destroyed[5]{};