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
|
#undef NDEBUG
#include <assert.h>
#include <src/ringbuffer.c>
#include <stdio.h>
int
main(void)
{
ringbuffer_t *rb = ringbuffer_new(16);
char buf[20];
// check initial state
assert(rb);
assert(ringbuffer_readable_size(rb) == 0);
assert(ringbuffer_writable_size(rb) == 16);
// check for reading from empty buffer
assert(ringbuffer_read(rb, buf, sizeof(buf)) == 0);
// write some data
assert(ringbuffer_write(rb, "hello", 5) == 5);
assert(ringbuffer_readable_size(rb) == 5);
assert(ringbuffer_writable_size(rb) == 11);
// read that data
assert(ringbuffer_read(rb, buf, sizeof(buf)) == 5);
assert(memcmp(buf, "hello", 5) == 0);
// test wrapping
assert(ringbuffer_write(rb, "0123456789abcdef", 16) == 16);
assert(ringbuffer_readable_size(rb) == 16);
assert(ringbuffer_writable_size(rb) == 0);
// reading of wrapped data in two chunks
assert(ringbuffer_read(rb, buf, 15) == 15);
assert(memcmp(buf, "0123456789abcde", 15) == 0);
assert(ringbuffer_read(rb, buf, 15) == 1);
assert(memcmp(buf, "f", 1) == 0);
// check readable/writable size functions in case of buffer wrapping
assert(ringbuffer_write(rb, "0123456789abcdef", 16) == 16);
assert(ringbuffer_readable_size(rb) == 16);
assert(ringbuffer_writable_size(rb) == 0);
assert(ringbuffer_read(rb, buf, 3) == 3);
assert(ringbuffer_readable_size(rb) == 13);
assert(ringbuffer_writable_size(rb) == 3);
assert(ringbuffer_read(rb, buf, 3) == 3);
assert(ringbuffer_readable_size(rb) == 10);
assert(ringbuffer_writable_size(rb) == 6);
assert(ringbuffer_read(rb, buf, 3) == 3);
assert(ringbuffer_readable_size(rb) == 7);
assert(ringbuffer_writable_size(rb) == 9);
assert(ringbuffer_read(rb, buf, 3) == 3);
assert(ringbuffer_readable_size(rb) == 4);
assert(ringbuffer_writable_size(rb) == 12);
assert(ringbuffer_read(rb, buf, 3) == 3);
assert(ringbuffer_readable_size(rb) == 1);
assert(ringbuffer_writable_size(rb) == 15);
assert(ringbuffer_read(rb, buf, 3) == 1);
assert(ringbuffer_readable_size(rb) == 0);
assert(ringbuffer_writable_size(rb) == 16);
// try to write more than buffer have
assert(ringbuffer_write(rb, "01234567890", 10) == 10);
assert(ringbuffer_writable_size(rb) == 6);
assert(ringbuffer_write(rb, "01234567890", 10) == 6);
assert(ringbuffer_writable_size(rb) == 0);
assert(ringbuffer_readable_size(rb) == 16);
// cleanup
ringbuffer_free(rb);
printf("pass\n");
return 0;
}
|