141 lines
3.9 KiB
C++
141 lines
3.9 KiB
C++
#include <cassert>
|
|
#include <iostream>
|
|
#include <string>
|
|
#include "core/event.hpp"
|
|
#include "core/task.hpp"
|
|
#include "core/template.hpp"
|
|
#include "core/plan.hpp"
|
|
#include "core/dispatch.hpp"
|
|
|
|
/// @brief 测试 EventProcessor 模块
|
|
static void TestEventProcessor() {
|
|
battlefield::EventProcessor ep;
|
|
|
|
bool ok = ep.ReceiveEvent(R"({"type":"intel","priority":7})");
|
|
assert(ok);
|
|
assert(ep.GetEventCount() == 1);
|
|
|
|
ok = ep.ReceiveEvent(R"({"type":"threat","priority":9})");
|
|
assert(ok);
|
|
assert(ep.GetEventCount() == 2);
|
|
|
|
auto pending = ep.GetPendingEvents();
|
|
assert(pending.size() == 2);
|
|
|
|
ep.SortEventsByPriority(false); // 降序
|
|
pending = ep.GetPendingEvents();
|
|
assert(pending[0].priority >= pending[1].priority);
|
|
|
|
std::cout << "[PASS] TestEventProcessor\n";
|
|
}
|
|
|
|
/// @brief 测试 TaskGenerator 模块
|
|
static void TestTaskGenerator() {
|
|
battlefield::TaskGenerator tg;
|
|
battlefield::Event evt;
|
|
evt.id = "EVT-001";
|
|
evt.priority = 8;
|
|
evt.type = battlefield::EventType::INTEL;
|
|
|
|
battlefield::TaskDraft draft = tg.CreateTaskFromEvent(evt);
|
|
assert(draft.relatedEventId == "EVT-001");
|
|
assert(draft.status == battlefield::DraftStatus::DRAFT);
|
|
|
|
auto list = tg.GetDraftList();
|
|
assert(list.size() == 1);
|
|
|
|
bool submitted = tg.SubmitDraft(draft.id, "http://engine.local");
|
|
assert(submitted);
|
|
|
|
list = tg.GetDraftList();
|
|
assert(list[0].status == battlefield::DraftStatus::SUBMITTED);
|
|
|
|
std::cout << "[PASS] TestTaskGenerator\n";
|
|
}
|
|
|
|
/// @brief 测试 TemplateManager 模块
|
|
static void TestTemplateManager() {
|
|
battlefield::TemplateManager tm;
|
|
size_t count = tm.LoadTemplates("/fake/path");
|
|
assert(count == 3);
|
|
assert(tm.GetTemplateCount() == 3);
|
|
|
|
auto list = tm.GetTemplateList();
|
|
assert(list.size() == 3);
|
|
|
|
auto selected = tm.SelectTemplate("v1.1");
|
|
assert(!selected.versionId.empty());
|
|
assert(selected.name == "Template-1");
|
|
|
|
auto recommended = tm.RecommendTemplate();
|
|
assert(!recommended.versionId.empty());
|
|
|
|
std::cout << "[PASS] TestTemplateManager\n";
|
|
}
|
|
|
|
/// @brief 测试 PlanManager 模块
|
|
static void TestPlanManager() {
|
|
battlefield::PlanManager pm;
|
|
battlefield::Plan a = pm.CreatePlan("Plan A", "First option");
|
|
battlefield::Plan b = pm.CreatePlan("Plan B", "Second option");
|
|
assert(!a.id.empty());
|
|
assert(!b.id.empty());
|
|
|
|
auto list = pm.GetPlanList();
|
|
assert(list.size() == 2);
|
|
|
|
std::string cmp = pm.ComparePlans(a.id, b.id);
|
|
assert(cmp.find("Score") != std::string::npos);
|
|
|
|
// 融合测试
|
|
battlefield::Plan merged = pm.MergePlans({a.id, b.id});
|
|
assert(merged.id.find("MERGED") != std::string::npos);
|
|
|
|
std::cout << "[PASS] TestPlanManager\n";
|
|
}
|
|
|
|
/// @brief 测试 DispatchMonitor 模块
|
|
static void TestDispatchMonitor() {
|
|
battlefield::DispatchMonitor dm;
|
|
battlefield::Plan plan;
|
|
plan.id = "PLN-TEST";
|
|
plan.name = "Test Plan";
|
|
|
|
battlefield::PlanSubTask st;
|
|
st.id = "ST-1";
|
|
st.name = "Recon";
|
|
plan.subTasks.push_back(st);
|
|
|
|
battlefield::CmdPacket cmd = dm.DispatchPlan(plan, "unit-alpha");
|
|
assert(cmd.packetId.find("CMD-") != std::string::npos);
|
|
assert(cmd.targetUnit == "unit-alpha");
|
|
|
|
auto status = dm.GetMonitorStatus();
|
|
assert(status.totalTasks == 1);
|
|
|
|
dm.AdvanceProgress(1);
|
|
status = dm.GetMonitorStatus();
|
|
assert(status.completedTasks == 1);
|
|
assert(status.progressPercent == 100.0);
|
|
|
|
std::string dash = dm.GetDashboardData();
|
|
assert(dash.find("Progress") != std::string::npos);
|
|
|
|
std::cout << "[PASS] TestDispatchMonitor\n";
|
|
}
|
|
|
|
/// @brief 主测试入口
|
|
/// @return 0 全部通过
|
|
int main() {
|
|
std::cout << "========== BattlefieldTaskPlanner 单元测试 ==========\n\n";
|
|
|
|
TestEventProcessor();
|
|
TestTaskGenerator();
|
|
TestTemplateManager();
|
|
TestPlanManager();
|
|
TestDispatchMonitor();
|
|
|
|
std::cout << "\n========== 全部测试通过 ==========\n";
|
|
return 0;
|
|
}
|