test: 修复 MunitionEntity/MultiLane 测试 + Jet/Piston 打印到桌面
- 删除 GroundBased_ArrivesAtTargetPosition(旧下行逻辑) - 新增 ArrivesNearTarget_WithInterpolation(真实场景0.4s步长) - MultiLane 改断言为 ≥27发+多个Z值 - Jet/Piston 测试结果写入桌面txt
This commit is contained in:
parent
43426ab5fc
commit
3aac0060e7
@ -137,7 +137,12 @@ namespace CounterDrone.Core.Tests
|
||||
_output.WriteLine($" FireTime={e.FireTime:F2}s Y={e.TargetY:F0} PlatIdx={e.PlatformIndex}");
|
||||
|
||||
var dump = string.Join("\n", events.Select(e => $" FireTime={e.FireTime:F2}s Y={e.TargetY:F0} PlatIdx={e.PlatformIndex}"));
|
||||
Assert.True(false, $"=== 3无人机 3车道 Planner输出 ===\n总弹药: {events.Count}发, 跨度: {last-first:F2}s\n{dump}");
|
||||
// 3 车道各需 9 发 × 3 = 27 发
|
||||
Assert.True(events.Count >= 27, $"应≥27发, 实际{events.Count}\n{dump}");
|
||||
Assert.True(last - first > 0, $"跨度>0\n{dump}");
|
||||
// 验证每个车道有独立的 TargetZ
|
||||
var zs = events.Select(e => e.TargetZ).Distinct().ToList();
|
||||
Assert.True(zs.Count >= 2, $"应有至少2个不同Z值(distinct lanes)\n{dump}");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@ -263,6 +263,7 @@ namespace CounterDrone.Core.Tests
|
||||
var clouds = eng.Events.Count(e => e.Type == SimEventType.CloudGenerated);
|
||||
|
||||
var msg = $"Jet: launched={launched} clouds={clouds} status={drone.Status} hp={drone.Hp:F2}";
|
||||
System.IO.File.WriteAllText(@"C:\Users\Tellme\Desktop\test_jet.txt", msg);
|
||||
VerifyAndExportReport(eng, drone);
|
||||
Assert.True(launched > 0, msg);
|
||||
Assert.Equal(DroneStatus.Destroyed, drone.Status);
|
||||
|
||||
@ -21,29 +21,24 @@ namespace CounterDrone.Core.Tests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GroundBased_ArrivesAtTargetPosition()
|
||||
public void GroundBased_ArrivesNearTarget_WithInterpolation()
|
||||
{
|
||||
// 验证炮弹到达时,水平位置接近目标
|
||||
var m = new MunitionEntity("m1", PlatformType.GroundBased,
|
||||
// 大 tick 步长也应到达目标附近
|
||||
var m = new MunitionEntity("m2", PlatformType.GroundBased,
|
||||
AerosolType.InertGas,
|
||||
startX: 0, startY: 0, startZ: 0,
|
||||
targetX: 5000, targetY: 300, targetZ: 0,
|
||||
muzzleVelocity: 500f, releaseAltitude: 300f, launchTime: 0f);
|
||||
startX: 5000, startY: 0, startZ: 50,
|
||||
targetX: 10000, targetY: 500, targetZ: 0,
|
||||
muzzleVelocity: 800f, releaseAltitude: 500f, launchTime: 143.69f);
|
||||
|
||||
for (int i = 0; i < 500; i++)
|
||||
float time = Kinematics.ParabolicShellTime(5000.25f, 500f, 800f);
|
||||
for (float t = 0; t < time + 1f; t += 0.4f)
|
||||
{
|
||||
m.Update(0.05f);
|
||||
m.Update(0.4f);
|
||||
if (m.HasArrived) break;
|
||||
}
|
||||
|
||||
Assert.True(m.HasArrived, "炮弹应到达");
|
||||
// 到达释放高度
|
||||
Assert.True(System.Math.Abs(m.PosY - 300f) < 5f, $"PosY={m.PosY:F1} 应≈300");
|
||||
// 水平位置接近目标
|
||||
var dist = System.Math.Sqrt(
|
||||
(m.PosX - m.TargetX) * (m.PosX - m.TargetX) +
|
||||
(m.PosZ - m.TargetZ) * (m.PosZ - m.TargetZ));
|
||||
Assert.True(dist < 1000f, $"到达点距目标 {dist:F0}m,应<1000m");
|
||||
Assert.True(m.HasArrived, "应到达");
|
||||
Assert.Equal(500f, m.PosY, 5f);
|
||||
Assert.True(System.Math.Abs(m.PosX - 10000) < 200f, $"X={m.PosX:F1} 应≈10000");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user