/* * Copyright (c) 2022 BayLibre SAS * * SPDX-License-Identifier: Apache-2.0 */ #include #include /** * @brief Test the Z_POW2_CEIL() macro * * @defgroup test_pow2_ceil Z_POW2_CEIL() tests * * @ingroup all_tests * * @{ * @} */ /** * @brief Verify compile-time constant results * * @ingroup test_pow2_ceil * * @details Check if static array allocations are sized as expected. */ char static_array1[Z_POW2_CEIL(1)]; char static_array2[Z_POW2_CEIL(2)]; char static_array3[Z_POW2_CEIL(3)]; char static_array4[Z_POW2_CEIL(4)]; char static_array5[Z_POW2_CEIL(5)]; char static_array7[Z_POW2_CEIL(7)]; char static_array8[Z_POW2_CEIL(8)]; char static_array9[Z_POW2_CEIL(9)]; BUILD_ASSERT(sizeof(static_array1) == 1); BUILD_ASSERT(sizeof(static_array2) == 2); BUILD_ASSERT(sizeof(static_array3) == 4); BUILD_ASSERT(sizeof(static_array4) == 4); BUILD_ASSERT(sizeof(static_array5) == 8); BUILD_ASSERT(sizeof(static_array7) == 8); BUILD_ASSERT(sizeof(static_array8) == 8); BUILD_ASSERT(sizeof(static_array9) == 16); /** * @brief Verify run-time non-constant results * * @ingroup test_pow2_ceil * * @details Check if run-time non-constant results are as expected. * Use a volatile variable to prevent compiler optimizations. */ static void test_pow2_ceil_x(unsigned long test_value, unsigned long expected_result) { volatile unsigned int x = test_value; unsigned int result = Z_POW2_CEIL(x); zassert_equal(result, expected_result, "ZPOW2_CEIL(%lu) returned %lu, expected %lu", test_value, result, expected_result); } ZTEST(pow2, test_pow2_ceil) { test_pow2_ceil_x(1, 1); test_pow2_ceil_x(2, 2); test_pow2_ceil_x(3, 4); test_pow2_ceil_x(4, 4); test_pow2_ceil_x(5, 8); test_pow2_ceil_x(7, 8); test_pow2_ceil_x(8, 8); test_pow2_ceil_x(9, 16); } extern void *common_setup(void); ZTEST_SUITE(pow2, NULL, common_setup, NULL, NULL, NULL);