| // SPDX-License-Identifier: GPL-2.0-or-later |
| /* |
| * Copyright 2025, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> |
| */ |
| |
| #include <test/lib.h> |
| #include <test/test.h> |
| #include <test/ut.h> |
| |
| int __clzsi2(int a); |
| int __clzdi2(long a); |
| int __clzti2(long long a); |
| |
| /** |
| * test_clz() - test library functions to count leading zero bits |
| * |
| * @uts: unit test state |
| */ |
| static int test_clz(struct unit_test_state *uts) |
| { |
| ut_asserteq(0, __clzti2(0xffffffffffffffffLL)); |
| ut_asserteq(0, __clzti2(0x8000000000000000LL)); |
| ut_asserteq(1, __clzti2(0x4000000000000000LL)); |
| ut_asserteq(17, __clzti2(0x0000500000a00000LL)); |
| ut_asserteq(62, __clzti2(0x0000000000000002LL)); |
| ut_asserteq(63, __clzti2(0x0000000000000001LL)); |
| |
| #if BITS_PER_LONG == 64 |
| ut_asserteq(0, __clzdi2(0xffffffffffffffffLL)); |
| ut_asserteq(0, __clzti2(0x8000000000000000LL)); |
| ut_asserteq(1, __clzti2(0x4000000000000000LL)); |
| ut_asserteq(17, __clzdi2(0x0000500000a00000LL)); |
| ut_asserteq(62, __clzdi2(0x0000000000000002LL)); |
| ut_asserteq(63, __clzdi2(0x0000000000000001LL)); |
| #else |
| ut_asserteq(0, __clzdi2(0xffffffff)); |
| ut_asserteq(0, __clzdi2(0x80000000)); |
| ut_asserteq(1, __clzdi2(0x40000000)); |
| ut_asserteq(9, __clzdi2(0x0050a000)); |
| ut_asserteq(30, __clzdi2(0x00000002)); |
| ut_asserteq(31, __clzdi2(0x00000001)); |
| #endif |
| |
| ut_asserteq(0, __clzsi2(0xffffffff)); |
| ut_asserteq(0, __clzsi2(0x80000000)); |
| ut_asserteq(1, __clzsi2(0x40000000)); |
| ut_asserteq(9, __clzsi2(0x0050a000)); |
| ut_asserteq(30, __clzsi2(0x00000002)); |
| ut_asserteq(31, __clzsi2(0x00000001)); |
| |
| return 0; |
| } |
| LIB_TEST(test_clz, 0); |