45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
|
/*
|
||
|
* Copyright 2023 Meta
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
#include <zephyr/sys/util.h>
|
||
|
#include <zephyr/ztest.h>
|
||
|
|
||
|
static constexpr uint8_t val = LOG2CEIL(32);
|
||
|
static constexpr uint8_t val64 = LOG2CEIL(42 + BIT64(32));
|
||
|
|
||
|
template <typename T> static inline constexpr uint8_t log2ceil(T x)
|
||
|
{
|
||
|
return LOG2CEIL(x);
|
||
|
}
|
||
|
|
||
|
ZTEST(pot, test_constexpr_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(5, val);
|
||
|
zassert_equal(5, log2ceil(32));
|
||
|
zassert_equal(33, val64);
|
||
|
zassert_equal(33, log2ceil(42 + BIT64(32)));
|
||
|
}
|