diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a98331..7e32987 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,8 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.10.0) project(HeightMeasurementSystem VERSION 1.0.0 LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) # Output directories set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -12,26 +11,7 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # Include directories include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -# Main executable -add_executable(hsm_main - src/main.cpp - src/app.cpp - src/altitude_calculator.cpp - src/data_logger.cpp - src/sensor_simulator.cpp - src/alert_manager.cpp -) - -# Test executable -add_executable(hsm_test - tests/basic_test.cpp - src/altitude_calculator.cpp - src/data_logger.cpp - src/sensor_simulator.cpp - src/alert_manager.cpp -) - -# Enable testing -enable_testing() -add_test(NAME BasicTest COMMAND hsm_test) \ No newline at end of file +# Add subdirectory for tests +add_subdirectory(tests) diff --git a/CMakeLists1.txt b/CMakeLists1.txt new file mode 100644 index 0000000..5a98331 --- /dev/null +++ b/CMakeLists1.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.10) +project(HeightMeasurementSystem VERSION 1.0.0 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Output directories +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + +# Include directories +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +# Main executable +add_executable(hsm_main + src/main.cpp + src/app.cpp + src/altitude_calculator.cpp + src/data_logger.cpp + src/sensor_simulator.cpp + src/alert_manager.cpp +) + +# Test executable +add_executable(hsm_test + tests/basic_test.cpp + src/altitude_calculator.cpp + src/data_logger.cpp + src/sensor_simulator.cpp + src/alert_manager.cpp +) + +# Enable testing +enable_testing() +add_test(NAME BasicTest COMMAND hsm_test) \ No newline at end of file diff --git a/include/alert_manager.hpp b/include/alert_manager.hpp index 7ead12d..168d2e8 100644 --- a/include/alert_manager.hpp +++ b/include/alert_manager.hpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include /** * @brief 预警类型枚举 @@ -188,6 +190,14 @@ public: */ float getLowerThreshold() const { return lower_threshold_; } + /** + * @brief 获取高度阈值(上下限) + * @return pair<上限阈值, 下限阈值> + */ + std::pair getAltitudeThresholds() const { + return std::make_pair(upper_threshold_, lower_threshold_); + } + /** * @brief 检查传感器是否正常 * @return 传感器状态 @@ -196,26 +206,6 @@ public: auto it = alerts_.find(AlertType::SENSOR_FAILURE); return it == alerts_.end() || it->second.status != AlertStatus::ACTIVE; } - -private: - // 预警阈值 - float upper_threshold_; - float lower_threshold_; - - // 当前预警状态 - std::unordered_map alerts_; - - // 预警历史记录 - std::vector alert_history_; - - // 历史记录最大数量 - static const size_t MAX_HISTORY = 1000; - - /** - * @brief 添加预警到历史记录 - * @param alert 预警信息 - */ - void addToHistory(const AlertInfo& alert); /** * @brief 触发预警 @@ -246,6 +236,26 @@ private: * @return 状态名称 */ static std::string getAlertStatusName(AlertStatus status); + +private: + // 预警阈值 + float upper_threshold_; + float lower_threshold_; + + // 当前预警状态 + std::unordered_map alerts_; + + // 预警历史记录 + std::vector alert_history_; + + // 历史记录最大数量 + static const size_t MAX_HISTORY = 1000; + + /** + * @brief 添加预警到历史记录 + * @param alert 预警信息 + */ + void addToHistory(const AlertInfo& alert); }; #endif // HSM_ALERT_MANAGER_HPP \ No newline at end of file diff --git a/src/alert_manager.cpp b/src/alert_manager.cpp index 3bd8ebc..a5e9e7f 100644 --- a/src/alert_manager.cpp +++ b/src/alert_manager.cpp @@ -288,7 +288,7 @@ std::string AlertManager::getAlertStatusName(AlertStatus status) { case AlertStatus::INACTIVE: return "未激活"; case AlertStatus::ACTIVE: return "预警中"; case AlertStatus::ACKNOWLEDGED: return "已确认"; - case AlertType::RESOLVED: return "已解决"; + case AlertStatus::RESOLVED: return "已解决"; default: return "未知状态"; } } \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..4d2e498 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,30 @@ +# GoogleTest配置 +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip +) +# For Windows: Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) + +# 包含目录 +include_directories(${CMAKE_SOURCE_DIR}/src) +include_directories(${CMAKE_SOURCE_DIR}/include) + +# 启用测试 +enable_testing() + +# 添加alert_manager的单元测试 +add_executable(test_alert_manager test_alert_manager.cpp ../src/alert_manager.cpp) + +# 设置UTF-8编码支持 +if(MSVC) + target_compile_options(test_alert_manager PRIVATE /utf-8) +endif() + +target_link_libraries(test_alert_manager gtest gmock gtest_main) + +# 注册测试 +include(GoogleTest) +gtest_discover_tests(test_alert_manager) \ No newline at end of file