Files

148 lines
2.8 KiB
C
Raw Permalink Normal View History

2015-03-27 14:10:00 +01:00
/*
* BIRD Library -- Buffer Tests
*
* (c) 2015 CZ.NIC z.s.p.o.
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#include <stdlib.h>
2015-08-05 12:34:21 +02:00
2015-03-27 14:10:00 +01:00
#include "test/birdtest.h"
2015-04-15 15:42:43 +02:00
#include "sysdep/config.h"
2015-03-27 14:10:00 +01:00
#include "lib/resource.h"
#include "lib/buffer.h"
#define MAX_NUM 33
2015-08-19 14:40:06 +02:00
typedef BUFFER(int) buffer_int;
static int expected[MAX_NUM];
static buffer_int buffer;
static struct pool *buffer_pool;
2015-03-27 14:10:00 +01:00
static void
show_buf(buffer_int *b)
{
int i;
bt_debug(".used = %d, .size = %d\n", b->used, b->size);
2015-04-15 15:42:43 +02:00
for (i = 0; i < b->used; i++)
bt_debug(" .data[%3d] = %-16d expected %-16d %s\n", i, b->data[i], expected[i], (b->data[i] == expected[i] ? "OK" : "FAIL!"));
2015-03-27 14:10:00 +01:00
}
static void
fill_expected_array(void)
{
int i;
for (i = 0; i < MAX_NUM; i++)
2015-08-27 09:25:28 +02:00
expected[i] = bt_random();
2015-03-27 14:10:00 +01:00
}
static void
init_buffer(void)
{
2015-08-05 12:34:21 +02:00
resource_init();
buffer_pool = &root_pool;
2015-03-27 14:10:00 +01:00
BUFFER_INIT(buffer, buffer_pool, MAX_NUM);
}
static int
is_buffer_as_expected(buffer_int *b)
{
show_buf(b);
int i;
for (i = 0; i < MAX_NUM; i++)
bt_assert(b->data[i] == expected[i]);
return 1;
}
static int
t_buffer_push(void)
{
int i;
init_buffer();
fill_expected_array();
for (i = 0; i < MAX_NUM; i++)
BUFFER_PUSH(buffer) = expected[i];
is_buffer_as_expected(&buffer);
return BT_SUCCESS;
}
static int
t_buffer_pop(void)
{
int i;
init_buffer();
fill_expected_array();
/* POP a half of elements */
for (i = 0; i < MAX_NUM; i++)
BUFFER_PUSH(buffer) = expected[i];
for (i = MAX_NUM-1; i >= MAX_NUM/2; i--)
BUFFER_POP(buffer);
for (i = MAX_NUM/2; i < MAX_NUM; i++)
2015-08-27 09:25:28 +02:00
BUFFER_PUSH(buffer) = expected[i] = bt_random();
2015-03-27 14:10:00 +01:00
is_buffer_as_expected(&buffer);
/* POP all of elements */
for (i = MAX_NUM-1; i >= 0; i--)
BUFFER_POP(buffer);
bt_assert(buffer.used == 0);
for (i = 0; i < MAX_NUM; i++)
BUFFER_PUSH(buffer) = expected[i];
is_buffer_as_expected(&buffer);
return BT_SUCCESS;
}
static int
t_buffer_resize(void)
{
int i;
2015-08-05 12:34:21 +02:00
init_buffer();
2015-03-27 14:10:00 +01:00
BUFFER_INIT(buffer, buffer_pool, 0);
fill_expected_array();
for (i = 0; i < MAX_NUM; i++)
BUFFER_PUSH(buffer) = expected[i];
is_buffer_as_expected(&buffer);
bt_assert(buffer.size >= MAX_NUM);
return BT_SUCCESS;
}
static int
t_buffer_flush(void)
{
int i;
init_buffer();
fill_expected_array();
for (i = 0; i < MAX_NUM; i++)
BUFFER_PUSH(buffer) = expected[i];
BUFFER_FLUSH(buffer);
bt_assert(buffer.used == 0);
return BT_SUCCESS;
}
int
main(int argc, char *argv[])
{
bt_init(argc, argv);
2015-04-13 10:42:10 +02:00
bt_test_suite(t_buffer_push, "Pushing new elements");
bt_test_suite(t_buffer_pop, "Fill whole buffer (PUSH), a half of elements POP and PUSH new elements");
bt_test_suite(t_buffer_resize, "Init a small buffer and try overfill");
bt_test_suite(t_buffer_flush, "Fill and flush all elements");
2015-03-27 14:10:00 +01:00
2015-04-13 10:52:21 +02:00
return bt_end();
2015-03-27 14:10:00 +01:00
}