176 lines
2.7 KiB
C
176 lines
2.7 KiB
C
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <malloc.h>
|
|
#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(&b, " ", 4);
|
|
strbuf_append(&b, "abcdef", 6);
|
|
|
|
print_strbuf(&b);
|
|
|
|
strbuf_append(&b, "012345678901234567890123456789", 30);
|
|
strbuf_append_ch(&b, 'a');
|
|
strbuf_append_str(&b, " ");
|
|
|
|
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);
|
|
}
|
|
|
|
int main() {
|
|
|
|
test_release_empty();
|
|
test_release();
|
|
test_reduce();
|
|
test_rev();
|
|
test_squeeze();
|
|
test_trim();
|
|
test_term();
|
|
test_chop();
|
|
|
|
return 0;
|
|
}
|