feat(server-go): 疫病溯源三级模型与接口(#21,一级自动溯源/二级清单/三级备注)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package service
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestEnvironmentBacktrack(t *testing.T) {
|
||||
// 高湿 + 温度突变 → 双触发
|
||||
samples := []EnvSample{
|
||||
{Temp: ptrF(28), Humidity: ptrF(85)},
|
||||
{Temp: ptrF(32), Humidity: ptrF(90)},
|
||||
}
|
||||
r := EnvironmentBacktrack(samples, 80)
|
||||
if !r.HighHumidity || !r.TempSwing {
|
||||
t.Errorf("应同时检出高湿与温度突变: %+v", r)
|
||||
}
|
||||
// 正常环境
|
||||
normal := []EnvSample{{Temp: ptrF(25), Humidity: ptrF(60)}}
|
||||
r2 := EnvironmentBacktrack(normal, 80)
|
||||
if r2.HighHumidity || r2.TempSwing || len(r2.Summary) == 0 {
|
||||
t.Errorf("正常环境不应触发: %+v", r2)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHistoryAssociation(t *testing.T) {
|
||||
past := []PastEvent{{Disease: "白僵病", DaysAgo: 30}}
|
||||
if !HistoryAssociation(past, "白僵病") {
|
||||
t.Error("同病种历史发病应判连发性")
|
||||
}
|
||||
if HistoryAssociation(past, "软化病") {
|
||||
t.Error("不同病种不应判连发性")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTransmissionInference(t *testing.T) {
|
||||
if mode, _ := TransmissionInference("白僵病"); mode != "接触传染/气流扩散" {
|
||||
t.Errorf("白僵病传播方式 = %s", mode)
|
||||
}
|
||||
if mode, _ := TransmissionInference("微粒子病"); mode != "食下传染+胚种传染" {
|
||||
t.Errorf("微粒子病传播方式 = %s", mode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDiseaseChecklist(t *testing.T) {
|
||||
if len(DiseaseChecklist("核型多角体病")) < 3 {
|
||||
t.Error("核型多角体病排查清单应 ≥3 项")
|
||||
}
|
||||
if len(DiseaseChecklist("未知病种")) != 0 {
|
||||
t.Error("未知病种应返回空清单")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnalyzeChecklist(t *testing.T) {
|
||||
items := []ChecklistAnswer{
|
||||
{Key: "disinfect", Label: "上批次消毒是否彻底", Answer: "yes", InternalBias: true},
|
||||
{Key: "tray_share", Label: "蚕具是否跨批次共用", Answer: "yes", InternalBias: true},
|
||||
{Key: "mulberry", Label: "桑叶来源是否变更", Answer: "no", InternalBias: false},
|
||||
}
|
||||
origin, conf, conclusion := AnalyzeChecklist(items)
|
||||
if origin != "internal" {
|
||||
t.Errorf("内源倾向答案应判 internal,实际 %s(结论 %s)", origin, conclusion)
|
||||
}
|
||||
if conf <= 0.5 {
|
||||
t.Errorf("置信度应 >0.5,实际 %.2f", conf)
|
||||
}
|
||||
}
|
||||
|
||||
func ptrF(v float64) *float64 { return &v }
|
||||
Reference in New Issue
Block a user