Serenity Operating System
at master 54 lines 2.3 kB view raw
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}