feat: 为Number添加更多处理方式
This commit is contained in:
@@ -35,57 +35,133 @@ public class NumberTest
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试 BytesToUInt64 的正常与异常情况
|
||||
/// 测试 BytesToUInt64 的正常与异常情况,覆盖不同参数组合
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Test_BytesToUInt64()
|
||||
{
|
||||
// 正常大端
|
||||
// 正常大端(isLowNumHigh=false)
|
||||
var bytes = new byte[] { 0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x01 };
|
||||
var result = Number.BytesToUInt64((byte[])bytes.Clone(), false);
|
||||
var result = Number.BytesToUInt64((byte[])bytes.Clone());
|
||||
Assert.True(result.IsSuccessful);
|
||||
Assert.Equal(0x12345678ABCDEF01UL, result.Value);
|
||||
|
||||
// 正常小端
|
||||
// 正常小端(isLowNumHigh=true)
|
||||
var bytes2 = new byte[] { 0x01, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12 };
|
||||
var result2 = Number.BytesToUInt64((byte[])bytes2.Clone(), true);
|
||||
Assert.True(result2.IsSuccessful);
|
||||
Assert.Equal(0x12345678ABCDEF01UL, result2.Value);
|
||||
|
||||
// 异常:长度超限
|
||||
var result3 = Number.BytesToUInt64(new byte[9], false);
|
||||
Assert.False(result3.IsSuccessful);
|
||||
// 长度不足8字节(numLength=4),大端
|
||||
var bytes3 = new byte[] { 0x12, 0x34, 0x56, 0x78 };
|
||||
var result3 = Number.BytesToUInt64((byte[])bytes3.Clone(), 0, 4, false);
|
||||
Assert.True(result3.IsSuccessful);
|
||||
Assert.Equal(0x1234567800000000UL, result3.Value);
|
||||
|
||||
// 异常:不足8字节
|
||||
var result4 = Number.BytesToUInt64(new byte[] { 0x01, 0x02 }, false);
|
||||
Assert.False(result4.IsSuccessful); // BitConverter.ToUInt64 需要8字节
|
||||
// 长度不足8字节(numLength=4),小端
|
||||
var bytes4 = new byte[] { 0x78, 0x56, 0x34, 0x12 };
|
||||
var result4 = Number.BytesToUInt64((byte[])bytes4.Clone(), 0, 4, true);
|
||||
Assert.True(result4.IsSuccessful);
|
||||
Assert.Equal(0x12345678UL, result4.Value);
|
||||
|
||||
// numLength=0
|
||||
var bytes5 = new byte[] { 0x12, 0x34, 0x56, 0x78 };
|
||||
var result5 = Number.BytesToUInt64((byte[])bytes5.Clone(), 0, 0, false);
|
||||
Assert.True(result5.IsSuccessful);
|
||||
Assert.Equal(0UL, result5.Value);
|
||||
|
||||
// offset测试
|
||||
var bytes6 = new byte[] { 0x00, 0x00, 0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x01 };
|
||||
var result6 = Number.BytesToUInt64(bytes6, 2, 8, false);
|
||||
Assert.True(result6.IsSuccessful);
|
||||
Assert.Equal(0x12345678ABCDEF01UL, result6.Value);
|
||||
|
||||
// numLength超限(>8),应返回异常
|
||||
var bytes7 = new byte[9];
|
||||
var result7 = Number.BytesToUInt64(bytes7, 0, 9, false);
|
||||
Assert.False(result7.IsSuccessful);
|
||||
|
||||
// offset+numLength超限
|
||||
var bytes8 = new byte[] { 0x01, 0x02, 0x03, 0x04 };
|
||||
var result8 = Number.BytesToUInt64(bytes8, 2, 4, false);
|
||||
Assert.True(result8.IsSuccessful);
|
||||
Assert.Equal(0x0304000000000000UL, result8.Value);
|
||||
|
||||
// bytes长度不足offset+numLength
|
||||
var bytes9 = new byte[] { 0x01, 0x02 };
|
||||
var result9 = Number.BytesToUInt64(bytes9, 1, 2, true);
|
||||
Assert.True(result9.IsSuccessful);
|
||||
Assert.Equal(0x02UL, result9.Value);
|
||||
|
||||
// 空数组
|
||||
var result10 = Number.BytesToUInt64(new byte[0], 0, 0, false);
|
||||
Assert.True(result10.IsSuccessful);
|
||||
Assert.Equal(0UL, result10.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试 BytesToUInt32 的正常与异常情况
|
||||
/// 测试 BytesToUInt32 的正常与异常情况,覆盖不同参数组合
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void Test_BytesToUInt32()
|
||||
{
|
||||
// 正常大端
|
||||
// 正常大端(isLowNumHigh=false)
|
||||
var bytes = new byte[] { 0x12, 0x34, 0x56, 0x78 };
|
||||
var result = Number.BytesToUInt32((byte[])bytes.Clone(), false);
|
||||
var result = Number.BytesToUInt32((byte[])bytes.Clone());
|
||||
Assert.True(result.IsSuccessful);
|
||||
Assert.Equal(0x12345678U, result.Value);
|
||||
|
||||
// 正常小端
|
||||
// 正常小端(isLowNumHigh=true)
|
||||
var bytes2 = new byte[] { 0x78, 0x56, 0x34, 0x12 };
|
||||
var result2 = Number.BytesToUInt32((byte[])bytes2.Clone(), true);
|
||||
Assert.True(result2.IsSuccessful);
|
||||
Assert.Equal(0x12345678U, result2.Value);
|
||||
|
||||
// 异常:长度超限
|
||||
var result3 = Number.BytesToUInt32(new byte[5], false);
|
||||
Assert.False(result3.IsSuccessful);
|
||||
// 长度不足4字节(numLength=2),大端
|
||||
var bytes3 = new byte[] { 0x12, 0x34 };
|
||||
var result3 = Number.BytesToUInt32((byte[])bytes3.Clone(), 0, 2, false);
|
||||
Assert.True(result3.IsSuccessful);
|
||||
Assert.Equal(0x12340000U, result3.Value);
|
||||
|
||||
// 异常:不足4字节
|
||||
var result4 = Number.BytesToUInt32(new byte[] { 0x01, 0x02 }, false);
|
||||
Assert.False(result4.IsSuccessful); // BitConverter.ToUInt32 需要4字节
|
||||
// 长度不足4字节(numLength=2),小端
|
||||
var bytes4 = new byte[] { 0x34, 0x12 };
|
||||
var result4 = Number.BytesToUInt32((byte[])bytes4.Clone(), 0, 2, true);
|
||||
Assert.True(result4.IsSuccessful);
|
||||
Assert.Equal(0x1234U, result4.Value);
|
||||
|
||||
// numLength=0
|
||||
var bytes5 = new byte[] { 0x12, 0x34, 0x56, 0x78 };
|
||||
var result5 = Number.BytesToUInt32((byte[])bytes5.Clone(), 0, 0, false);
|
||||
Assert.True(result5.IsSuccessful);
|
||||
Assert.Equal(0U, result5.Value);
|
||||
|
||||
// offset测试
|
||||
var bytes6 = new byte[] { 0x00, 0x00, 0x12, 0x34, 0x56, 0x78 };
|
||||
var result6 = Number.BytesToUInt32(bytes6, 2, 4, false);
|
||||
Assert.True(result6.IsSuccessful);
|
||||
Assert.Equal(0x12345678U, result6.Value);
|
||||
|
||||
// numLength超限(>4),应返回异常
|
||||
var bytes7 = new byte[5];
|
||||
var result7 = Number.BytesToUInt32(bytes7, 0, 5, false);
|
||||
Assert.False(result7.IsSuccessful);
|
||||
|
||||
// offset+numLength超限
|
||||
var bytes8 = new byte[] { 0x01, 0x02, 0x03, 0x04 };
|
||||
var result8 = Number.BytesToUInt32(bytes8, 2, 2, false);
|
||||
Assert.True(result8.IsSuccessful);
|
||||
Assert.Equal(0x03040000U, result8.Value);
|
||||
|
||||
// bytes长度不足offset+numLength
|
||||
var bytes9 = new byte[] { 0x01, 0x02 };
|
||||
var result9 = Number.BytesToUInt32(bytes9, 1, 1, true);
|
||||
Assert.True(result9.IsSuccessful);
|
||||
Assert.Equal(0x02U, result9.Value);
|
||||
|
||||
// 空数组
|
||||
var result10 = Number.BytesToUInt32(new byte[0], 0, 0, false);
|
||||
Assert.True(result10.IsSuccessful);
|
||||
Assert.Equal(0U, result10.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user