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