File: test_ringbuffer.c

package info (click to toggle)
apulse 0.1.14-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 792 kB
  • sloc: ansic: 8,110; makefile: 9; sh: 2
file content (81 lines) | stat: -rw-r--r-- 2,569 bytes parent folder | download | duplicates (4)
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;
}