/*
 * Copyright (c) 2019 Oticon A/S
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/ztest.h>
#include <zephyr/sys/util.h>
#include <string.h>

#include "test.inc"

#if __cplusplus
extern "C" {
#endif

ZTEST(util_cxx, test_u8_to_dec) {
	run_u8_to_dec();
}

ZTEST(util_cxx, test_COND_CODE_1) {
	run_COND_CODE_1();
}

ZTEST(util_cxx, test_COND_CODE_0) {
	run_COND_CODE_0();
}

ZTEST(util_cxx, test_UTIL_OR) {
	run_UTIL_OR();
}

ZTEST(util_cxx, test_UTIL_AND) {
	run_UTIL_AND();
}

ZTEST(util_cxx, test_IF_ENABLED) {
	run_IF_ENABLED();
}

ZTEST(util_cxx, test_LISTIFY) {
	run_LISTIFY();
}

ZTEST(util_cxx, test_MACRO_MAP_CAT) {
	run_MACRO_MAP_CAT();
}

ZTEST(util_cxx, test_z_max_z_min_z_clamp) {
	run_z_max_z_min_z_clamp();
}

ZTEST(util_cxx, test_CLAMP) {
	run_CLAMP();
}

ZTEST(util_cxx, test_IN_RANGE) {
	run_IN_RANGE();
}

ZTEST(util_cxx, test_FOR_EACH) {
	run_FOR_EACH();
}

ZTEST(util_cxx, test_FOR_EACH_NONEMPTY_TERM) {
	run_FOR_EACH_NONEMPTY_TERM();
}

ZTEST(util_cxx, test_FOR_EACH_FIXED_ARG) {
	run_FOR_EACH_FIXED_ARG();
}

ZTEST(util_cxx, test_FOR_EACH_IDX) {
	run_FOR_EACH_IDX();
}

ZTEST(util_cxx, test_FOR_EACH_IDX_FIXED_ARG) {
	run_FOR_EACH_IDX_FIXED_ARG();
}

ZTEST(util_cxx, test_IS_EMPTY) {
	run_IS_EMPTY();
}

ZTEST(util_cxx, test_IS_EQ) {
	run_IS_EQ();
}

ZTEST(util_cxx, test_LIST_DROP_EMPTY) {
	run_LIST_DROP_EMPTY();
}

ZTEST(util_cxx, test_nested_FOR_EACH) {
	run_nested_FOR_EACH();
}

ZTEST(util_cxx, test_GET_ARG_N) {
	run_GET_ARG_N();
}

ZTEST(util_cxx, test_GET_ARGS_LESS_N) {
	run_GET_ARGS_LESS_N();
}

ZTEST(util_cxx, test_mixing_GET_ARG_and_FOR_EACH) {
	run_mixing_GET_ARG_and_FOR_EACH();
}

ZTEST(util_cxx, test_IS_ARRAY_ELEMENT)
{
	run_IS_ARRAY_ELEMENT();
}

ZTEST(util_cxx, test_ARRAY_INDEX)
{
	run_ARRAY_INDEX();
}

ZTEST(util_cxx, test_PART_OF_ARRAY)
{
	run_PART_OF_ARRAY();
}

ZTEST(util_cxx, test_ARRAY_INDEX_FLOOR)
{
	run_ARRAY_INDEX_FLOOR();
}

ZTEST_SUITE(util_cxx, NULL, NULL, NULL, NULL, NULL);

#if __cplusplus
}
#endif

ZTEST(util_cc, test_u8_to_dec) {
	run_u8_to_dec();
}

ZTEST(util_cc, test_COND_CODE_1) {
	run_COND_CODE_1();
}

ZTEST(util_cc, test_COND_CODE_0) {
	run_COND_CODE_0();
}

ZTEST(util_cc, test_UTIL_OR) {
	run_UTIL_OR();
}

ZTEST(util_cc, test_UTIL_AND) {
	run_UTIL_AND();
}

ZTEST(util_cc, test_IF_ENABLED) {
	run_IF_ENABLED();
}

ZTEST(util_cc, test_LISTIFY) {
	run_LISTIFY();
}

ZTEST(util_cc, test_MACRO_MAP_CAT) {
	run_MACRO_MAP_CAT();
}

ZTEST(util_cc, test_z_max_z_min_z_clamp) {
	run_z_max_z_min_z_clamp();
}

ZTEST(util_cc, test_CLAMP) {
	run_CLAMP();
}

ZTEST(util_cc, test_IN_RANGE) {
	run_IN_RANGE();
}

ZTEST(util_cc, test_FOR_EACH) {
	run_FOR_EACH();
}

ZTEST(util_cc, test_FOR_EACH_NONEMPTY_TERM) {
	run_FOR_EACH_NONEMPTY_TERM();
}

ZTEST(util_cc, test_FOR_EACH_FIXED_ARG) {
	run_FOR_EACH_FIXED_ARG();
}

ZTEST(util_cc, test_FOR_EACH_IDX) {
	run_FOR_EACH_IDX();
}

ZTEST(util_cc, test_FOR_EACH_IDX_FIXED_ARG) {
	run_FOR_EACH_IDX_FIXED_ARG();
}

ZTEST(util_cc, test_IS_EMPTY) {
	run_IS_EMPTY();
}

ZTEST(util_cc, test_IS_EQ) {
	run_IS_EQ();
}

ZTEST(util_cc, test_LIST_DROP_EMPTY) {
	run_LIST_DROP_EMPTY();
}

ZTEST(util_cc, test_nested_FOR_EACH) {
	run_nested_FOR_EACH();
}

ZTEST(util_cc, test_GET_ARG_N) {
	run_GET_ARG_N();
}

ZTEST(util_cc, test_GET_ARGS_LESS_N) {
	run_GET_ARGS_LESS_N();
}

ZTEST(util_cc, test_mixing_GET_ARG_and_FOR_EACH) {
	run_mixing_GET_ARG_and_FOR_EACH();
}

ZTEST(util_cc, test_IS_ARRAY_ELEMENT)
{
	run_IS_ARRAY_ELEMENT();
}

ZTEST(util_cc, test_ARRAY_INDEX)
{
	run_ARRAY_INDEX();
}

ZTEST(util_cc, test_PART_OF_ARRAY)
{
	run_PART_OF_ARRAY();
}

ZTEST(util_cc, test_ARRAY_INDEX_FLOOR)
{
	run_ARRAY_INDEX_FLOOR();
}

ZTEST_SUITE(util_cc, NULL, NULL, NULL, NULL, NULL);
