Commit edb5ee15 authored by Christopher Friedt's avatar Christopher Friedt Committed by Carles Cufi
Browse files

tests: unit: test for Power-of-Two utilities



Tests for Power-of-Two (PoT) utilities.

Signed-off-by: default avatarChris Friedt <cfriedt@meta.com>
parent c26fc959
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
# Copyright 2023 Meta
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)

find_package(Zephyr COMPONENTS unittest REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(pot_test)

FILE(GLOB app_sources *.c *.cpp)
target_sources(testbinary PRIVATE ${app_sources})

# gcc
target_compile_options(testbinary PRIVATE -Wno-overflow)

# clang
target_compile_options(testbinary PRIVATE -Wno-shift-count-overflow -Wno-integer-overflow)
+27 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 Meta
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <limits.h>

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

ZTEST(pot, test_IS_POWER_OF_TWO)
{
	zassert_false(IS_POWER_OF_TWO(-1));
	zassert_false(IS_POWER_OF_TWO(0));
	zassert_true(IS_POWER_OF_TWO(1));
	zassert_true(IS_POWER_OF_TWO(2));
	zassert_false(IS_POWER_OF_TWO(3));
	zassert_true(IS_POWER_OF_TWO(4));
	zassert_true(IS_POWER_OF_TWO(BIT(30)));
	zassert_false(IS_POWER_OF_TWO(BIT(30) + 1));
	zassert_true(IS_POWER_OF_TWO(BIT64(32)));
	zassert_false(IS_POWER_OF_TWO(BIT64(32) + 1));
	zassert_true(IS_POWER_OF_TWO(BIT64(63)));
	zassert_false(IS_POWER_OF_TWO(BIT64(63) + 1));
	zassert_false(IS_POWER_OF_TWO(UINT64_MAX));
}

tests/unit/pot/log2.c

0 → 100644
+36 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 Meta
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

static const uint8_t val = LOG2(42);
static const uint8_t val64 = LOG2(42 + BIT64(32));

ZTEST(pot, test_LOG2)
{
	zassert_equal(-1, LOG2(LLONG_MIN));
	zassert_equal(-1, LOG2(LONG_MIN));
	zassert_equal(-1, LOG2(INT_MIN));
	zassert_equal(-1, LOG2(-1));
	zassert_equal(-1, LOG2(0));
	zassert_equal(0, LOG2(1));
	zassert_equal(1, LOG2(2));
	zassert_equal(1, LOG2(3));
	zassert_equal(2, LOG2(4));
	zassert_equal(2, LOG2(5));
	zassert_equal(31, LOG2(BIT(31)));
	zassert_equal(31, LOG2(BIT(31) + 1));
	zassert_equal(31, LOG2(UINT32_MAX));
	zassert_equal(32, LOG2(BIT64(32)));
	zassert_equal(62, LOG2(BIT64(63) - 1));
	zassert_equal(63, LOG2(BIT64(63)));
	zassert_equal(63, LOG2(BIT64(63) + 1));
	zassert_equal(63, LOG2(UINT64_MAX));

	zassert_equal(5, val);
	zassert_equal(32, val64);
}
+39 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 Meta
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

static constexpr uint8_t val = LOG2(42);
static constexpr uint8_t val64 = LOG2(42 + BIT64(32));

template <typename T> static inline constexpr uint8_t log2(T x)
{
	return LOG2(x);
}

ZTEST(pot, test_constexpr_LOG2)
{
	zassert_equal(-1, LOG2(0));
	zassert_equal(0, LOG2(1));
	zassert_equal(1, LOG2(2));
	zassert_equal(1, LOG2(3));
	zassert_equal(2, LOG2(4));
	zassert_equal(2, LOG2(5));
	zassert_equal(31, LOG2(BIT(31)));
	zassert_equal(31, LOG2(BIT(31) + 1));
	zassert_equal(31, LOG2(UINT32_MAX));
	zassert_equal(32, LOG2(BIT64(32)));
	zassert_equal(62, LOG2(BIT64(63) - 1));
	zassert_equal(63, LOG2(BIT64(63)));
	zassert_equal(63, LOG2(BIT64(63) + 1));
	zassert_equal(63, LOG2(UINT64_MAX));

	zassert_equal(5, val);
	zassert_equal(5, log2(42));
	zassert_equal(32, val64);
	zassert_equal(32, log2(42 + BIT64(32)));
}
+37 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 Meta
 *
 * SPDX-License-Identifier: Apache-2.0
 */

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

static const uint8_t val = LOG2CEIL(42);
static const uint8_t val64 = LOG2CEIL(42 + BIT64(32));

ZTEST(pot, test_LOG2CEIL)
{
	zassert_equal(0, LOG2CEIL(LLONG_MIN));
	zassert_equal(0, LOG2CEIL(LONG_MIN));
	zassert_equal(0, LOG2CEIL(INT_MIN));
	zassert_equal(0, LOG2CEIL(-1));
	zassert_equal(0, LOG2CEIL(0));
	zassert_equal(0, LOG2CEIL(1));
	zassert_equal(1, LOG2CEIL(2));
	zassert_equal(2, LOG2CEIL(3));
	zassert_equal(2, LOG2CEIL(4));
	zassert_equal(3, LOG2CEIL(5));
	zassert_equal(31, LOG2CEIL(BIT(31)));
	zassert_equal(32, LOG2CEIL(BIT(31) + 1));
	zassert_equal(32, LOG2CEIL(UINT32_MAX));
	zassert_equal(32, LOG2CEIL(BIT64(32)));
	zassert_equal(33, LOG2CEIL(BIT64(32) + 1));
	zassert_equal(63, LOG2CEIL(BIT64(63) - 1));
	zassert_equal(63, LOG2CEIL(BIT64(63)));
	zassert_equal(64, LOG2CEIL(BIT64(63) + 1));
	zassert_equal(64, LOG2CEIL(UINT64_MAX));

	zassert_equal(6, val);
	zassert_equal(33, val64);
}
Loading