GFramework/GFramework.Core.Tests/Extensions/ArrayExtensionsTests.cs
gewuyou ff553977e3 chore(license): 补齐 Apache-2.0 文件头治理
- 新增许可证文件头检查与修复脚本

- 补充维护者手动修复 PR 工作流和 CI 校验

- 更新贡献指南中的文件头说明

- 补齐仓库维护源码和配置文件的许可证声明
2026-05-03 19:39:49 +08:00

114 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
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)
}));
}
}