Annotation of embedaddon/bird2/lib/buffer_test.c, revision 1.1.1.1
1.1 misho 1: /*
2: * BIRD Library -- Buffer Tests
3: *
4: * (c) 2015 CZ.NIC z.s.p.o.
5: *
6: * Can be freely distributed and used under the terms of the GNU GPL.
7: */
8:
9: #include <stdlib.h>
10:
11: #include "test/birdtest.h"
12:
13: #include "lib/buffer.h"
14:
15: #define MAX_NUM 33
16:
17: typedef BUFFER(int) buffer_int;
18: static int expected[MAX_NUM];
19: static buffer_int buf;
20: static struct pool *buffer_pool;
21:
22: static void
23: show_buf(buffer_int *b)
24: {
25: uint i;
26: bt_debug(".used = %d, .size = %d\n", b->used, b->size);
27:
28: for (i = 0; i < b->used; i++)
29: bt_debug(" .data[%3u] = %-16d expected %-16d %s\n", i, b->data[i], expected[i], (b->data[i] == expected[i] ? "OK" : "FAIL!"));
30: }
31:
32: static void
33: fill_expected_array(void)
34: {
35: int i;
36:
37: for (i = 0; i < MAX_NUM; i++)
38: expected[i] = bt_random();
39: }
40:
41: static void
42: init_buffer(void)
43: {
44: resource_init();
45: buffer_pool = &root_pool;
46: BUFFER_INIT(buf, buffer_pool, MAX_NUM);
47: }
48:
49: static int
50: is_buffer_as_expected(buffer_int *b)
51: {
52: show_buf(b);
53:
54: int i;
55: for (i = 0; i < MAX_NUM; i++)
56: bt_assert(b->data[i] == expected[i]);
57: return 1;
58: }
59:
60: static int
61: t_buffer_push(void)
62: {
63: int i;
64:
65: init_buffer();
66: fill_expected_array();
67:
68: for (i = 0; i < MAX_NUM; i++)
69: BUFFER_PUSH(buf) = expected[i];
70: is_buffer_as_expected(&buf);
71:
72: return 1;
73: }
74:
75: static int
76: t_buffer_pop(void)
77: {
78: int i;
79:
80: init_buffer();
81: fill_expected_array();
82:
83: /* POP a half of elements */
84: for (i = 0; i < MAX_NUM; i++)
85: BUFFER_PUSH(buf) = expected[i];
86: for (i = MAX_NUM-1; i >= MAX_NUM/2; i--)
87: BUFFER_POP(buf);
88: for (i = MAX_NUM/2; i < MAX_NUM; i++)
89: BUFFER_PUSH(buf) = expected[i] = bt_random();
90: is_buffer_as_expected(&buf);
91:
92: /* POP all of elements */
93: for (i = MAX_NUM-1; i >= 0; i--)
94: BUFFER_POP(buf);
95: bt_assert(buf.used == 0);
96: for (i = 0; i < MAX_NUM; i++)
97: BUFFER_PUSH(buf) = expected[i];
98: is_buffer_as_expected(&buf);
99:
100: return 1;
101: }
102:
103: static int
104: t_buffer_resize(void)
105: {
106: int i;
107:
108: init_buffer();
109: BUFFER_INIT(buf, buffer_pool, 0);
110: fill_expected_array();
111:
112: for (i = 0; i < MAX_NUM; i++)
113: BUFFER_PUSH(buf) = expected[i];
114: is_buffer_as_expected(&buf);
115: bt_assert(buf.size >= MAX_NUM);
116:
117: return 1;
118: }
119:
120: static int
121: t_buffer_flush(void)
122: {
123: int i;
124:
125: init_buffer();
126: fill_expected_array();
127: for (i = 0; i < MAX_NUM; i++)
128: BUFFER_PUSH(buf) = expected[i];
129:
130: BUFFER_FLUSH(buf);
131: bt_assert(buf.used == 0);
132:
133: return 1;
134: }
135:
136: static int
137: t_buffer_walk(void)
138: {
139: int i;
140:
141: init_buffer();
142: fill_expected_array();
143: for (i = 0; i < MAX_NUM; i++)
144: BUFFER_PUSH(buf) = expected[i];
145:
146: i = 0;
147: BUFFER_WALK(buf, v)
148: bt_assert(v == expected[i++]);
149:
150: bt_assert(i == MAX_NUM);
151:
152: return 1;
153: }
154:
155: int
156: main(int argc, char *argv[])
157: {
158: bt_init(argc, argv);
159:
160: bt_test_suite(t_buffer_push, "Pushing new elements");
161: bt_test_suite(t_buffer_pop, "Fill whole buffer (PUSH), a half of elements POP and PUSH new elements");
162: bt_test_suite(t_buffer_resize, "Init a small buffer and try overfill");
163: bt_test_suite(t_buffer_flush, "Fill and flush all elements");
164: bt_test_suite(t_buffer_walk, "Fill and walk through buffer");
165:
166: return bt_exit_value();
167: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>