#include #include #include #include #include "../src/strbuf.h" typedef unsigned int uint; void print_strbuf(strbuf_t *s) { assert(s->len == strlen(s->buf)); printf("block: %u, len: %u |%s|\n", (uint)s->alloc_size, (uint)s->len, s->buf); } void test_release() { strbuf_t b = STRBUF_INIT; char *str; strbuf_append_str(&b, "release"); print_strbuf(&b); str = strbuf_release(&b); printf("released |%s|\n", str); free(str); } void test_release_empty() { strbuf_t b = STRBUF_INIT; char *ptr = strbuf_release(&b); assert(*ptr == '\0'); free(ptr); } void test_squeeze() { strbuf_t b = STRBUF_INIT; strbuf_squeeze(&b, 'X'); strbuf_append_str(&b, "aaabXXXcdefXXXXghijklXXmmmnopXXXXXqrXstuXXvwxyXXzXX"); strbuf_squeeze(&b, 'X'); print_strbuf(&b); strbuf_free(&b); strbuf_append_str(&b, "XXXX"); strbuf_squeeze(&b, 'X'); print_strbuf(&b); strbuf_free(&b); strbuf_append_str(&b, "A"); strbuf_squeeze(&b, 'X'); print_strbuf(&b); strbuf_free(&b); } void test_chop() { strbuf_t b = STRBUF_INIT; strbuf_rchop(&b, 'X'); print_strbuf(&b); strbuf_append_str(&b, "X"); strbuf_rchop(&b, 'X'); print_strbuf(&b); strbuf_append_str(&b, "123456789X123456789"); strbuf_rchop(&b, 'X'); print_strbuf(&b); strbuf_rchop(&b, 'X'); print_strbuf(&b); strbuf_free(&b); } void test_term() { strbuf_t b = STRBUF_INIT; strbuf_t c = STRBUF_INIT; strbuf_append_str(&b, "test"); strbuf_append_str(&c, "test."); strbuf_term(&b, '.'); strbuf_term(&c, '.'); assert(strcmp(b.buf, c.buf) == 0); strbuf_free(&b); strbuf_free(&c); } void test_trim() { strbuf_t b = STRBUF_INIT; print_strbuf(&b); strbuf_append_repeat(&b, ' ', 4); strbuf_append(&b, "abcdef", 6); print_strbuf(&b); strbuf_append(&b, "012345678901234567890123456789", 30); strbuf_append_ch(&b, 'a'); strbuf_append_repeat(&b, ' ', 6); print_strbuf(&b); strbuf_rtrim(&b); print_strbuf(&b); strbuf_ltrim(&b); print_strbuf(&b); strbuf_free(&b); } void test_rev() { strbuf_t b = STRBUF_INIT; strbuf_append_str(&b, "reversed"); print_strbuf(&b); strbuf_rev(&b); print_strbuf(&b); strbuf_free(&b); } void test_reduce() { strbuf_t b = STRBUF_INIT; strbuf_append_str(&b, "reduce..."); print_strbuf(&b); strbuf_reduce(&b, 3); print_strbuf(&b); strbuf_reduce(&b, 256); print_strbuf(&b); strbuf_free(&b); } void test_explode() { strbuf_t **list, **ptr; strbuf_t b = STRBUF_INIT; strbuf_append_str(&b, "item1,item2,item3,item4"); list = ptr = strbuf_explode(&b, ','); while(*ptr) print_strbuf(*ptr++); strbuf_free_list(list); strbuf_free(&b); list = strbuf_explode(&b, ','); assert(*list == NULL); strbuf_free_list(list); } void test_free_empty() { strbuf_t b = STRBUF_INIT; strbuf_free(&b); } int main() { test_release_empty(); test_release(); test_reduce(); test_rev(); test_squeeze(); test_trim(); test_term(); test_chop(); test_explode(); test_free_empty(); return 0; }