diff --git a/test/cmp_max_used_bits/meson.build b/test/cmp_max_used_bits/meson.build new file mode 100644 index 0000000000000000000000000000000000000000..a7c001e95c2ac125169bfdad6c514cbd48d3cdbc --- /dev/null +++ b/test/cmp_max_used_bits/meson.build @@ -0,0 +1,12 @@ +test_case = files('test_cmp_max_used_bits_list.c') +test_runner = test_runner_generator.process(test_case) + +test_cmp_max_used_bits_list = executable('test_cmp_max_used_bits_list', + test_case, test_runner, + include_directories : incdir, + link_with : cmp_lib, + dependencies : unity_dep, + build_by_default : false +) + +test('max_used_bits List Unit Tests', test_cmp_max_used_bits_list) diff --git a/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c b/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c new file mode 100644 index 0000000000000000000000000000000000000000..2ee2677fed07127a2efd6a517e17880c0041188d --- /dev/null +++ b/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c @@ -0,0 +1,153 @@ +/** + * @file test_cmp_max_used_bits_list.c + * @author Dominik Loidolt (dominik.loidolt@univie.ac.at) + * @date 2023 + * + * @copyright GPLv2 + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * @brief max_used_bits list tests + */ + + +#include <string.h> + +#include <unity.h> + +#include <cmp_max_used_bits_list.h> + + +/** + * @test cmp_max_used_bits_list_add + * @test cmp_max_used_bits_list_get + * @test cmp_max_used_bits_list_delet + * @test cmp_max_used_bits_list_empty + */ + +void test_cmp_max_used_bits_list(void) +{ + struct cmp_max_used_bits i_17, i_21, i_22, i_23, i_255, i_0; + struct cmp_max_used_bits *p; + int return_val; + + /* set up max_used_bits item */ + memset(&i_17, 17, sizeof(struct cmp_max_used_bits)); + i_17.version = 17; + memset(&i_21, 21, sizeof(struct cmp_max_used_bits)); + i_21.version = 21; + memset(&i_22, 22, sizeof(struct cmp_max_used_bits)); + i_22.version = 22; + memset(&i_23, 23, sizeof(struct cmp_max_used_bits)); + i_23.version = 23; + memset(&i_255, 0xFF, sizeof(struct cmp_max_used_bits)); + i_255.version = 255; + memset(&i_0, 0, sizeof(struct cmp_max_used_bits)); + i_0.version = 0; + + return_val = cmp_max_used_bits_list_add(&i_17); + TEST_ASSERT_EQUAL_INT(return_val, 0); + return_val = cmp_max_used_bits_list_add(&i_21); + TEST_ASSERT_EQUAL_INT(return_val, 0); + return_val = cmp_max_used_bits_list_add(&i_22); + TEST_ASSERT_EQUAL_INT(return_val, 0); + return_val = cmp_max_used_bits_list_add(&i_23); + TEST_ASSERT_EQUAL_INT(return_val, 0); + return_val = cmp_max_used_bits_list_add(&i_255); + TEST_ASSERT_EQUAL_INT(return_val, 0); + + /* error cases */ + return_val = cmp_max_used_bits_list_add(NULL); + TEST_ASSERT_EQUAL_INT(return_val, -1); + return_val = cmp_max_used_bits_list_add(&i_0); + TEST_ASSERT_EQUAL_INT(return_val, -1); + i_0.version = 16; + return_val = cmp_max_used_bits_list_add(&i_0); + TEST_ASSERT_EQUAL_INT(return_val, -1); + + p = cmp_max_used_bits_list_get(17); + TEST_ASSERT_EQUAL_INT(p->version, 17); + TEST_ASSERT(!memcmp(p, &i_17, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(23); + TEST_ASSERT_EQUAL_INT(p->version, 23); + TEST_ASSERT(!memcmp(p, &i_23, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(22); + TEST_ASSERT_EQUAL_INT(p->version, 22); + TEST_ASSERT(!memcmp(p, &i_22, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(255); + TEST_ASSERT_EQUAL_INT(p->version, 255); + TEST_ASSERT(!memcmp(p, &i_255, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(21); + TEST_ASSERT_EQUAL_INT(p->version, 21); + TEST_ASSERT(!memcmp(p, &i_21, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(0); + TEST_ASSERT_EQUAL_INT(p->version, 0); + TEST_ASSERT(!memcmp(p, &MAX_USED_BITS_SAFE, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(1); + TEST_ASSERT_EQUAL_INT(p->version, 1); + TEST_ASSERT(!memcmp(p, &MAX_USED_BITS_V1, sizeof(struct cmp_max_used_bits))); + + /* Try to get an element that is not in the list */ + p = cmp_max_used_bits_list_get(42); + TEST_ASSERT_NULL(p); + + p = cmp_max_used_bits_list_get(3); + TEST_ASSERT_NULL(p); + + + /* overwrite a list item */ + memset(&i_22, 0x42, sizeof(struct cmp_max_used_bits)); + i_22.version = 22; + return_val = cmp_max_used_bits_list_add(&i_22); + TEST_ASSERT_EQUAL_INT(return_val, 1); + p = cmp_max_used_bits_list_get(22); + TEST_ASSERT_EQUAL_INT(p->version, 22); + TEST_ASSERT(!memcmp(p, &i_22, sizeof(struct cmp_max_used_bits))); + + /* delete item */ + cmp_max_used_bits_list_delet(22); + p = cmp_max_used_bits_list_get(22); + TEST_ASSERT_NULL(p); + + cmp_max_used_bits_list_delet(21); + p = cmp_max_used_bits_list_get(21); + TEST_ASSERT_NULL(p); + + /* empty item */ + cmp_max_used_bits_list_empty(); + p = cmp_max_used_bits_list_get(23); + TEST_ASSERT_NULL(p); + + cmp_max_used_bits_list_empty(); + p = cmp_max_used_bits_list_get(21); + TEST_ASSERT_NULL(p); + + p = cmp_max_used_bits_list_get(0); + TEST_ASSERT_EQUAL_INT(p->version, 0); + TEST_ASSERT(!memcmp(p, &MAX_USED_BITS_SAFE, sizeof(struct cmp_max_used_bits))); + + p = cmp_max_used_bits_list_get(1); + TEST_ASSERT_EQUAL_INT(p->version, 1); + TEST_ASSERT(!memcmp(p, &MAX_USED_BITS_V1, sizeof(struct cmp_max_used_bits))); + + return_val = cmp_max_used_bits_list_add(&i_23); + TEST_ASSERT_EQUAL_INT(return_val, 0); + + p = cmp_max_used_bits_list_get(23); + TEST_ASSERT_EQUAL_INT(p->version, 23); + TEST_ASSERT(!memcmp(p, &i_23, sizeof(struct cmp_max_used_bits))); + + cmp_max_used_bits_list_empty(); +} diff --git a/test/meson.build b/test/meson.build index 6a1337f68487c657bf344d16cfadeb47ec75a5f1..db573585b6d5af10af9eccca4e1f056d75db6054 100644 --- a/test/meson.build +++ b/test/meson.build @@ -38,3 +38,4 @@ subdir('cmp_decmp') subdir('cmp_data_types') subdir('cmp_entity') subdir('cmp_rdcu_cfg') +subdir('cmp_max_used_bits')