From 1b042e75c48d5a18afae1eef9f5921f161b3372b Mon Sep 17 00:00:00 2001 From: Martin Lenders <mail@martin-lenders.de> Date: Mon, 31 Mar 2014 14:02:47 +0200 Subject: [PATCH] Implement core unittests --- tests/unittests/doc.txt | 12 ++ tests/unittests/tests-core-atomic.c | 81 ++++++++ tests/unittests/tests-core-bitarithm.c | 230 +++++++++++++++++++++ tests/unittests/tests-core-cib.c | 60 ++++++ tests/unittests/tests-core-clist.c | 108 ++++++++++ tests/unittests/tests-core-lifo.c | 61 ++++++ tests/unittests/tests-core-queue.c | 271 +++++++++++++++++++++++++ tests/unittests/tests-core.h | 66 ++++++ 8 files changed, 889 insertions(+) create mode 100644 tests/unittests/doc.txt create mode 100644 tests/unittests/tests-core-atomic.c create mode 100644 tests/unittests/tests-core-bitarithm.c create mode 100644 tests/unittests/tests-core-cib.c create mode 100644 tests/unittests/tests-core-clist.c create mode 100644 tests/unittests/tests-core-lifo.c create mode 100644 tests/unittests/tests-core-queue.c create mode 100644 tests/unittests/tests-core.h diff --git a/tests/unittests/doc.txt b/tests/unittests/doc.txt new file mode 100644 index 0000000000..bc62c5f2b2 --- /dev/null +++ b/tests/unittests/doc.txt @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2014 Freie Universität Berlin + * + * This file subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +/** + * @defgroup unittests Unittests + * @brief Application for unittests of RIOT. + */ diff --git a/tests/unittests/tests-core-atomic.c b/tests/unittests/tests-core-atomic.c new file mode 100644 index 0000000000..a3c2deff9a --- /dev/null +++ b/tests/unittests/tests-core-atomic.c @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +#include <limits.h> + +#include "embUnit/embUnit.h" + +#include "atomic.h" + +#include "tests-core.h" + +static void test_atomic_set_return_null_null(void) +{ + unsigned int res = 0; + + TEST_ASSERT_EQUAL_INT(0, atomic_set_return(&res, 0)); + TEST_ASSERT_EQUAL_INT(0, res); +} + +static void test_atomic_set_return_one_null(void) +{ + unsigned int res = 1; + + TEST_ASSERT_EQUAL_INT(1, atomic_set_return(&res, 0)); + TEST_ASSERT_EQUAL_INT(0, res); +} + +static void test_atomic_set_return_null_one(void) +{ + unsigned int res = 0; + + TEST_ASSERT_EQUAL_INT(0, atomic_set_return(&res, 1)); + TEST_ASSERT_EQUAL_INT(1, res); +} + +static void test_atomic_set_return_limit_null(void) +{ + unsigned int res = UINT_MAX; + + TEST_ASSERT_EQUAL_INT(UINT_MAX, atomic_set_return(&res, 0)); + TEST_ASSERT_EQUAL_INT(0, res); +} + +static void test_atomic_set_return_null_limit(void) +{ + unsigned int res = 0; + + TEST_ASSERT_EQUAL_INT(0, atomic_set_return(&res, UINT_MAX)); + TEST_ASSERT_EQUAL_INT(UINT_MAX, res); +} + +static void test_atomic_set_return_null_random(void) +{ + unsigned int res = 0; + unsigned int r = 45; /* XXX: decided by fair dice-roll ;-) */ + + TEST_ASSERT_EQUAL_INT(0, atomic_set_return(&res, r)); + TEST_ASSERT_EQUAL_INT(r, res); +} + +Test *tests_core_atomic_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_atomic_set_return_null_null), + new_TestFixture(test_atomic_set_return_one_null), + new_TestFixture(test_atomic_set_return_null_one), + new_TestFixture(test_atomic_set_return_limit_null), + new_TestFixture(test_atomic_set_return_null_limit), + new_TestFixture(test_atomic_set_return_null_random), + }; + + EMB_UNIT_TESTCALLER(core_atomic_tests, NULL, NULL, + fixtures); + + return (Test *)&core_atomic_tests; +} diff --git a/tests/unittests/tests-core-bitarithm.c b/tests/unittests/tests-core-bitarithm.c new file mode 100644 index 0000000000..4c5965df0a --- /dev/null +++ b/tests/unittests/tests-core-bitarithm.c @@ -0,0 +1,230 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +#include <limits.h> + +#include "embUnit/embUnit.h" + +#include "bitarithm.h" + +#include "tests-core.h" + +static void test_SETBIT_null_null(void) +{ + int res = 0x00; + + SETBIT(res, 0x00); + + TEST_ASSERT_EQUAL_INT(0x00, res); +} + +static void test_SETBIT_null_limit(void) +{ + unsigned int res = 0x00; + + SETBIT(res, UINT_MAX); + + TEST_ASSERT_EQUAL_INT(UINT_MAX, res); +} + +static void test_SETBIT_limit_null(void) +{ + unsigned int res = UINT_MAX; + + SETBIT(res, 0x00); + + TEST_ASSERT_EQUAL_INT(UINT_MAX, res); +} + +static void test_SETBIT_limit_limit(void) +{ + unsigned int res = UINT_MAX; + + SETBIT(res, UINT_MAX); + + TEST_ASSERT_EQUAL_INT(UINT_MAX, res); +} + +static void test_SETBIT_null_one(void) +{ + unsigned int res = 0x00; + + SETBIT(res, 0x01); + + TEST_ASSERT_EQUAL_INT(0x01, res); +} + +static void test_SETBIT_one_null(void) +{ + unsigned int res = 0x01; + + SETBIT(res, 0x00); + + TEST_ASSERT_EQUAL_INT(0x01, res); +} + +static void test_SETBIT_one_random(void) +{ + unsigned int res = 0x01; + + SETBIT(res, 0x06); /* randomized by fair dice roll ;-) */ + + TEST_ASSERT_EQUAL_INT(0x07, res); +} + +static void test_CLRBIT_null_null(void) +{ + int res = 0x00; + + CLRBIT(res, 0x00); + + TEST_ASSERT_EQUAL_INT(0x00, res); +} + +static void test_CLRBIT_null_limit(void) +{ + unsigned int res = 0x00; + + CLRBIT(res, UINT_MAX); + + TEST_ASSERT_EQUAL_INT(0x00, res); +} + +static void test_CLRBIT_limit_null(void) +{ + unsigned int res = UINT_MAX; + + CLRBIT(res, 0x00); + + TEST_ASSERT_EQUAL_INT(UINT_MAX, res); +} + +static void test_CLRBIT_limit_limit(void) +{ + unsigned int res = UINT_MAX; + + CLRBIT(res, UINT_MAX); + + TEST_ASSERT_EQUAL_INT(0x00, res); +} + +static void test_CLRBIT_null_one(void) +{ + unsigned int res = 0x00; + + CLRBIT(res, 0x01); + + TEST_ASSERT_EQUAL_INT(0x00, res); +} + +static void test_CLRBIT_one_null(void) +{ + unsigned int res = 0x01; + + CLRBIT(res, 0x00); + + TEST_ASSERT_EQUAL_INT(0x01, res); +} + +static void test_CLRBIT_one_random(void) +{ + unsigned int res = 0x01; + + CLRBIT(res, 0x05); /* randomized by fair dice roll ;-) */ + + TEST_ASSERT_EQUAL_INT(0x00, res); +} + +static void test_number_of_highest_bit_one(void) +{ + TEST_ASSERT_EQUAL_INT(0, number_of_highest_bit(1)); +} + +static void test_number_of_highest_bit_limit(void) +{ + TEST_ASSERT_EQUAL_INT(sizeof(unsigned) * 8 - 1, + number_of_highest_bit(UINT_MAX)); +} + +static void test_number_of_highest_bit_random(void) +{ + TEST_ASSERT_EQUAL_INT(2, number_of_highest_bit(4)); /* randomized by fair + dice roll ;-) */ +} + +static void test_number_of_lowest_bit_one(void) +{ + TEST_ASSERT_EQUAL_INT(0, number_of_lowest_bit(1)); +} + +static void test_number_of_lowest_bit_limit(void) +{ + TEST_ASSERT_EQUAL_INT(0, number_of_lowest_bit(UINT_MAX)); +} + +static void test_number_of_lowest_bit_random(void) +{ + TEST_ASSERT_EQUAL_INT(3, number_of_lowest_bit(8)); /* randomized by fair + dice roll ;-) */ +} + +static void test_number_of_bits_set_null(void) +{ + TEST_ASSERT_EQUAL_INT(0, number_of_bits_set(0)); +} + +static void test_number_of_bits_set_one(void) +{ + TEST_ASSERT_EQUAL_INT(1, number_of_bits_set(1)); +} + +static void test_number_of_bits_set_limit(void) +{ + TEST_ASSERT_EQUAL_INT(sizeof(unsigned) * 8, + number_of_bits_set(UINT_MAX)); +} + +static void test_number_of_bits_set_random(void) +{ + TEST_ASSERT_EQUAL_INT(3, number_of_bits_set(7)); /* randomized by fair + dice roll ;-) */ +} + +Test *tests_core_bitarithm_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_SETBIT_null_null), + new_TestFixture(test_SETBIT_null_limit), + new_TestFixture(test_SETBIT_limit_null), + new_TestFixture(test_SETBIT_limit_limit), + new_TestFixture(test_SETBIT_null_one), + new_TestFixture(test_SETBIT_one_null), + new_TestFixture(test_SETBIT_one_random), + new_TestFixture(test_CLRBIT_null_null), + new_TestFixture(test_CLRBIT_null_limit), + new_TestFixture(test_CLRBIT_limit_null), + new_TestFixture(test_CLRBIT_limit_limit), + new_TestFixture(test_CLRBIT_null_one), + new_TestFixture(test_CLRBIT_one_null), + new_TestFixture(test_CLRBIT_one_random), + new_TestFixture(test_number_of_highest_bit_one), + new_TestFixture(test_number_of_highest_bit_limit), + new_TestFixture(test_number_of_highest_bit_random), + new_TestFixture(test_number_of_lowest_bit_one), + new_TestFixture(test_number_of_lowest_bit_limit), + new_TestFixture(test_number_of_lowest_bit_random), + new_TestFixture(test_number_of_bits_set_null), + new_TestFixture(test_number_of_bits_set_one), + new_TestFixture(test_number_of_bits_set_limit), + new_TestFixture(test_number_of_bits_set_random), + }; + + EMB_UNIT_TESTCALLER(core_bitarithm_tests, NULL, NULL, fixtures); + + return (Test *)&core_bitarithm_tests; +} diff --git a/tests/unittests/tests-core-cib.c b/tests/unittests/tests-core-cib.c new file mode 100644 index 0000000000..321268a336 --- /dev/null +++ b/tests/unittests/tests-core-cib.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +#include "embUnit/embUnit.h" + +#include "cib.h" + +#include "tests-core.h" + +#define TEST_CIB_SIZE 2 + +cib_t cib; + +static void set_up(void) +{ + cib_init(&cib, 2); +} + +static void test_cib_put(void) +{ + + TEST_ASSERT_EQUAL_INT(0, cib_put(&cib)); + TEST_ASSERT_EQUAL_INT(1, cib_put(&cib)); + TEST_ASSERT_EQUAL_INT(-1, cib_put(&cib)); +} + +static void test_cib_get(void) +{ + TEST_ASSERT_EQUAL_INT(-1, cib_get(&cib)); + TEST_ASSERT_EQUAL_INT(0, cib_put(&cib)); + TEST_ASSERT_EQUAL_INT(0, cib_get(&cib)); + TEST_ASSERT_EQUAL_INT(-1, cib_get(&cib)); +} + +static void test_cib_avail(void) +{ + TEST_ASSERT_EQUAL_INT(0, cib_avail(&cib)); + TEST_ASSERT_EQUAL_INT(0, cib_put(&cib)); + TEST_ASSERT_EQUAL_INT(1, cib_avail(&cib)); + TEST_ASSERT_EQUAL_INT(1, cib_put(&cib)); + TEST_ASSERT_EQUAL_INT(2, cib_avail(&cib)); +} + +Test *tests_core_cib_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_cib_put), + new_TestFixture(test_cib_get), + new_TestFixture(test_cib_avail), + }; + + EMB_UNIT_TESTCALLER(core_cib_tests, set_up, NULL, fixtures); + + return (Test *)&core_cib_tests; +} diff --git a/tests/unittests/tests-core-clist.c b/tests/unittests/tests-core-clist.c new file mode 100644 index 0000000000..1d4fb5e68b --- /dev/null +++ b/tests/unittests/tests-core-clist.c @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +#include <string.h> + +#include "embUnit/embUnit.h" + +#include "clist.h" + +#include "tests-core.h" + +#define TEST_CLIST_LEN (8) + +clist_node_t tests_clist_buf[TEST_CLIST_LEN]; + +static void set_up(void) +{ + memset(tests_clist_buf, 0, sizeof(tests_clist_buf)); +} + +static void test_clist_add_one(void) +{ + clist_node_t *list = NULL, *elem = &(tests_clist_buf[0]); + + elem->data = 4435; + + clist_add(&list, elem); + + TEST_ASSERT_NOT_NULL(list); + TEST_ASSERT_EQUAL_INT(4435, list->data); + TEST_ASSERT(list->next == list); +} + +static void test_clist_add_two(void) +{ + clist_node_t *list = &(tests_clist_buf[0]), *elem = &(tests_clist_buf[1]); + + test_clist_add_one(); + + elem->data = 56345; + + clist_add(&list, elem); + + TEST_ASSERT_NOT_NULL(list); + TEST_ASSERT(list->next == elem); + TEST_ASSERT_EQUAL_INT(56345, list->next->data); + TEST_ASSERT(list->next->next == list); +} + +static void test_clist_remove_one(void) +{ + clist_node_t *list = &(tests_clist_buf[0]), *elem = &(tests_clist_buf[1]); + + test_clist_add_two(); + + clist_remove(&list, elem); + + TEST_ASSERT_NOT_NULL(list); + TEST_ASSERT(list->next == list); +} + +static void test_clist_remove_two(void) +{ + clist_node_t *list = &(tests_clist_buf[0]), *elem = &(tests_clist_buf[1]); + + test_clist_add_two(); + + clist_remove(&list, elem); + clist_remove(&list, list); + + TEST_ASSERT_NULL(list); +} + +static void test_clist_advance(void) +{ + clist_node_t *list = &(tests_clist_buf[0]); + + test_clist_add_two(); + + clist_advance(&list); + + TEST_ASSERT(list == &(tests_clist_buf[1])); + + clist_advance(&list); + + TEST_ASSERT(list == &(tests_clist_buf[0])); +} + +Test *tests_core_clist_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_clist_add_one), + new_TestFixture(test_clist_add_two), + new_TestFixture(test_clist_remove_one), + new_TestFixture(test_clist_remove_two), + new_TestFixture(test_clist_advance), + }; + + EMB_UNIT_TESTCALLER(core_clist_tests, set_up, NULL, + fixtures); + + return (Test *)&core_clist_tests; +} diff --git a/tests/unittests/tests-core-lifo.c b/tests/unittests/tests-core-lifo.c new file mode 100644 index 0000000000..39d55ea751 --- /dev/null +++ b/tests/unittests/tests-core-lifo.c @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +#include "embUnit/embUnit.h" + +#include "lifo.h" + +#include "tests-core.h" + +#define TEST_LIFO_LEN 2 + +int lifo[TEST_LIFO_LEN]; + +static void set_up(void) +{ + lifo_init(lifo, TEST_LIFO_LEN); +} + +static void test_lifo_empty(void) +{ + TEST_ASSERT(lifo_empty(lifo)); +} + +static void test_lifo_insert(void) +{ + lifo_insert(lifo, 0); + TEST_ASSERT(!lifo_empty(lifo)); +} + +static void test_lifo_get_one(void) +{ + lifo_insert(lifo, 0); + TEST_ASSERT_EQUAL_INT(0, lifo_get(lifo)); +} + +static void test_lifo_get_two(void) +{ + lifo_insert(lifo, 0); + lifo_insert(lifo, 1); + TEST_ASSERT_EQUAL_INT(1, lifo_get(lifo)); + TEST_ASSERT_EQUAL_INT(0, lifo_get(lifo)); +} + +Test *tests_core_lifo_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_lifo_empty), + new_TestFixture(test_lifo_insert), + new_TestFixture(test_lifo_get_one), + new_TestFixture(test_lifo_get_two), + }; + + EMB_UNIT_TESTCALLER(core_lifo_tests, set_up, NULL, fixtures); + + return (Test *)&core_lifo_tests; +} diff --git a/tests/unittests/tests-core-queue.c b/tests/unittests/tests-core-queue.c new file mode 100644 index 0000000000..8544eceb60 --- /dev/null +++ b/tests/unittests/tests-core-queue.c @@ -0,0 +1,271 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ +#include <string.h> + +#include "embUnit/embUnit.h" + +#include "queue.h" + +#include "tests-core.h" + +#define Q_LEN (4) + +static queue_node_t q[Q_LEN]; + +static void set_up(void) +{ + memset(q, 0, sizeof(q)); +} + +static void test_queue_remove_head_empty(void) +{ + queue_node_t *root = &(q[0]), *res; + + res = queue_remove_head(root); + + TEST_ASSERT_NULL(res); +} + +static void test_queue_remove_head_one(void) +{ + queue_node_t *root = &(q[0]), *elem = &(q[1]), *res; + + elem->data = 62801; + + queue_add_head(root, elem); + + res = queue_remove_head(root); + + TEST_ASSERT(res == elem); + TEST_ASSERT_EQUAL_INT(62801, res->data); + + res = queue_remove_head(root); + + TEST_ASSERT_NULL(res); +} + +static void test_queue_add_head_one(void) +{ + queue_node_t *root = &(q[0]), *elem = &(q[1]); + + elem->data = 44011; + + queue_add_head(root, elem); + + TEST_ASSERT(root->next == elem); + TEST_ASSERT_EQUAL_INT(44011, root->next->data); + + TEST_ASSERT_NULL(root->next->next); +} + +static void test_queue_add_head_two(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + + elem1->data = 25303; + elem2->data = 64960; + + queue_add_head(root, elem1); + queue_add_head(root, elem2); + + TEST_ASSERT(root->next == elem2); + TEST_ASSERT_EQUAL_INT(64960, root->next->data); + + TEST_ASSERT(root->next->next == elem1); + TEST_ASSERT_EQUAL_INT(25303, root->next->next->data); + + TEST_ASSERT_NULL(root->next->next->next); +} + +static void test_queue_add_tail_one(void) +{ + queue_node_t *root = &(q[0]), *elem = &(q[1]); + + elem->data = 33893; + + queue_add_tail(root, elem); + + TEST_ASSERT(root->next == elem); + TEST_ASSERT_EQUAL_INT(33893, root->next->data); + + TEST_ASSERT_NULL(root->next->next); +} + +static void test_queue_add_tail_two(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + + elem1->data = 9084; + elem2->data = 57068; + + queue_add_tail(root, elem1); + queue_add_tail(root, elem2); + + TEST_ASSERT(root->next == elem1); + TEST_ASSERT_EQUAL_INT(9084, root->next->data); + + TEST_ASSERT(root->next->next == elem2); + TEST_ASSERT_EQUAL_INT(57068, root->next->next->data); + + TEST_ASSERT_NULL(root->next->next->next); +} + +static void test_queue_priority_add_one(void) +{ + queue_node_t *root = &(q[0]), *elem = &(q[1]); + + elem->data = 7317; + elem->priority = 713643658; + + queue_priority_add(root, elem); + + TEST_ASSERT(root->next == elem); + TEST_ASSERT_EQUAL_INT(7317, root->next->data); + TEST_ASSERT_EQUAL_INT(713643658, root->next->priority); + + TEST_ASSERT_NULL(root->next->next); +} + +static void test_queue_priority_add_two_equal(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + + elem1->data = 27088; + elem1->priority = 14202; + + elem2->data = 4356; + elem2->priority = 14202; + + queue_priority_add(root, elem1); + queue_priority_add(root, elem2); + + TEST_ASSERT(root->next == elem1); + TEST_ASSERT_EQUAL_INT(27088, root->next->data); + TEST_ASSERT_EQUAL_INT(14202, root->next->priority); + + TEST_ASSERT(root->next->next == elem2); + TEST_ASSERT_EQUAL_INT(4356, root->next->next->data); + TEST_ASSERT_EQUAL_INT(14202, root->next->next->priority); + + TEST_ASSERT_NULL(root->next->next->next); +} + +static void test_queue_priority_add_two_distinct(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + + elem1->data = 46421; + elem1->priority = 4567; + + elem2->data = 43088; + elem2->priority = 1234; + + queue_priority_add(root, elem1); + queue_priority_add(root, elem2); + + TEST_ASSERT(root->next == elem2); + TEST_ASSERT_EQUAL_INT(43088, root->next->data); + TEST_ASSERT_EQUAL_INT(1234, root->next->priority); + + TEST_ASSERT(root->next->next == elem1); + TEST_ASSERT_EQUAL_INT(46421, root->next->next->data); + TEST_ASSERT_EQUAL_INT(4567, root->next->next->priority); + + TEST_ASSERT_NULL(root->next->next->next); +} + +static int generic_compare(queue_node_t *a, queue_node_t *b) +{ + return (b->priority) - (a->priority); +} + +static void test_queue_priority_add_generic_two_equal(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + + elem1->data = 43804; + elem1->priority = 34572; + + elem2->data = 64016; + elem2->priority = 34572; + + queue_priority_add_generic(root, elem1, generic_compare); + queue_priority_add_generic(root, elem2, generic_compare); + + TEST_ASSERT(root->next == elem1); + TEST_ASSERT_EQUAL_INT(43804, root->next->data); + TEST_ASSERT_EQUAL_INT(34572, root->next->priority); + + TEST_ASSERT(root->next->next == elem2); + TEST_ASSERT_EQUAL_INT(64016, root->next->next->data); + TEST_ASSERT_EQUAL_INT(34572, root->next->next->priority); + + TEST_ASSERT_NULL(root->next->next->next); +} + +static void test_queue_priority_add_generic_two_distinct(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + + elem1->data = 39152; + elem1->priority = 45394; + + elem2->data = 54496; + elem2->priority = 56834; + + queue_priority_add_generic(root, elem1, generic_compare); + queue_priority_add_generic(root, elem2, generic_compare); + + TEST_ASSERT(root->next == elem1); + TEST_ASSERT_EQUAL_INT(39152, root->next->data); + TEST_ASSERT_EQUAL_INT(45394, root->next->priority); + + TEST_ASSERT(root->next->next == elem2); + TEST_ASSERT_EQUAL_INT(54496, root->next->next->data); + TEST_ASSERT_EQUAL_INT(56834, root->next->next->priority); + + TEST_ASSERT_NULL(root->next->next->next); +} + +static void test_queue_remove_one(void) +{ + queue_node_t *root = &(q[0]), *elem1 = &(q[1]), *elem2 = &(q[2]); + queue_node_t *elem3 = &(q[3]); + + queue_add_head(root, elem1); + queue_add_head(root, elem2); + queue_add_head(root, elem3); + queue_remove(root, elem2); + + TEST_ASSERT(root->next == elem3); + TEST_ASSERT(root->next->next == elem1); + TEST_ASSERT_NULL(root->next->next->next); +} + +Test *tests_core_queue_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_queue_remove_head_empty), + new_TestFixture(test_queue_remove_head_one), + new_TestFixture(test_queue_add_head_one), + new_TestFixture(test_queue_add_head_two), + new_TestFixture(test_queue_add_tail_one), + new_TestFixture(test_queue_add_tail_two), + new_TestFixture(test_queue_priority_add_one), + new_TestFixture(test_queue_priority_add_two_equal), + new_TestFixture(test_queue_priority_add_two_distinct), + new_TestFixture(test_queue_priority_add_generic_two_equal), + new_TestFixture(test_queue_priority_add_generic_two_distinct), + new_TestFixture(test_queue_remove_one), + }; + + EMB_UNIT_TESTCALLER(core_queue_tests, set_up, NULL, + fixtures); + + return (Test *)&core_queue_tests; +} diff --git a/tests/unittests/tests-core.h b/tests/unittests/tests-core.h new file mode 100644 index 0000000000..ddd96aceca --- /dev/null +++ b/tests/unittests/tests-core.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2014 Martin Lenders + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. + */ + +/** + * @addtogroup unittests + * @{ + * + * @file tests-core.h + * @brief Unittests for the ``core`` module + * + * @author Freie Universität Berlin, Computer Systems & Telematics + * @author Martine Lenders <mlenders@inf.fu-berlin.de> + */ +#ifndef __TESTS_CORE_H_ +#define __TESTS_CORE_H_ +#include "embUnit/embUnit.h" + +/** + * @brief Generates tests atomic.h + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_core_atomic_tests(void); + +/** + * @brief Generates tests for bitarithm.h + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_core_bitarithm_tests(void); + +/** + * @brief Generates tests cib.h + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_core_cib_tests(void); + +/** + * @brief Generates tests clist.h + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_core_clist_tests(void); + +/** + * @brief Generates tests lifo.h + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_core_lifo_tests(void); + +/** + * @brief Generates tests queue.h + * + * @return embUnit tests if successful, NULL if not. + */ +Test *tests_core_queue_tests(void); + +#endif /* __TESTS_CORE_H_ */ +/** @} */ -- GitLab