using NUnit.Framework; using BaseGames.Enemies; namespace BaseGames.Tests.EditMode.Enemies { /// /// EnemyBody 方向相关纯函数测试(无场景依赖)。 /// 这三个函数的左右符号最易写反,故对两个方向与边界相等情形都做断言。 /// 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)); } }