#include #include #include #include #define BUF_SIZE 32 int main(void) { b_ringbuffer *buf = b_ringbuffer_create(BUF_SIZE); size_t read_available = b_ringbuffer_available_data_remaining(buf); size_t write_available = b_ringbuffer_write_capacity_remaining(buf); printf("read available: %zu\n", read_available); printf("write available: %zu\n", write_available); assert(read_available == 0); assert(write_available == BUF_SIZE - 1); const char ch = 'X'; printf("putc(%c)\n", ch); b_ringbuffer_putc(buf, ch); read_available = b_ringbuffer_available_data_remaining(buf); write_available = b_ringbuffer_write_capacity_remaining(buf); printf("read available: %zu\n", read_available); printf("write available: %zu\n", write_available); assert(read_available == 1); assert(write_available == BUF_SIZE - 2); int c = b_ringbuffer_getc(buf); printf("getc() = %c\n", c); assert(c == ch); const char s[] = "A very long string that is designed to overflow the " "ringbuffer"; size_t s_len = strlen(s); size_t nr_written = 0; printf("write(%s)\n", s); b_ringbuffer_write(buf, s, s_len, &nr_written); read_available = b_ringbuffer_available_data_remaining(buf); write_available = b_ringbuffer_write_capacity_remaining(buf); printf("read available: %zu\n", read_available); printf("write available: %zu\n", write_available); assert(read_available == BUF_SIZE - 1); assert(write_available == 0); char data[BUF_SIZE + 32] = {0}; size_t nr_read = 0; b_ringbuffer_read(buf, data, sizeof data, &nr_read); printf("read(%u) = %zu bytes\n", BUF_SIZE + 32, nr_read); printf(" = %s\n", data); read_available = b_ringbuffer_available_data_remaining(buf); write_available = b_ringbuffer_write_capacity_remaining(buf); printf("read available: %zu\n", read_available); printf("write available: %zu\n", write_available); assert(read_available == 0); assert(write_available == BUF_SIZE - 1); b_ringbuffer_destroy(buf); return 0; }