CollisionAvoidance/tests/CollisionDetectorTest.cpp

107 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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));
}