Files
libucore/test/test_dbuf.c
T
2025-07-18 22:45:08 +02:00

189 lines
4.1 KiB
C

#include <check.h>
#include <string.h>
#include <signal.h>
#include "ucore/dbuf.h"
START_TEST (test_dbuf)
{
DBuf buf;
int rc;
rc = uc_dbuf_init(&buf, 10);
fail_if(rc != 0);
fail_if(uc_dbuf_buflen(&buf) != 10);
fail_if(uc_dbuf_remaining(&buf) != 10);
strcpy((char *)buf.end, "12345679");
uc_dbuf_added(&buf, 10);
fail_if(uc_dbuf_len(&buf) != 10);
fail_if(uc_dbuf_remaining(&buf) != 0);
rc = uc_dbuf_ensure(&buf, 110);
fail_if(rc != 0);
fail_if(uc_dbuf_remaining(&buf) != 110);
fail_if(uc_dbuf_buflen(&buf) != 120);
rc = uc_dbuf_ensure(&buf, 5);
fail_if(rc != 0);
strcpy((char *)buf.end, "ABCD");
uc_dbuf_added(&buf, 5);
uc_dbuf_take(&buf, 10);
fail_if(uc_dbuf_remaining(&buf) != 105);
fail_if(uc_dbuf_len(&buf) != 5);
ck_assert_str_eq((char *)buf.start, "ABCD");
uc_dbuf_take(&buf, 5);
fail_if(uc_dbuf_remaining(&buf) != 120);
fail_if(uc_dbuf_buflen(&buf) != 120);
fail_if(uc_dbuf_len(&buf) != 0);
strcpy((char *)buf.end, "EFGH");
uc_dbuf_added(&buf, 5);
uc_dbuf_trim(&buf);
fail_if(uc_dbuf_buflen(&buf) != 5);
fail_if(uc_dbuf_len(&buf) != 5);
uc_dbuf_take(&buf, 1);
rc = uc_dbuf_ensure(&buf, 10);
fail_if(rc != 0);
ck_assert_str_eq((char *)buf.start, "FGH");
uc_dbuf_take(&buf, 1);
uc_dbuf_trim(&buf);
ck_assert_str_eq((char *)buf.start, "GH");
fail_if(uc_dbuf_buflen(&buf) != 3);
fail_if(uc_dbuf_len(&buf) != 3);
uc_dbuf_free(&buf);
}
END_TEST
START_TEST (test_dbuf_take_fail)
{
DBuf buf;
int rc;
rc = uc_dbuf_init(&buf, 10);
fail_if(rc != 0);
fail_if(uc_dbuf_buflen(&buf) != 10);
fail_if(uc_dbuf_remaining(&buf) != 10);
strcpy((char *)buf.end, "12345679");
uc_dbuf_added(&buf, 10);
fail_if(uc_dbuf_len(&buf) != 10);
fail_if(uc_dbuf_remaining(&buf) != 0);
rc = uc_dbuf_take(&buf, 11);
fail_if(rc == 0);
uc_dbuf_free(&buf);
}
END_TEST
START_TEST (test_dbuf_take_all)
{
DBuf buf;
int rc;
rc = uc_dbuf_init(&buf, 10);
fail_if(rc != 0);
fail_if(uc_dbuf_buflen(&buf) != 10);
fail_if(uc_dbuf_remaining(&buf) != 10);
strcpy((char *)buf.end, "12345679");
uc_dbuf_added(&buf, 10);
fail_if(uc_dbuf_len(&buf) != 10);
fail_if(uc_dbuf_remaining(&buf) != 0);
rc = uc_dbuf_take(&buf, 10);
fail_if(rc != 0);
fail_if(uc_dbuf_len(&buf) != 0);
fail_if(uc_dbuf_remaining(&buf) != 10);
uc_dbuf_free(&buf);
}
END_TEST
START_TEST (test_dbuf_add_ensure_take)
{
DBuf *buf;
int rc;
int i;
buf = malloc(sizeof *buf);
fail_if(buf == NULL);
rc = uc_dbuf_init(buf, 10);
fail_if(rc != 0);
fail_if(uc_dbuf_buflen(buf) != 10);
fail_if(uc_dbuf_remaining(buf) != 10);
for (i = 0; i < 10; i++) {
rc = uc_dbuf_ensure(buf,10);
fail_if(rc != 0);
uc_dbuf_added(buf, 2);
fail_if(uc_dbuf_len(buf) != 2);
fail_if(uc_dbuf_remaining(buf) != 8);
uc_dbuf_added(buf, 8);
fail_if(uc_dbuf_len(buf) != 10);
fail_if(uc_dbuf_remaining(buf) != 0);
rc = uc_dbuf_take(buf, 5);
fail_if(rc != 0);
fail_if(uc_dbuf_len(buf) != 5);
rc = uc_dbuf_take(buf, 5);
fail_if(rc != 0);
fail_if(uc_dbuf_len(buf) != 0);
fail_if(uc_dbuf_remaining(buf) != 10);
}
rc = uc_dbuf_ensure(buf,90);
fail_if(rc != 0);
//ok, dbuf adds the ensured capacity to the existing buflen
//so it becomes 100, not 90 even though the buffer is already empty
fail_if(uc_dbuf_remaining(buf) != 100);
fail_if(uc_dbuf_buflen(buf) != 100);
memset(buf->end, 0xDE, 90);
uc_dbuf_added(buf, 90);
fail_if(uc_dbuf_remaining(buf) != 10);
uc_dbuf_free(buf);
free(buf);
}
END_TEST
Suite *dbuf_suite(void)
{
Suite *s = suite_create("dbuf");
TCase *tc = tcase_create("dbuf tests");
tcase_add_test(tc, test_dbuf);
tcase_add_test(tc, test_dbuf_take_all);
tcase_add_test(tc, test_dbuf_add_ensure_take);
#ifndef NDEBUG
tcase_add_test_raise_signal(tc, test_dbuf_take_fail, SIGABRT);
#else
tcase_add_test(tc, test_dbuf_take_fail);
#endif
suite_add_tcase(s, tc);
return s;
}