diff --git a/t/t__string.c b/t/t__string.c index 1592865..8e541fa 100644 --- a/t/t__string.c +++ b/t/t__string.c @@ -153,6 +153,74 @@ t_string_append_string(char **desc CRYB_UNUSED, void *arg) return (ret); } + +/*************************************************************************** + * Buffers and lengths + */ + +static struct t_buf_case { + const char *desc; + const char_t *s; + size_t len; +} t_buf_cases[] = { + { + .desc = "empty", + .s = CS(""), + .len = 0, + }, + { + .desc = "one", + .s = CS("1"), + .len = 1, + }, + { + .desc = "short", + .s = T_MAGIC_STR, + .len = T_MAGIC_LEN, + }, + { + .desc = "long", + .s = T_LONG_MAGIC_STR, + .len = T_LONG_MAGIC_LEN, + }, +}; + +static int +t_string_buf(char **desc CRYB_UNUSED, void *arg) +{ + struct t_buf_case *t = arg; + const char_t *buf; + string *s; + int ret; + + ret = 1; + s = string_dup_cs(t->s, t->len); + buf = string_buf(s); + ret &= t_compare_mem(t->s, buf, (t->len + 1) * sizeof(char_t)); + string_append_cs(s, t->s, t->len); + buf = string_buf(s); + ret &= t_compare_mem(t->s, buf, t->len * sizeof(char_t)) & + t_compare_mem(t->s, buf + t->len, (t->len + 1) * sizeof(char_t)); + string_delete(s); + return (ret); +} + +static int +t_string_len(char **desc CRYB_UNUSED, void *arg) +{ + struct t_buf_case *t = arg; + string *s; + int ret; + + ret = 1; + s = string_dup_cs(t->s, t->len); + ret = t_compare_i(t->len, string_len(s)); + string_append_cs(s, t->s, t->len); + ret &= t_compare_i(t->len + t->len, string_len(s)); + string_delete(s); + return (ret); +} + /*************************************************************************** * Comparisons @@ -228,6 +296,19 @@ t_string_compare(char **desc CRYB_UNUSED, void *arg) return (ret); } +static int +t_string_compare_cs(char **desc CRYB_UNUSED, void *arg) +{ + struct t_compare_case *t = arg; + string *s1; + int ret; + + s1 = string_dup_cs(t->s1, SIZE_MAX); + ret = t_compare_i(t->cmp, string_compare_cs(s1, t->s2, SIZE_MAX)); + string_delete(s1); + return (ret); +} + static int t_string_equal(char **desc CRYB_UNUSED, void *arg) { @@ -237,12 +318,25 @@ t_string_equal(char **desc CRYB_UNUSED, void *arg) s1 = string_dup_cs(t->s1, SIZE_MAX); s2 = string_dup_cs(t->s2, SIZE_MAX); - ret = t_compare_i(t->cmp != 0, string_equal(s1, s2) == 0); + ret = t_compare_i(!!t->cmp, string_equal(s1, s2) == 0); string_delete(s2); string_delete(s1); return (ret); } +static int +t_string_equal_cs(char **desc CRYB_UNUSED, void *arg) +{ + struct t_compare_case *t = arg; + string *s1; + int ret = 1; + + s1 = string_dup_cs(t->s1, SIZE_MAX); + ret = t_compare_i(!!t->cmp, string_equal_cs(s1, t->s2, SIZE_MAX) == 0); + string_delete(s1); + return (ret); +} + /*************************************************************************** * Miscellaneous functions @@ -288,13 +382,25 @@ t_prepare(int argc, char *argv[]) for (i = 0; i < sizeof t_append_cases / sizeof *t_append_cases; ++i) t_add_test(t_string_append_string, &t_append_cases[i], "%s (%s)", "string_append_string", t_append_cases[i].desc); + for (i = 0; i < sizeof t_buf_cases / sizeof *t_buf_cases; ++i) + t_add_test(t_string_len, &t_buf_cases[i], + "%s (%s)", "string_len", t_buf_cases[i].desc); + for (i = 0; i < sizeof t_buf_cases / sizeof *t_buf_cases; ++i) + t_add_test(t_string_buf, &t_buf_cases[i], + "%s (%s)", "string_buf", t_buf_cases[i].desc); // t_add_test(t_string_dup_cs, NULL, "string_dup_cs"); - for (i = 0; i < sizeof t_compare_cases / sizeof *t_compare_cases; ++i) + for (i = 0; i < sizeof t_compare_cases / sizeof *t_compare_cases; ++i) { t_add_test(t_string_compare, &t_compare_cases[i], "%s (%s)", "string_compare", t_compare_cases[i].desc); - for (i = 0; i < sizeof t_compare_cases / sizeof *t_compare_cases; ++i) + t_add_test(t_string_compare_cs, &t_compare_cases[i], + "%s (%s)", "string_compare_cs", t_compare_cases[i].desc); + } + for (i = 0; i < sizeof t_compare_cases / sizeof *t_compare_cases; ++i) { t_add_test(t_string_equal, &t_compare_cases[i], "%s (%s)", "string_equal", t_compare_cases[i].desc); + t_add_test(t_string_equal_cs, &t_compare_cases[i], + "%s (%s)", "string_equal_cs", t_compare_cases[i].desc); + } t_add_test(t_string_trunc, NULL, "string_trunc"); return (0); } diff --git a/t/t_wstring.c b/t/t_wstring.c index 4089a8a..ef9e7d7 100644 --- a/t/t_wstring.c +++ b/t/t_wstring.c @@ -41,12 +41,14 @@ #define char_t wchar_t #define vsnprintf vswprintf +#define strlen wcslen #define cryb_string cryb_wstring #define string wstring #define string_new wstring_new #define string_len wstring_len +#define string_buf wstring_buf #define string_expand wstring_expand #define string_shrink wstring_shrink #define string_dup wstring_dup @@ -59,7 +61,9 @@ #define string_printf wstring_printf #define string_vprintf wstring_vprintf #define string_compare wstring_compare +#define string_compare_cs wstring_compare_wcs #define string_equal wstring_equal +#define string_equal_cs wstring_equal_wcs #define CS(lit) L ## lit