1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#include <test.h>
#include <ring_buffer.h>
#include <string_lib.h>
#include <alloc.h>
static void test_excess(void)
{
static const size_t CAPACITY = 5;
static const size_t FILL = 8;
RingBuffer *buf = RingBufferNew(CAPACITY, NULL, free);
assert_int_equal(0, RingBufferLength(buf));
assert_false(RingBufferHead(buf));
for (size_t i = 0; i < FILL; i++)
{
char *s = StringFromLong(i);
RingBufferAppend(buf, s);
if (i >= CAPACITY)
{
assert_true(RingBufferIsFull(buf));
assert_int_equal(CAPACITY, RingBufferLength(buf));
}
else
{
assert_int_equal(i + 1, RingBufferLength(buf));
}
assert_string_equal(s, RingBufferHead(buf));
}
RingBufferIterator *iter = RingBufferIteratorNew(buf);
const char *s = NULL;
int i = FILL - CAPACITY;
while ((s = RingBufferIteratorNext(iter)))
{
assert_int_equal(i, StringToLong(s));
i++;
}
assert_false(RingBufferIteratorNext(iter));
RingBufferIteratorDestroy(iter);
RingBufferClear(buf);
assert_int_equal(0, RingBufferLength(buf));
assert_false(RingBufferHead(buf));
RingBufferDestroy(buf);
}
static void test_shortage(void)
{
static const size_t CAPACITY = 5;
RingBuffer *buf = RingBufferNew(CAPACITY, NULL, free);
assert_false(RingBufferHead(buf));
RingBufferAppend(buf, xstrdup("hello"));
assert_string_equal("hello", RingBufferHead(buf));
RingBufferAppend(buf, xstrdup("world"));
assert_string_equal("world", RingBufferHead(buf));
assert_int_equal(2, RingBufferLength(buf));
RingBufferIterator *iter = RingBufferIteratorNew(buf);
assert_string_equal("hello", RingBufferIteratorNext(iter));
assert_string_equal("world", RingBufferIteratorNext(iter));
assert_false(RingBufferIteratorNext(iter));
RingBufferIteratorDestroy(iter);
RingBufferClear(buf);
assert_int_equal(0, RingBufferLength(buf));
assert_false(RingBufferHead(buf));
RingBufferDestroy(buf);
}
int main()
{
PRINT_TEST_BANNER();
const UnitTest tests[] =
{
unit_test(test_excess),
unit_test(test_shortage)
};
return run_tests(tests);
}
|