67 lines
2.0 KiB
C
67 lines
2.0 KiB
C
#include <assert.h>
|
|
#include <blue/core/ringbuffer.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#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;
|
|
}
|