diff --git a/src/memchunk_test.cc b/src/memchunk_test.cc index e753b4fa..d8a4b4eb 100644 --- a/src/memchunk_test.cc +++ b/src/memchunk_test.cc @@ -43,6 +43,7 @@ const MunitTest tests[]{ munit_void_test(test_memchunks_riovec), munit_void_test(test_memchunks_recycle), munit_void_test(test_memchunks_reset), + munit_void_test(test_memchunks_reserve), munit_void_test(test_memchunkbuffer_drain_reset), munit_test_end(), }; @@ -239,6 +240,45 @@ void test_memchunks_reset(void) { assert_null(m->next->next); } +void test_memchunks_reserve(void) { + MemchunkPool16 pool; + Memchunks16 chunks(&pool); + std::array iov; + + chunks.reserve(8); + chunks.last(std::ranges::copy("foobar00"sv, chunks.last()).out); + + assert_size(8, ==, chunks.rleft()); + + auto iovcnt = chunks.riovec(iov.data(), iov.size()); + + assert_int(1, ==, iovcnt); + assert_stdsv_equal( + "foobar00"sv, + (std::string_view{reinterpret_cast(iov[0].iov_base), + iov[0].iov_len})); + + chunks.reset(); + + chunks.append("012345678"sv); + chunks.reserve(8); + chunks.last(std::ranges::copy("foobar00"sv, chunks.last()).out); + + assert_size(17, ==, chunks.rleft()); + + iovcnt = chunks.riovec(iov.data(), iov.size()); + + assert_int(2, ==, iovcnt); + assert_stdsv_equal( + "012345678"sv, + (std::string_view{reinterpret_cast(iov[0].iov_base), + iov[0].iov_len})); + assert_stdsv_equal( + "foobar00"sv, + (std::string_view{reinterpret_cast(iov[1].iov_base), + iov[1].iov_len})); +} + void test_memchunkbuffer_drain_reset(void) { MemchunkPool16 pool; MemchunkBuffer16 buf(&pool); diff --git a/src/memchunk_test.h b/src/memchunk_test.h index 9f11115b..61575cb4 100644 --- a/src/memchunk_test.h +++ b/src/memchunk_test.h @@ -43,6 +43,7 @@ munit_void_test_decl(test_memchunks_drain) munit_void_test_decl(test_memchunks_riovec) munit_void_test_decl(test_memchunks_recycle) munit_void_test_decl(test_memchunks_reset) +munit_void_test_decl(test_memchunks_reserve) munit_void_test_decl(test_memchunkbuffer_drain_reset) } // namespace nghttp2