| // 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 __ctzsi2(int a); |
| int __ctzdi2(long a); |
| int __ctzti2(long long a); |
| |
| /** |
| * test_ctz() - test library functions to count trailing zero bits |
| * |
| * @uts: unit test state |
| */ |
| static int test_ctz(struct unit_test_state *uts) |
| { |
| ut_asserteq(0, __ctzti2(0xffffffffffffffffLL)); |
| ut_asserteq(63, __ctzti2(0x8000000000000000LL)); |
| ut_asserteq(62, __ctzti2(0x4000000000000000LL)); |
| ut_asserteq(21, __ctzti2(0x0000500000a00000LL)); |
| ut_asserteq(1, __ctzti2(0x0000000000000002LL)); |
| ut_asserteq(0, __ctzti2(0x0000000000000001LL)); |
| |
| #if BITS_PER_LONG == 64 |
| ut_asserteq(0, __ctzdi2(0xffffffffffffffffLL)); |
| ut_asserteq(63, __ctzdi2(0x8000000000000000LL)); |
| ut_asserteq(62, __ctzdi2(0x4000000000000000LL)); |
| ut_asserteq(21, __ctzdi2(0x0000500000a00000LL)); |
| ut_asserteq(1, __ctzdi2(0x0000000000000002LL)); |
| ut_asserteq(0, __ctzdi2(0x0000000000000001LL)); |
| #else |
| ut_asserteq(0, __ctzdi2(0xffffffff)); |
| ut_asserteq(31, __ctzdi2(0x80000000)); |
| ut_asserteq(30, __ctzdi2(0x40000000)); |
| ut_asserteq(13, __ctzdi2(0x0050a000)); |
| ut_asserteq(1, __ctzdi2(0x00000002)); |
| ut_asserteq(0, __ctzdi2(0x00000001)); |
| #endif |
| |
| ut_asserteq(0, __ctzsi2(0xffffffff)); |
| ut_asserteq(31, __ctzsi2(0x80000000)); |
| ut_asserteq(30, __ctzsi2(0x40000000)); |
| ut_asserteq(13, __ctzsi2(0x0050a000)); |
| ut_asserteq(1, __ctzsi2(0x00000002)); |
| ut_asserteq(0, __ctzsi2(0x00000001)); |
| |
| return 0; |
| } |
| LIB_TEST(test_ctz, 0); |