#include #include "detector/CollisionDetector.h" #include "types/BasicTypes.h" class CollisionDetectorTest : public ::testing::Test { protected: CollisionDetector detector; // 创建一个标准的航空器对象 Aircraft createAircraft(const Vector2D& pos, double altitude) { Aircraft aircraft; aircraft.id = "CES2501"; aircraft.flightNo = "CES2501"; aircraft.position = pos; aircraft.altitude = altitude; aircraft.speed = 55.0; // 标准速度 aircraft.heading = 90.0; // 向东 return aircraft; } // 创建一个标准的车辆对象 Vehicle createVehicle(const Vector2D& pos) { Vehicle vehicle; vehicle.id = "VEH001"; vehicle.vehicleNo = "VEH001"; vehicle.position = pos; vehicle.speed = 22.0; // 标准速度 vehicle.heading = 0.0; // 向北 return vehicle; } }; // 测试安全距离外的情况 TEST_F(CollisionDetectorTest, NoCollisionWhenFarApart) { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(100, 0)); // 100米距离 EXPECT_FALSE(detector.detect(aircraft, vehicle)); } // 测试水平安全距离内的情况 TEST_F(CollisionDetectorTest, CollisionWhenHorizontallyClose) { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(30, 0)); // 30米距离 EXPECT_TRUE(detector.detect(aircraft, vehicle)); } // 测试垂直安全距离的影响 TEST_F(CollisionDetectorTest, NoCollisionWhenHighAltitude) { auto aircraft = createAircraft(Vector2D(0, 0), 100.0); // 100米高度 auto vehicle = createVehicle(Vector2D(30, 0)); // 30米水平距离 EXPECT_FALSE(detector.detect(aircraft, vehicle)); } // 测试边界条件 TEST_F(CollisionDetectorTest, BoundaryConditions) { // 测试水平边界(50米) { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(49, 0)); // 应该检测到碰撞 EXPECT_TRUE(detector.detect(aircraft, vehicle)); } { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(51, 0)); // 不应该检测到碰撞 EXPECT_FALSE(detector.detect(aircraft, vehicle)); } // 测试垂直边界(50米) { auto aircraft = createAircraft(Vector2D(0, 0), 49.0); // 应该检测到碰撞 auto vehicle = createVehicle(Vector2D(30, 0)); EXPECT_TRUE(detector.detect(aircraft, vehicle)); } { auto aircraft = createAircraft(Vector2D(0, 0), 51.0); // 不应该检测到碰撞 auto vehicle = createVehicle(Vector2D(30, 0)); EXPECT_FALSE(detector.detect(aircraft, vehicle)); } } // 测试对角线距离 TEST_F(CollisionDetectorTest, DiagonalDistance) { { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(30, 30)); // 对角线距离约为42.4米 EXPECT_TRUE(detector.detect(aircraft, vehicle)); } { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(50, 50)); // 对角线距离约为70.7米 EXPECT_FALSE(detector.detect(aircraft, vehicle)); } } // 测试零距离情况 TEST_F(CollisionDetectorTest, ZeroDistance) { auto aircraft = createAircraft(Vector2D(0, 0), 5.0); auto vehicle = createVehicle(Vector2D(0, 0)); EXPECT_TRUE(detector.detect(aircraft, vehicle)); }