From efdd1e24c76fa333b4febfefeeb70e4679c75177 Mon Sep 17 00:00:00 2001 From: linianlin Date: Fri, 24 Apr 2026 14:51:07 +0800 Subject: [PATCH] =?UTF-8?q?AI=20=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test1/test_alert_manager.cpp | 118 +++++++++++++++++++++++++++++ test1/test_altitude_calculator.cpp | 56 ++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 test1/test_alert_manager.cpp create mode 100644 test1/test_altitude_calculator.cpp diff --git a/test1/test_alert_manager.cpp b/test1/test_alert_manager.cpp new file mode 100644 index 0000000..0a0bef2 --- /dev/null +++ b/test1/test_alert_manager.cpp @@ -0,0 +1,118 @@ +#include +#include +#include "alert_manager.hpp" + +using namespace std; + +class AlertManagerTest : public ::testing::Test { +protected: + AlertManager alertManager; + + void SetUp() override { + alertManager.initialize(); + } +}; + +// 测试 resetAlert 正常输入 +TEST_F(AlertManagerTest, testResetAlertNormalInput) { + // 触发一个高度上限预警 + alertManager.checkAltitudeAlert(150.0f, 100); + EXPECT_TRUE(alertManager.hasActiveAlerts()); + + // 重置该预警 + alertManager.resetAlert(AlertType::ALTITUDE_UPPER); + + // 验证预警状态已恢复为 INACTIVE + auto it = alertManager.getAlertHistory().end(); + if (alertManager.getAlertHistory().size() > 0) { + it = alertManager.getAlertHistory().begin(); + } + EXPECT_EQ(it->status, AlertStatus::INACTIVE); +} + +// 测试 resetAlert 边界值:重置 NONE 类型 +TEST_F(AlertManagerTest, testResetAlertBoundaryValueNoneType) { + // 尝试重置 NONE 类型,应无副作用 + alertManager.resetAlert(AlertType::NONE); + EXPECT_FALSE(alertManager.hasActiveAlerts()); +} + +// 测试 resetAllAlerts 正常输入 +TEST_F(AlertManagerTest, testResetAllAlertsNormalInput) { + // 触发多个预警 + alertManager.checkAltitudeAlert(150.0f, 100); + alertManager.triggerLowBattery(200, 15.0f); + EXPECT_TRUE(alertManager.hasActiveAlerts()); + + // 重置所有预警 + alertManager.resetAllAlerts(); + + // 验证所有预警均被清除 + EXPECT_FALSE(alertManager.hasActiveAlerts()); + EXPECT_FALSE(alertManager.hasUnacknowledgedAlerts()); +} + +// 测试 resetAllAlerts 特殊场景:无预警时调用 +TEST_F(AlertManagerTest, testResetAllAlertsSpecialCaseNoAlerts) { + // 确保初始状态下无预警 + EXPECT_FALSE(alertManager.hasActiveAlerts()); + EXPECT_FALSE(alertManager.hasUnacknowledgedAlerts()); + + // 调用重置函数 + alertManager.resetAllAlerts(); + + // 验证状态仍为无预警 + EXPECT_FALSE(alertManager.hasActiveAlerts()); + EXPECT_FALSE(alertManager.hasUnacknowledgedAlerts()); +} + +// 测试 hasActiveAlerts 正常输入:存在活动预警 +TEST_F(AlertManagerTest, testHasActiveAlertsNormalInputWithActiveAlert) { + // 触发一个活动预警 + alertManager.checkAltitudeAlert(150.0f, 100); + EXPECT_TRUE(alertManager.hasActiveAlerts()); +} + +// 测试 hasActiveAlerts 正常输入:无活动预警 +TEST_F(AlertManagerTest, testHasActiveAlertsNormalInputWithoutActiveAlert) { + // 初始状态无预警 + EXPECT_FALSE(alertManager.hasActiveAlerts()); +} + +// 测试 hasActiveAlerts 边界值:确认后预警应视为活动 +TEST_F(AlertManagerTest, testHasActiveAlertsBoundaryValueAcknowledgedAlert) { + // 触发并确认预警 + alertManager.checkAltitudeAlert(150.0f, 100); + alertManager.acknowledgeAlert(AlertType::ALTITUDE_UPPER, 200); + + // 确认后状态为 ACKNOWLEDGED,仍属于活动状态 + EXPECT_TRUE(alertManager.hasActiveAlerts()); +} + +// 测试 hasUnacknowledgedAlerts 正常输入:存在未确认预警 +TEST_F(AlertManagerTest, testHasUnacknowledgedAlertsNormalInputWithUnacknowledgedAlert) { + // 触发预警但未确认 + alertManager.checkAltitudeAlert(150.0f, 100); + EXPECT_TRUE(alertManager.hasUnacknowledgedAlerts()); +} + +// 测试 hasUnacknowledgedAlerts 正常输入:已确认预警不应计入 +TEST_F(AlertManagerTest, testHasUnacknowledgedAlertsNormalInputAfterAcknowledgment) { + // 触发并确认预警 + alertManager.checkAltitudeAlert(150.0f, 100); + alertManager.acknowledgeAlert(AlertType::ALTITUDE_UPPER, 200); + + // 状态变为 ACKNOWLEDGED,不再算作未确认 + EXPECT_FALSE(alertManager.hasUnacknowledgedAlerts()); +} + +// 测试 hasUnacknowledgedAlerts 特殊场景:仅 RESOLVED 预警 +TEST_F(AlertManagerTest, testHasUnacknowledgedAlertsSpecialCaseResolvedOnly) { + // 手动设置一个已解决的预警 + AlertInfo info(AlertType::LOW_BATTERY); + info.status = AlertStatus::RESOLVED; + info.trigger_time = 100; + alertManager.alerts_[AlertType::LOW_BATTERY] = info; + + EXPECT_FALSE(alertManager.hasUnacknowledgedAlerts()); +} \ No newline at end of file diff --git a/test1/test_altitude_calculator.cpp b/test1/test_altitude_calculator.cpp new file mode 100644 index 0000000..95a7178 --- /dev/null +++ b/test1/test_altitude_calculator.cpp @@ -0,0 +1,56 @@ +#include +#include "altitude_calculator.hpp" + +using namespace std; + +namespace { + +// 测试用例:metersToFeet 正常输入测试 +TEST(AltitudeCalculatorTest, testMetersToFeetNormalInput) { + EXPECT_FLOAT_EQ(AltitudeCalculator::metersToFeet(1.0f), 3.28084f); + EXPECT_FLOAT_EQ(AltitudeCalculator::metersToFeet(0.0f), 0.0f); + EXPECT_FLOAT_EQ(AltitudeCalculator::metersToFeet(10.0f), 32.8084f); +} + +// 测试用例:metersToFeet 边界值测试 +TEST(AltitudeCalculatorTest, testMetersToFeetBoundaryValues) { + EXPECT_FLOAT_EQ(AltitudeCalculator::metersToFeet(-1.0f), -3.28084f); + EXPECT_FLOAT_EQ(AltitudeCalculator::metersToFeet(1e6f), 3280840.0f); +} + +// 测试用例:feetToMeters 正常输入测试 +TEST(AltitudeCalculatorTest, testFeetToMetersNormalInput) { + EXPECT_FLOAT_EQ(AltitudeCalculator::feetToMeters(3.28084f), 1.0f); + EXPECT_FLOAT_EQ(AltitudeCalculator::feetToMeters(0.0f), 0.0f); + EXPECT_FLOAT_EQ(AltitudeCalculator::feetToMeters(32.8084f), 10.0f); +} + +// 测试用例:feetToMeters 边界值测试 +TEST(AltitudeCalculatorTest, testFeetToMetersBoundaryValues) { + EXPECT_FLOAT_EQ(AltitudeCalculator::feetToMeters(-3.28084f), -1.0f); + EXPECT_FLOAT_EQ(AltitudeCalculator::feetToMeters(1e6f), 304800.0f); +} + +// 测试用例:isValidPressure 正常输入测试 +TEST(AltitudeCalculatorTest, testIsValidPressureNormalInput) { + EXPECT_TRUE(AltitudeCalculator::isValidPressure(500.0f)); + EXPECT_TRUE(AltitudeCalculator::isValidPressure(1100.0f)); + EXPECT_TRUE(AltitudeCalculator::isValidPressure(1013.25f)); +} + +// 测试用例:isValidPressure 边界值测试 +TEST(AltitudeCalculatorTest, testIsValidPressureBoundaryValues) { + EXPECT_TRUE(AltitudeCalculator::isValidPressure(500.0f)); + EXPECT_TRUE(AltitudeCalculator::isValidPressure(1100.0f)); + EXPECT_FALSE(AltitudeCalculator::isValidPressure(499.9f)); + EXPECT_FALSE(AltitudeCalculator::isValidPressure(1100.1f)); +} + +// 测试用例:isValidPressure 异常输入测试 +TEST(AltitudeCalculatorTest, testIsValidPressureInvalidInput) { + EXPECT_FALSE(AltitudeCalculator::isValidPressure(-100.0f)); + EXPECT_FALSE(AltitudeCalculator::isValidPressure(INFINITY)); + EXPECT_FALSE(AltitudeCalculator::isValidPressure(NAN)); +} + +} // namespace