tests: convert util test to a unit test

Merge tests/misc/util with existing util unit test.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2019-09-28 09:06:02 -04:00
commit 2051ad1846
5 changed files with 85 additions and 123 deletions

View file

@ -1,8 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.13.1)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
project(util)
FILE(GLOB app_sources src/*.c)
target_sources(app PRIVATE ${app_sources})

View file

@ -1 +0,0 @@
CONFIG_ZTEST=y

View file

@ -1,110 +0,0 @@
/*
* Copyright (c) 2019 Nordic Semiconductor ASA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <ztest.h>
#include <sys/util.h>
#define TEST_DEFINE_1 1
#define TEST_DEFINE_0 0
void test_COND_CODE_1(void)
{
/* Test validates that expected code has been injected. Failure would
* be seen in compilation (lack of variable or ununsed variable.
*/
COND_CODE_1(1, (u32_t x0 = 1;), (u32_t y0;))
zassert_true((x0 == 1), NULL);
COND_CODE_1(NOT_EXISTING_DEFINE, (u32_t x1 = 1;), (u32_t y1 = 1;))
zassert_true((y1 == 1), NULL);
COND_CODE_1(TEST_DEFINE_1, (u32_t x2 = 1;), (u32_t y2 = 1;))
zassert_true((x2 == 1), NULL);
COND_CODE_1(2, (u32_t x3 = 1;), (u32_t y3 = 1;))
zassert_true((y3 == 1), NULL);
}
void test_COND_CODE_0(void)
{
/* Test validates that expected code has been injected. Failure would
* be seen in compilation (lack of variable or ununsed variable.
*/
COND_CODE_0(0, (u32_t x0 = 1;), (u32_t y0;))
zassert_true((x0 == 1), NULL);
COND_CODE_0(NOT_EXISTING_DEFINE, (u32_t x1 = 1;), (u32_t y1 = 1;))
zassert_true((y1 == 1), NULL);
COND_CODE_0(TEST_DEFINE_0, (u32_t x2 = 1;), (u32_t y2 = 1;))
zassert_true((x2 == 1), NULL);
COND_CODE_0(2, (u32_t x3 = 1;), (u32_t y3 = 1;))
zassert_true((y3 == 1), NULL);
}
void test_UTIL_LISTIFY(void)
{
int i = 0;
#define INC(x, _) \
do { \
i += x; \
} while (0);
#define DEFINE(x, _) int a##x;
#define MARK_UNUSED(x, _) ARG_UNUSED(a##x);
UTIL_LISTIFY(4, DEFINE, _)
UTIL_LISTIFY(4, MARK_UNUSED, _)
UTIL_LISTIFY(4, INC, _)
zassert_equal(i, 0 + 1 + 2 + 3, NULL);
}
static int inc_func(void)
{
static int a = 1;
return a++;
}
/* Test checks if @ref Z_MAX and @ref Z_MIN return correct result and perform
* single evaluation of input arguments.
*/
static void test_z_max_z_min(void)
{
zassert_equal(Z_MAX(inc_func(), 0), 1, "Unexpected macro result");
/* Z_MAX should have call inc_func only once */
zassert_equal(inc_func(), 2, "Unexpected return value");
zassert_equal(Z_MIN(inc_func(), 2), 2, "Unexpected macro result");
/* Z_MIN should have call inc_func only once */
zassert_equal(inc_func(), 4, "Unexpected return value");
}
/*test case main entry*/
void test_main(void)
{
ztest_test_suite(test_util_api,
ztest_unit_test(test_COND_CODE_1),
ztest_unit_test(test_COND_CODE_0),
ztest_unit_test(test_UTIL_LISTIFY),
ztest_unit_test(test_z_max_z_min)
);
ztest_run_test_suite(test_util_api);
}

View file

@ -1,3 +0,0 @@
tests:
misc.util:
tags: util

View file

@ -71,10 +71,94 @@ static void test_u8_to_dec(void)
"Length of converted value using 0 byte buffer isn't 0"); "Length of converted value using 0 byte buffer isn't 0");
} }
#define TEST_DEFINE_1 1
#define TEST_DEFINE_0 0
void test_COND_CODE_1(void)
{
/* Test validates that expected code has been injected. Failure would
* be seen in compilation (lack of variable or ununsed variable.
*/
COND_CODE_1(1, (u32_t x0 = 1;), (u32_t y0;))
zassert_true((x0 == 1), NULL);
COND_CODE_1(NOT_EXISTING_DEFINE, (u32_t x1 = 1;), (u32_t y1 = 1;))
zassert_true((y1 == 1), NULL);
COND_CODE_1(TEST_DEFINE_1, (u32_t x2 = 1;), (u32_t y2 = 1;))
zassert_true((x2 == 1), NULL);
COND_CODE_1(2, (u32_t x3 = 1;), (u32_t y3 = 1;))
zassert_true((y3 == 1), NULL);
}
void test_COND_CODE_0(void)
{
/* Test validates that expected code has been injected. Failure would
* be seen in compilation (lack of variable or ununsed variable.
*/
COND_CODE_0(0, (u32_t x0 = 1;), (u32_t y0;))
zassert_true((x0 == 1), NULL);
COND_CODE_0(NOT_EXISTING_DEFINE, (u32_t x1 = 1;), (u32_t y1 = 1;))
zassert_true((y1 == 1), NULL);
COND_CODE_0(TEST_DEFINE_0, (u32_t x2 = 1;), (u32_t y2 = 1;))
zassert_true((x2 == 1), NULL);
COND_CODE_0(2, (u32_t x3 = 1;), (u32_t y3 = 1;))
zassert_true((y3 == 1), NULL);
}
void test_UTIL_LISTIFY(void)
{
int i = 0;
#define INC(x, _) \
do { \
i += x; \
} while (0);
#define DEFINE(x, _) int a##x;
#define MARK_UNUSED(x, _) ARG_UNUSED(a##x);
UTIL_LISTIFY(4, DEFINE, _)
UTIL_LISTIFY(4, MARK_UNUSED, _)
UTIL_LISTIFY(4, INC, _)
zassert_equal(i, 0 + 1 + 2 + 3, NULL);
}
static int inc_func(void)
{
static int a = 1;
return a++;
}
/* Test checks if @ref Z_MAX and @ref Z_MIN return correct result and perform
* single evaluation of input arguments.
*/
static void test_z_max_z_min(void)
{
zassert_equal(Z_MAX(inc_func(), 0), 1, "Unexpected macro result");
/* Z_MAX should have call inc_func only once */
zassert_equal(inc_func(), 2, "Unexpected return value");
zassert_equal(Z_MIN(inc_func(), 2), 2, "Unexpected macro result");
/* Z_MIN should have call inc_func only once */
zassert_equal(inc_func(), 4, "Unexpected return value");
}
void test_main(void) void test_main(void)
{ {
ztest_test_suite(test_lib_sys_util_tests, ztest_test_suite(test_lib_sys_util_tests,
ztest_unit_test(test_u8_to_dec) ztest_unit_test(test_u8_to_dec),
ztest_unit_test(test_COND_CODE_1),
ztest_unit_test(test_COND_CODE_0),
ztest_unit_test(test_UTIL_LISTIFY),
ztest_unit_test(test_z_max_z_min)
); );
ztest_run_test_suite(test_lib_sys_util_tests); ztest_run_test_suite(test_lib_sys_util_tests);