Files
zeling_v2/Assets/Tests/EditMode/Enemies/EnemyBodyTests.cs
T

74 lines
2.9 KiB
C#

using NUnit.Framework;
using BaseGames.Enemies;
namespace BaseGames.Tests.EditMode.Enemies
{
/// <summary>
/// EnemyBody 方向相关纯函数测试(无场景依赖)。
/// 这三个函数的左右符号最易写反,故对两个方向与边界相等情形都做断言。
/// </summary>
public class EnemyBodyTests
{
// 身体占据 [2, 4],中心 3,半宽 1
const float MinX = 2f, MaxX = 4f;
[Test]
public void FrontEdge_Right_IsMaxX()
=> Assert.AreEqual(MaxX, EnemyBody.FrontEdge(MinX, MaxX, 1f));
[Test]
public void FrontEdge_Left_IsMinX()
=> Assert.AreEqual(MinX, EnemyBody.FrontEdge(MinX, MaxX, -1f));
[Test]
public void FrontEdge_ZeroDir_TreatedAsRight()
=> Assert.AreEqual(MaxX, EnemyBody.FrontEdge(MinX, MaxX, 0f));
[Test]
public void RearEdge_Right_IsMinX()
=> Assert.AreEqual(MinX, EnemyBody.RearEdge(MinX, MaxX, 1f));
[Test]
public void RearEdge_Left_IsMaxX()
=> Assert.AreEqual(MaxX, EnemyBody.RearEdge(MinX, MaxX, -1f));
[Test]
public void RearEdge_ZeroDir_TreatedAsRight()
=> Assert.AreEqual(MinX, EnemyBody.RearEdge(MinX, MaxX, 0f));
// ── BodyPassed:向右 ─────────────────────────────────────────────
[Test]
public void BodyPassed_Right_NotReached_False()
=> Assert.IsFalse(EnemyBody.BodyPassed(MinX, MaxX, 5f, 1f)); // 目标在身体右侧外
[Test]
public void BodyPassed_Right_OverlappingTarget_False()
=> Assert.IsFalse(EnemyBody.BodyPassed(MinX, MaxX, 3f, 1f)); // 目标仍在身体内,未整体越过
[Test]
public void BodyPassed_Right_ExactlyAtRearEdge_True()
=> Assert.IsTrue(EnemyBody.BodyPassed(MinX, MaxX, 2f, 1f)); // 后缘恰好等于目标 = 已越过
[Test]
public void BodyPassed_Right_FullyPassed_True()
=> Assert.IsTrue(EnemyBody.BodyPassed(MinX, MaxX, 1f, 1f));
// ── BodyPassed:向左 ─────────────────────────────────────────────
[Test]
public void BodyPassed_Left_NotReached_False()
=> Assert.IsFalse(EnemyBody.BodyPassed(MinX, MaxX, 1f, -1f)); // 目标在身体左侧外
[Test]
public void BodyPassed_Left_OverlappingTarget_False()
=> Assert.IsFalse(EnemyBody.BodyPassed(MinX, MaxX, 3f, -1f));
[Test]
public void BodyPassed_Left_ExactlyAtRearEdge_True()
=> Assert.IsTrue(EnemyBody.BodyPassed(MinX, MaxX, 4f, -1f)); // 后缘(max)恰好等于目标
[Test]
public void BodyPassed_Left_FullyPassed_True()
=> Assert.IsTrue(EnemyBody.BodyPassed(MinX, MaxX, 5f, -1f));
}
}