feat: 修复大粪扫描频率

This commit is contained in:
Horldsence
2026-09-11 09:50:56 +08:00
parent bd479b6d9d
commit f3dfa9c2a1
81 changed files with 40138 additions and 3478 deletions
+16 -11
View File
@@ -52,16 +52,17 @@ class LoopAcceptanceTests(unittest.TestCase):
summary, report, simulator = _run_scene(sources)
truth = sorted(s.channel for s in sources)
self.assertTrue(summary["completed"])
self.assertEqual(summary["stop_reason"], "virtual_time_cap")
self.assertEqual(summary["stop_reason"], "all_resolved")
self.assertEqual(sorted(summary["cleared_channels"]), truth)
self.assertEqual(len(summary["absent_channels"]), 10)
self.assertEqual(summary["unresolved_channels"], [])
self.assertIsNotNone(summary["accounted_virtual_time_s"],
"找全证明时刻必须留档")
self.assertLessEqual(summary["accounted_virtual_time_s"],
summary["virtual_time_s"])
self.assertGreater(summary["measures"], 49 * 20,
"找全后应继续复扫未清除频道(扫到限时为止)")
# 虚拟时间即成绩口径:找全证明后立即退出,不再复扫。
self.assertAlmostEqual(summary["accounted_virtual_time_s"],
summary["virtual_time_s"], delta=1.0)
self.assertLessEqual(summary["measures"], 49 * 20 + 60,
"找全后不应继续复扫")
self.assertEqual(summary["anomalies"], [], "守恒性或证书不应被打破")
self.assertEqual(report["mismatches"], [])
self.assertEqual(summary["virtual_recompute_mismatches"], 0)
@@ -83,11 +84,11 @@ class LoopAcceptanceTests(unittest.TestCase):
def test_empty_field_proves_absence_everywhere(self):
summary, report, _ = _run_scene([])
self.assertTrue(summary["completed"])
self.assertEqual(summary["stop_reason"], "virtual_time_cap")
self.assertEqual(summary["stop_reason"], "all_resolved")
self.assertEqual(summary["cleared_channels"], [])
self.assertEqual(summary["absent_channels"], list(range(1, 21)))
self.assertGreaterEqual(summary["measures"], 49 * 20,
"缺席证明要求全网格逐频道检测")
self.assertLessEqual(summary["measures"], 49 * 20 + 60,
"缺席证明要求全网格逐频道检测,找全后即停")
self.assertIsNotNone(summary["accounted_virtual_time_s"])
self.assertEqual(report["mismatches"], [])
@@ -177,9 +178,11 @@ class PersistentSearchTests(unittest.TestCase):
self.assertLessEqual(summary["measures"], 49 * 20 + 60)
def test_persistence_resweeps_only_uncleared_channels(self):
"""复扫只测未清除频道:已清除频道不再消耗检测。"""
"""复扫只测未清除频道:已清除频道不再消耗检测(显式开启保险模式)。"""
config = replace(CONFIG, search=replace(CONFIG.search,
persistent_search=True))
sources = random_omni_scene(seed=5, count=2)
summary, _, _ = _run_scene(sources)
summary, _, _ = _run_scene(sources, config=config)
cleared = set(summary["cleared_channels"])
resweep_channels = {step["channel"] for step in summary["steps"]
if step["index"] > 0
@@ -192,8 +195,10 @@ class PersistentSearchTests(unittest.TestCase):
def test_virtual_budget_stops_before_simulator_cap(self):
"""计划层在虚拟安全余量处停下,不触发模拟器 accepted=false 兜底。"""
config = replace(SMALL_CAP, search=replace(SMALL_CAP.search,
persistent_search=True))
sources = random_omni_scene(seed=5, count=2)
summary, report, _ = _run_scene(sources)
summary, report, _ = _run_scene(sources, config=config)
self.assertEqual(summary["stop_reason"], "virtual_time_cap")
field = SMALL_CAP.field
self.assertLessEqual(summary["virtual_time_s"],