LibHac/tests/LibHac.Tests/Util/BitUtilTests.cs

87 lines
2.6 KiB
C#
Raw Normal View History

2022-12-14 02:09:00 +01:00
using LibHac.Util;
using Xunit;
namespace LibHac.Tests.Util;
public class BitUtilTests
{
[Theory]
[InlineData(0x80, 0)]
[InlineData(0x00, 8)]
public void CountLeadingZeros_Byte(byte value, int expectedValue)
{
Assert.Equal(expectedValue, BitUtil.CountLeadingZeros(value));
}
[Theory]
[InlineData(0x0080, 8)]
[InlineData(0x0000, 16)]
public void CountLeadingZeros_Short(short value, int expectedValue)
{
Assert.Equal(expectedValue, BitUtil.CountLeadingZeros(value));
}
[Theory]
[InlineData(0b0000_1000_0110_0000, 0b0000_1000_0100_0000)]
[InlineData(0b0000_1000_0110_1111, 0b0000_1000_0110_1110)]
[InlineData(unchecked((short)0b1000_0000_0000_0000), 0b0000_0000_0000_0000)]
[InlineData(0, 0)]
public void ResetLeastSignificantOneBit_Short(short value, short expectedValue)
{
Assert.Equal(expectedValue, BitUtil.ResetLeastSignificantOneBit(value));
}
[Theory]
[InlineData(0b0101_0000_0000_0000_0000, 0b0100_0000_0000_0000_0000)]
[InlineData(0b1111_0000_1000_0110_1111, 0b1111_0000_1000_0110_1110)]
[InlineData(0b0100_1000_0000_0000_0000, 0b0100_0000_0000_0000_0000)]
[InlineData(0, 0)]
public void ResetLeastSignificantOneBit_Uint(uint value, uint expectedValue)
{
Assert.Equal(expectedValue, BitUtil.ResetLeastSignificantOneBit(value));
}
[Theory]
[InlineData(0x80, true)]
[InlineData(0x81, false)]
[InlineData(0, false)]
[InlineData(short.MinValue, false)]
public void IsPowerOfTwo_Short(short value, bool expectedValue)
{
Assert.Equal(expectedValue, BitUtil.IsPowerOfTwo(value));
}
[Theory]
[InlineData(0x0000100000000000, true)]
[InlineData(0x0000100000004000, false)]
[InlineData(0, false)]
public void IsPowerOfTwo_Ulong(ulong value, bool expectedValue)
{
Assert.Equal(expectedValue, BitUtil.IsPowerOfTwo(value));
}
[Theory]
[InlineData(-55, -2, 29)]
[InlineData(-55, 2, -27)]
[InlineData(0, 26, 0)]
[InlineData(-55, -26, 3)]
[InlineData(55, -26, -1)]
[InlineData(int.MinValue, -26, -82595523)]
public void DivideUp_Int(int value, int divisor, int expectedValue)
{
Assert.Equal(expectedValue, BitUtil.DivideUp(value, divisor));
}
[Theory]
[InlineData(55, 2, 28)]
[InlineData(0, 26, 0)]
[InlineData(1127, 24, 47)]
[InlineData(1128, 24, 47)]
[InlineData(1129, 24, 48)]
[InlineData(567, 987, 1)]
[InlineData(int.MaxValue, 26, 82595525)]
public void DivideUp_Uint(uint value, uint divisor, uint expectedValue)
{
Assert.Equal(expectedValue, BitUtil.DivideUp(value, divisor));
}
}