53 lines
1.4 KiB
C
53 lines
1.4 KiB
C
/*
|
|
* Copyright 2015 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/containers/queue.h>
|
|
#include <tests/test.h>
|
|
|
|
static inline unsigned int test_q_first(struct _queue *queue)
|
|
{
|
|
return GPOINTER_TO_INT(g_queue_peek_head(&queue->_queue));
|
|
}
|
|
|
|
static inline unsigned int test_q_last(struct _queue *queue)
|
|
{
|
|
return GPOINTER_TO_INT(g_queue_peek_tail(&queue->_queue));
|
|
}
|
|
|
|
static void test_stress(unsigned int N)
|
|
{
|
|
struct _queue queue = _Q_INIT();
|
|
unsigned int i;
|
|
|
|
/* _q_init() */
|
|
test_equal((void *)queue._queue.head, NULL);
|
|
test_equal((void *)queue._queue.tail, NULL);
|
|
test_equal(_q_size(&queue), 0);
|
|
|
|
/* _q_add_head() */
|
|
for (i = 0; i < N; i++) {
|
|
test_loop_equal(_q_add_head(&queue, GINT_TO_POINTER(i)), 0, i);
|
|
test_loop_equal(_q_size(&queue), i + 1, i);
|
|
test_loop_equal(test_q_first(&queue), i, i);
|
|
} test_loop_passed();
|
|
test_equal(_q_size(&queue), N);
|
|
|
|
/* _q_add_tail() */
|
|
for (i = 0; i < N; i++) {
|
|
test_loop_equal(_q_add_tail(&queue, GINT_TO_POINTER(i)), N + i, i);
|
|
test_loop_equal(_q_size(&queue), N + i + 1, i);
|
|
test_loop_equal(test_q_last(&queue), i, i);
|
|
} test_loop_passed();
|
|
test_equal(_q_size(&queue), 2 * N);
|
|
}
|
|
|
|
static void test_basics() { test_stress(10); }
|
|
static void test_stress_0() { test_stress(0); }
|
|
static void test_stress_100K() { test_stress(100000); }
|
|
|
|
DECLARE_UNIT_TESTS(
|
|
UNIT_TEST("Queue Basics", test_basics),
|
|
UNIT_TEST("Queue Stress (N = 0)", test_stress_0),
|
|
UNIT_TEST("Queue Stress (N = 100,000)", test_stress_100K),
|
|
);
|