74 lines
2.9 KiB
C#
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));
|
|
}
|
|
}
|