summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-01 18:07:01 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-01 18:07:01 +0200
commit710d1d11d471d3b3f7e5a4d126487665752bbfaa (patch)
treeeaf03e51ab612694c30c678ae6fd273b899d75b7
parent2ed110ed2d0ef093ba6cc14771b6387eff70c866 (diff)
Added some tests
-rw-r--r--modules/core/c++/buffer.cpp11
-rw-r--r--modules/core/tests/array_buffer.cpp20
2 files changed, 30 insertions, 1 deletions
diff --git a/modules/core/c++/buffer.cpp b/modules/core/c++/buffer.cpp
index 3793226..12df1ab 100644
--- a/modules/core/c++/buffer.cpp
+++ b/modules/core/c++/buffer.cpp
@@ -427,8 +427,17 @@ const uint8_t &array_buffer::write(size_t i) const {
}
error array_buffer::write_require_length(size_t bytes) {
size_t write_remain = write_composite_length();
+
if (bytes > write_remain) {
- return make_error<err::buffer_exhausted>();
+
+ uint64_t resize_that_much = bytes - write_remain;
+ uint64_t resize_to_that_size = resize_that_much + buffer_.size();
+
+ try {
+ buffer_.resize(resize_to_that_size);
+ }catch(const std::exception&e){
+ return make_error<err::out_of_memory>();
+ }
}
return no_error();
}
diff --git a/modules/core/tests/array_buffer.cpp b/modules/core/tests/array_buffer.cpp
index bc9bffd..9785424 100644
--- a/modules/core/tests/array_buffer.cpp
+++ b/modules/core/tests/array_buffer.cpp
@@ -34,6 +34,26 @@ SAW_TEST("Array Buffer Write Advance") {
SAW_EXPECT(buff.read_composite_length() == advance, "Unexpected Read composite length.");
SAW_EXPECT(buff.write_composite_length() == (size-advance), "Unexpected Write composite length.");
do_array_consistency_checks(buff);
+
+ buff.write_advance(size-advance);
+ SAW_EXPECT(buff.write_position() == (size), "Unexpected write position");
+ SAW_EXPECT(buff.write_composite_length() == 0u, "Unexpected Write composite length.");
+ do_array_consistency_checks(buff);
+}
+
+SAW_TEST("Array Buffer Write Require Length") {
+ using namespace saw;
+
+ uint64_t size = 1024u;
+ array_buffer buff{size};
+
+ error err = buff.write_require_length(2u*size);
+
+ SAW_EXPECT(buff.read_position() == 0u, "Unexpected read position");
+ SAW_EXPECT(buff.write_position() == 0u, "Unexpected write position");
+ SAW_EXPECT(buff.read_composite_length() == 0u, "Unexpected Read composite length.");
+ SAW_EXPECT(buff.write_composite_length() == 2u*size, std::string{"Unexpected Write composite length. Size "} + std::to_string(buff.write_composite_length()));
+ do_array_consistency_checks(buff);
}
SAW_TEST("Array Buffer Write and Read Advance") {