mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-31 18:39:00 +08:00
- 在 IsInBounds 和 Enumerate 方法中缓存数组维度长度,避免重复读取元数据 - 为 TryGet 方法添加 MaybeNullWhen 特性注解以改善空值检查 - 更新 TryGet 方法文档说明其在失败时返回默认值的行为 - 新增 ArrayExtensionsTests 类,包含 TryGet 和 Enumerate 方法的完整测试用例 - 添加 using System.Diagnostics.CodeAnalysis 引入空值相关特性支持
111 lines
2.8 KiB
C#
111 lines
2.8 KiB
C#
namespace GFramework.Core.Tests.Extensions;
|
||
|
||
/// <summary>
|
||
/// 测试 ArrayExtensions 扩展方法的关键行为与边界语义。
|
||
/// </summary>
|
||
[TestFixture]
|
||
public class ArrayExtensionsTests
|
||
{
|
||
/// <summary>
|
||
/// 验证 TryGet 在坐标有效时返回 true,并输出目标位置的元素值。
|
||
/// </summary>
|
||
[Test]
|
||
public void TryGet_Should_Return_True_And_Assign_Value_When_Coordinates_Are_In_Bounds()
|
||
{
|
||
// Arrange
|
||
var array = new[,]
|
||
{
|
||
{ 1, 2 },
|
||
{ 3, 4 }
|
||
};
|
||
|
||
// Act
|
||
var result = array.TryGet(1, 0, out var value);
|
||
|
||
// Assert
|
||
Assert.Multiple(() =>
|
||
{
|
||
Assert.That(result, Is.True);
|
||
Assert.That(value, Is.EqualTo(3));
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 验证 TryGet 在值类型越界时返回 false,并将输出值重置为该类型的默认值。
|
||
/// </summary>
|
||
[Test]
|
||
public void TryGet_Should_Return_False_And_Default_Value_When_Value_Type_Is_Out_Of_Bounds()
|
||
{
|
||
// Arrange
|
||
var array = new[,]
|
||
{
|
||
{ 1, 2 },
|
||
{ 3, 4 }
|
||
};
|
||
|
||
// Act
|
||
var result = array.TryGet(2, 0, out int value);
|
||
|
||
// Assert
|
||
Assert.Multiple(() =>
|
||
{
|
||
Assert.That(result, Is.False);
|
||
Assert.That(value, Is.EqualTo(default(int)));
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 验证 TryGet 在引用类型越界时返回 false,并将输出值设置为 null。
|
||
/// </summary>
|
||
[Test]
|
||
public void TryGet_Should_Return_False_And_Null_When_Reference_Type_Is_Out_Of_Bounds()
|
||
{
|
||
// Arrange
|
||
var array = new string[,]
|
||
{
|
||
{ "A", "B" },
|
||
{ "C", "D" }
|
||
};
|
||
|
||
// Act
|
||
var result = array.TryGet(-1, 0, out string? value);
|
||
|
||
// Assert
|
||
Assert.Multiple(() =>
|
||
{
|
||
Assert.That(result, Is.False);
|
||
Assert.That(value, Is.Null);
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 验证 Enumerate 会按第一维优先、第二维递增的顺序返回所有坐标和值。
|
||
/// </summary>
|
||
[Test]
|
||
public void Enumerate_Should_Return_All_Coordinates_And_Values_In_Deterministic_Order()
|
||
{
|
||
// Arrange
|
||
var array = new[,]
|
||
{
|
||
{ 10, 20, 30 },
|
||
{ 40, 50, 60 }
|
||
};
|
||
|
||
// Act
|
||
var result = array.Enumerate().ToArray();
|
||
|
||
// Assert
|
||
Assert.That(
|
||
result,
|
||
Is.EqualTo(
|
||
new (int x, int y, int value)[]
|
||
{
|
||
(0, 0, 10),
|
||
(0, 1, 20),
|
||
(0, 2, 30),
|
||
(1, 0, 40),
|
||
(1, 1, 50),
|
||
(1, 2, 60)
|
||
}));
|
||
}
|
||
} |