Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Nick Johnson <sylvyrfysh@gmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <LibTest/TestCase.h>
8
9#include <AK/BuiltinWrappers.h>
10#include <AK/Types.h>
11
12TEST_CASE(wrapped_popcount)
13{
14 EXPECT_EQ(popcount(NumericLimits<u8>::max()), 8);
15 EXPECT_EQ(popcount(NumericLimits<u16>::max()), 16);
16 EXPECT_EQ(popcount(NumericLimits<u32>::max()), 32);
17 EXPECT_EQ(popcount(NumericLimits<u64>::max()), 64);
18 EXPECT_EQ(popcount(NumericLimits<size_t>::max()), static_cast<int>(8 * sizeof(size_t)));
19 EXPECT_EQ(popcount(0u), 0);
20 EXPECT_EQ(popcount(0b01010101ULL), 4);
21}
22
23TEST_CASE(wrapped_count_leading_zeroes)
24{
25 EXPECT_EQ(count_leading_zeroes(NumericLimits<u8>::max()), 0);
26 EXPECT_EQ(count_leading_zeroes(static_cast<u8>(0x20)), 2);
27 EXPECT_EQ(count_leading_zeroes_safe(static_cast<u8>(0)), 8);
28 EXPECT_EQ(count_leading_zeroes(NumericLimits<u16>::max()), 0);
29 EXPECT_EQ(count_leading_zeroes(static_cast<u16>(0x20)), 10);
30 EXPECT_EQ(count_leading_zeroes_safe(static_cast<u16>(0)), 16);
31 EXPECT_EQ(count_leading_zeroes(NumericLimits<u32>::max()), 0);
32 EXPECT_EQ(count_leading_zeroes(static_cast<u32>(0x20)), 26);
33 EXPECT_EQ(count_leading_zeroes_safe(static_cast<u32>(0)), 32);
34 EXPECT_EQ(count_leading_zeroes(NumericLimits<u64>::max()), 0);
35}
36
37TEST_CASE(wrapped_count_trailing_zeroes)
38{
39 EXPECT_EQ(count_trailing_zeroes(NumericLimits<u8>::max()), 0);
40 EXPECT_EQ(count_trailing_zeroes(static_cast<u8>(1)), 0);
41 EXPECT_EQ(count_trailing_zeroes(static_cast<u8>(2)), 1);
42 EXPECT_EQ(count_trailing_zeroes_safe(static_cast<u8>(0)), 8);
43 EXPECT_EQ(count_trailing_zeroes(NumericLimits<u16>::max()), 0);
44 EXPECT_EQ(count_trailing_zeroes(static_cast<u16>(1)), 0);
45 EXPECT_EQ(count_trailing_zeroes(static_cast<u16>(2)), 1);
46 EXPECT_EQ(count_trailing_zeroes_safe(static_cast<u16>(0)), 16);
47 EXPECT_EQ(count_trailing_zeroes(NumericLimits<u32>::max()), 0);
48 EXPECT_EQ(count_trailing_zeroes(static_cast<u32>(1)), 0);
49 EXPECT_EQ(count_trailing_zeroes(static_cast<u32>(2)), 1);
50 EXPECT_EQ(count_trailing_zeroes_safe(static_cast<u32>(0)), 32);
51 EXPECT_EQ(count_trailing_zeroes(NumericLimits<u64>::max()), 0);
52 EXPECT_EQ(count_trailing_zeroes(static_cast<u64>(1)), 0);
53 EXPECT_EQ(count_trailing_zeroes(static_cast<u64>(2)), 1);
54}