Add more dbuf_str tests
This commit is contained in:
parent
614a9716cc
commit
8b78803ad8
@ -586,6 +586,9 @@ void DbufStrTest::test_push_insert_erase(size_t n, ptrdiff_t start_cap)
|
|||||||
dbuf_str_try_push(&strings, &short_str, GUF_CPY_MOVE, &err);
|
dbuf_str_try_push(&strings, &short_str, GUF_CPY_MOVE, &err);
|
||||||
TEST_CHECK(err == GUF_ERR_NONE);
|
TEST_CHECK(err == GUF_ERR_NONE);
|
||||||
|
|
||||||
|
strings_cpp.push_back(str.substr(0, str.size()));
|
||||||
|
strings_cpp.push_back(str.substr(0, GUF_STR_SSO_BUF_CAP - 1));
|
||||||
|
|
||||||
TEST_CHECK(str_allocator_ctx.tracker.alloc_count == 1 + (i*3));
|
TEST_CHECK(str_allocator_ctx.tracker.alloc_count == 1 + (i*3));
|
||||||
|
|
||||||
TEST_CHECK(guf_str_is_uninit(&long_str));
|
TEST_CHECK(guf_str_is_uninit(&long_str));
|
||||||
@ -599,12 +602,13 @@ void DbufStrTest::test_push_insert_erase(size_t n, ptrdiff_t start_cap)
|
|||||||
|
|
||||||
dbuf_str_try_push(&strings, &long_str, GUF_CPY_DEEP, &err);
|
dbuf_str_try_push(&strings, &long_str, GUF_CPY_DEEP, &err);
|
||||||
TEST_CHECK(err == GUF_ERR_NONE);
|
TEST_CHECK(err == GUF_ERR_NONE);
|
||||||
|
|
||||||
dbuf_str_try_push(&strings, &short_str, GUF_CPY_DEEP, &err);
|
dbuf_str_try_push(&strings, &short_str, GUF_CPY_DEEP, &err);
|
||||||
TEST_CHECK(err == GUF_ERR_NONE);
|
TEST_CHECK(err == GUF_ERR_NONE);
|
||||||
|
|
||||||
TEST_CHECK(str_allocator_ctx.tracker.alloc_count == 3 + (i*3));
|
strings_cpp.push_back(str.substr(0, str.size()));
|
||||||
|
strings_cpp.push_back(str.substr(0, GUF_STR_SSO_BUF_CAP - 1));
|
||||||
|
|
||||||
|
TEST_CHECK(str_allocator_ctx.tracker.alloc_count == 3 + (i*3));
|
||||||
|
|
||||||
TEST_CHECK(guf_str_is_valid(&long_str) && guf_str_is_valid(&short_str));
|
TEST_CHECK(guf_str_is_valid(&long_str) && guf_str_is_valid(&short_str));
|
||||||
TEST_CHECK(guf_str_view_equal_val_arg(guf_str_view_from_str(&long_str), sv_long));
|
TEST_CHECK(guf_str_view_equal_val_arg(guf_str_view_from_str(&long_str), sv_long));
|
||||||
@ -620,7 +624,49 @@ void DbufStrTest::test_push_insert_erase(size_t n, ptrdiff_t start_cap)
|
|||||||
TEST_CHECK(str_allocator_ctx.tracker.free_count == n);
|
TEST_CHECK(str_allocator_ctx.tracker.free_count == n);
|
||||||
TEST_CHECK(str_allocator_ctx.tracker.alloc_count == 3 * n);
|
TEST_CHECK(str_allocator_ctx.tracker.alloc_count == 3 * n);
|
||||||
|
|
||||||
|
TEST_CHECK(strings.size == 4 * (ptrdiff_t)n);
|
||||||
|
TEST_CHECK(strings.size == std::ssize(strings_cpp));
|
||||||
|
|
||||||
|
std::string str;
|
||||||
|
for (size_t c = 0; c < 512 + GUF_STR_SSO_BUF_CAP; ++c) {
|
||||||
|
str += c % 10 + '0';
|
||||||
|
}
|
||||||
|
const guf_str_view sv_long = guf_str_view{.str = str.data(), .len = (ptrdiff_t)str.size()};
|
||||||
|
const guf_str_view sv_short = guf_str_view{.str = str.data(), .len = (ptrdiff_t)GUF_STR_SSO_BUF_CAP - 1};
|
||||||
|
size_t i = 0;
|
||||||
|
GUF_CNT_FOREACH(&strings, dbuf_str, it) {
|
||||||
|
if (TEST_CHECK(it.ptr)) {
|
||||||
|
const guf_str *s = it.ptr;
|
||||||
|
TEST_CHECK(guf_str_view_equal_val_arg(guf_str_view_from_str(s), i % 2 == 0 ? sv_long : sv_short));
|
||||||
|
const guf_str_view sv_cpp = guf_str_view {.str = strings_cpp.at(i).data(), .len = (ptrdiff_t)strings_cpp.at(i).size()};
|
||||||
|
TEST_CHECK(guf_str_view_equal_val_arg(guf_str_view_from_str(s), sv_cpp));
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
GUF_CNT_FOREACH(&strings, dbuf_str, it) {
|
||||||
|
if (TEST_CHECK(it.ptr)) {
|
||||||
|
guf_str *s = it.ptr;
|
||||||
|
TEST_CHECK(guf_str_append(s, GUF_CSTR_LIT_TO_VIEW_CPP("<END>")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::vector<guf_str_view> delims = {guf_str_view{.str = "<END>", .len = 5}};
|
||||||
|
i = 0;
|
||||||
|
GUF_CNT_FOREACH(&strings, dbuf_str, it) {
|
||||||
|
if (TEST_CHECK(it.ptr)) {
|
||||||
|
const guf_str *s = it.ptr;
|
||||||
|
guf_str_tok_state tk_state = guf_str_tok_state_new(guf_str_view_from_str(s), delims.data(), std::ssize(delims), GUF_STR_TOK_DELIM_OPT_MATCH_LONGEST);
|
||||||
|
size_t tok_n = 0;
|
||||||
|
while (guf_str_tok_next(&tk_state, true)) {
|
||||||
|
TEST_CHECK(guf_str_view_equal_val_arg(tk_state.cur_tok , i % 2 == 0 ? sv_long : sv_short));
|
||||||
|
TEST_CHECK(guf_str_view_equal_val_arg(tk_state.cur_delim, guf_str_view{.str = "<END>", .len = 5}));
|
||||||
|
++tok_n;
|
||||||
|
}
|
||||||
|
TEST_CHECK(tok_n == 1);
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
dbuf_str_free(&strings, NULL);
|
dbuf_str_free(&strings, NULL);
|
||||||
TEST_CHECK(!guf_alloc_tracker_found_leak(&str_allocator_ctx.tracker));
|
TEST_CHECK(!guf_alloc_tracker_found_leak(&str_allocator_ctx.tracker));
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user