CounterDroneBackend/test/unit/CounterDrone.Core.Tests/ControlZoneEntityTests.cs

44 lines
1.6 KiB
C#

using CounterDrone.Core.Simulation;
using Xunit;
namespace CounterDrone.Core.Tests
{
public class ControlZoneEntityTests
{
private const string TestZoneJson =
"[{\"X\":1200,\"Y\":0,\"Z\":-200},{\"X\":1800,\"Y\":0,\"Z\":-200},{\"X\":1800,\"Y\":0,\"Z\":200},{\"X\":1200,\"Y\":0,\"Z\":200}]";
[Fact]
public void ContainsPoint_Center_ReturnsTrue()
{
var zone = new ControlZoneEntity("z1", "test", TestZoneJson, 0, 1000);
// 手动检查顶点数
Assert.Equal(4, zone.Vertices.Count);
Assert.Equal(1200f, zone.Vertices[0].X, 1);
Assert.Equal(-200f, zone.Vertices[0].Z, 1);
Assert.True(zone.ContainsPoint(1500, 300, 0), "点(1500,300,0)应在矩形内");
}
[Fact]
public void ContainsPoint_OutsideX_ReturnsFalse()
{
var zone = new ControlZoneEntity("z1", "test", TestZoneJson, 0, 1000);
Assert.False(zone.ContainsPoint(2000, 300, 0), "点(2000,300,0)应在矩形外");
}
[Fact]
public void ContainsPoint_OutsideZ_ReturnsFalse()
{
var zone = new ControlZoneEntity("z1", "test", TestZoneJson, 0, 1000);
Assert.False(zone.ContainsPoint(1500, 300, 500), "点(1500,300,500) Z超出");
}
[Fact]
public void ContainsPoint_OutsideAltitude_ReturnsFalse()
{
var zone = new ControlZoneEntity("z1", "test", TestZoneJson, 0, 1000);
Assert.False(zone.ContainsPoint(1500, 1200, 0), "海拔 1200 超出上限");
}
}
}