Annotation of embedaddon/bird2/lib/buffer_test.c, revision 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>