1 
2 #include <stdlib.h>
3 #include <stdint.h>
4 #include <stdio.h>
5 
6 #include "ringbuffer.c"
7 #include "ringbuffer-test-utils.c"
8 
test_contained_offset_read(void)9 void test_contained_offset_read(void)
10 {
11 	uint8_t *out_buf;
12 	uint8_t in_buf[] = { 'a', 'b', 'c' };
13 	struct ringbuffer_consumer *rbc;
14 	struct ringbuffer *rb;
15 	size_t len;
16 	size_t i;
17 	int rc;
18 
19 	rb = ringbuffer_init(10);
20 	rbc = ringbuffer_consumer_register(rb, ringbuffer_poll_nop, NULL);
21 
22 	rc = ringbuffer_queue(rb, in_buf, sizeof(in_buf));
23 	assert(!rc);
24 
25 	/* test all possible offsets */
26 	for (i = 0; i <= sizeof(in_buf); i++) {
27 		len = ringbuffer_dequeue_peek(rbc, i, &out_buf);
28 		assert(len == sizeof(in_buf) - i);
29 		if (len) {
30 			assert(!memcmp(in_buf + i, out_buf, len));
31 		}
32 	}
33 
34 	ringbuffer_fini(rb);
35 }
36 
main(void)37 int main(void)
38 {
39 	test_contained_offset_read();
40 	return EXIT_SUCCESS;
41 }
42