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>