From 269b98e6b3c5b50fd4fbcedfdc1beb05793c4d36 Mon Sep 17 00:00:00 2001 From: freshFruict <75492585+freshFruict@users.noreply.github.com> Date: Wed, 22 Jan 2025 07:48:40 +0300 Subject: [PATCH] string test: add test of capacity correctness during serialization --- test/cstring_serialize_test.cc | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/cstring_serialize_test.cc b/test/cstring_serialize_test.cc index ac4e0f1c..31f06788 100644 --- a/test/cstring_serialize_test.cc +++ b/test/cstring_serialize_test.cc @@ -203,3 +203,45 @@ TEST_CASE("u32string serialization endian long") { CHECK(*serialized_be == U32STR_LONG_CORNER_CASE); } + +TEST_CASE_TEMPLATE("string serialization capacity", StrT, cista::raw::string, + u16string, u32string) { + using CharT = typename StrT::CharT; + auto get_short = []() -> CharT const* { + void const* ptr; + switch (sizeof(CharT)) { + case sizeof(char): ptr = SHORT_STR; break; + case sizeof(char16_t): ptr = U16STR_SHORT; break; + case sizeof(char32_t): ptr = U32STR_SHORT; break; + } + return static_cast(ptr); + }; + auto get_long = []() -> CharT const* { + void const* ptr; + switch (sizeof(CharT)) { + case sizeof(char): ptr = LONG_STR; break; + case sizeof(char16_t): ptr = U16STR_LONG; break; + case sizeof(char32_t): ptr = U32STR_LONG; break; + } + return static_cast(ptr); + }; + + StrT s_s = get_short(), s_l = get_long(); + cista::byte_buf buf_s = cista::serialize(s_s), buf_l = cista::serialize(s_l); + StrT *serialized_s = cista::deserialize(buf_s), + *serialized_l = cista::deserialize(buf_l); + CharT const *ptr_s = serialized_s->data(), *ptr_l = serialized_l->data(); + + CHECK(serialized_s->capacity() == StrT::short_length_limit); + CHECK(serialized_l->capacity() == 0); + + serialized_s->shrink_to_fit(); + serialized_l->shrink_to_fit(); + + CHECK(serialized_s->capacity() == StrT::short_length_limit); + CHECK(serialized_l->capacity() == 256); + CHECK(ptr_s == serialized_s->data()); + CHECK(ptr_l != serialized_l->data()); + CHECK(*serialized_s == get_short()); + CHECK(*serialized_l == get_long()); +}