107 lines
3.5 KiB
C++
107 lines
3.5 KiB
C++
#include <gtest/gtest.h>
|
||
#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));
|
||
}
|