diff --git a/src/common-tests/bitutils_tests.cpp b/src/common-tests/bitutils_tests.cpp index 536e1e557..2af63bcd9 100644 --- a/src/common-tests/bitutils_tests.cpp +++ b/src/common-tests/bitutils_tests.cpp @@ -71,3 +71,116 @@ TEST(BitUtils, Test16Bit) ASSERT_EQ(CountTrailingZeros(value), ManualCountTrailingZeros(value)); } } + +TEST(BitUtils, ZeroExtendHelpers) +{ + EXPECT_EQ(ZeroExtend16(u8(0xFF)), 0x00FFu); + EXPECT_EQ(ZeroExtend32(u16(0xFFFF)), 0x0000FFFFu); + EXPECT_EQ(ZeroExtend64(u32(0xFFFFFFFF)), 0x00000000FFFFFFFFull); +} + +TEST(BitUtils, SignExtendHelpers) +{ + EXPECT_EQ(SignExtend16(s8(-1)), 0xFFFFu); + EXPECT_EQ(SignExtend32(s16(-1)), 0xFFFFFFFFu); + EXPECT_EQ(SignExtend64(s32(-1)), 0xFFFFFFFFFFFFFFFFull); +} + +TEST(BitUtils, TruncateHelpers) +{ + EXPECT_EQ(Truncate8(u16(0x1234)), 0x34u); + EXPECT_EQ(Truncate16(u32(0x12345678)), 0x5678u); + EXPECT_EQ(Truncate32(u64(0x123456789ABCDEF0)), 0x9ABCDEF0u); +} + +TEST(BitUtils, BinaryToBCD) +{ + EXPECT_EQ(BinaryToBCD(0), 0x00u); + EXPECT_EQ(BinaryToBCD(9), 0x09u); + EXPECT_EQ(BinaryToBCD(12), 0x12u); + EXPECT_EQ(BinaryToBCD(99), 0x99u); +} + +TEST(BitUtils, PackedBCDToBinary) +{ + EXPECT_EQ(PackedBCDToBinary(0x00), 0); + EXPECT_EQ(PackedBCDToBinary(0x09), 9); + EXPECT_EQ(PackedBCDToBinary(0x12), 12); + EXPECT_EQ(PackedBCDToBinary(0x99), 99); +} + +TEST(BitUtils, IsValidBCDDigit) +{ + for (u8 i = 0; i < 10; ++i) + EXPECT_TRUE(IsValidBCDDigit(i)); + for (u8 i = 10; i < 16; ++i) + EXPECT_FALSE(IsValidBCDDigit(i)); +} + +TEST(BitUtils, IsValidPackedBCD) +{ + EXPECT_TRUE(IsValidPackedBCD(0x12)); + EXPECT_TRUE(IsValidPackedBCD(0x99)); + EXPECT_FALSE(IsValidPackedBCD(0x1A)); + EXPECT_FALSE(IsValidPackedBCD(0xA1)); +} + +TEST(BitUtils, BoolToUInt) +{ + EXPECT_EQ(BoolToUInt8(true), 1u); + EXPECT_EQ(BoolToUInt8(false), 0u); + EXPECT_EQ(BoolToUInt16(true), 1u); + EXPECT_EQ(BoolToUInt32(false), 0u); + EXPECT_EQ(BoolToUInt64(true), 1ull); + EXPECT_FLOAT_EQ(BoolToFloat(true), 1.0f); + EXPECT_FLOAT_EQ(BoolToFloat(false), 0.0f); +} + +TEST(BitUtils, ConvertToBool) +{ + EXPECT_TRUE(ConvertToBool(1)); + EXPECT_FALSE(ConvertToBool(0)); + EXPECT_TRUE(ConvertToBool(-1)); + EXPECT_TRUE(ConvertToBool(123)); +} + +TEST(BitUtils, ConvertToBoolUnchecked) +{ + u8 one = 1, zero = 0; + EXPECT_TRUE(ConvertToBoolUnchecked(one)); + EXPECT_FALSE(ConvertToBoolUnchecked(zero)); +} + +TEST(BitUtils, SignExtendN) +{ + EXPECT_EQ(SignExtendN<4>(0b0111), 7); + EXPECT_EQ(SignExtendN<4>(0b1000), -8); + EXPECT_EQ(SignExtendN<8>(0xFF), -1); + EXPECT_EQ(SignExtendN<12>(0x800), -2048); +} + +TEST(BitUtils, CountLeadingZeros) +{ + EXPECT_EQ(CountLeadingZeros(0b00010000), 3u); + EXPECT_EQ(CountLeadingZeros(0x0001), 15u); + EXPECT_EQ(CountLeadingZeros(0x80000000), 0u); + EXPECT_EQ(CountLeadingZeros(0x0000000100000000ull), 31u); +} + +TEST(BitUtils, CountTrailingZeros) +{ + EXPECT_EQ(CountTrailingZeros(0b10000000), 7u); + EXPECT_EQ(CountTrailingZeros(0x8000), 15u); + EXPECT_EQ(CountTrailingZeros(0x00010000), 16u); + EXPECT_EQ(CountTrailingZeros(0x0000000100000000ull), 32u); +} + +TEST(BitUtils, ByteSwap) +{ + EXPECT_EQ(ByteSwap(0x1234), 0x3412u); + EXPECT_EQ(ByteSwap(0x12345678), 0x78563412u); + EXPECT_EQ(ByteSwap(0x0123456789ABCDEFull), 0xEFCDAB8967452301ull); + EXPECT_EQ(ByteSwap(s16(0x1234)), s16(0x3412)); + EXPECT_EQ(ByteSwap(s32(0x12345678)), s32(0x78563412)); + EXPECT_EQ(ByteSwap(s64(0x0123456789ABCDEFll)), s64(0xEFCDAB8967452301ll)); +} \ No newline at end of file