feat: 修复大粪扫描频率
This commit is contained in:
@@ -94,9 +94,11 @@ class BayesLoopAcceptanceTests(unittest.TestCase):
|
||||
self.assertEqual(report["mismatches"], [])
|
||||
|
||||
def test_persistent_phase_resweeps_until_cap(self):
|
||||
"""找全后持续复扫到虚拟安全余量 [用户决策 2026-09-11]。"""
|
||||
"""复扫保险模式(--persistent):找全后复扫到虚拟安全余量。"""
|
||||
config = replace(SMALL_CAP, search=replace(SMALL_CAP.search,
|
||||
persistent_search=True))
|
||||
sources = random_omni_scene(seed=5, count=10, config=CONFIG)
|
||||
summary, _report, _simulator = _run_scene(sources, config=SMALL_CAP)
|
||||
summary, _report, _simulator = _run_scene(sources, config=config)
|
||||
truth = sorted(s.channel for s in sources)
|
||||
self.assertTrue(summary["completed"])
|
||||
self.assertEqual(summary["stop_reason"], "virtual_time_cap")
|
||||
|
||||
+16
-11
@@ -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"],
|
||||
|
||||
@@ -127,10 +127,12 @@ class MixedLoopAcceptanceTests(unittest.TestCase):
|
||||
summary, report, simulator, _, loop = _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(summary["unresolved_channels"], [])
|
||||
self.assertIsNotNone(summary["accounted_virtual_time_s"])
|
||||
self.assertAlmostEqual(summary["accounted_virtual_time_s"],
|
||||
summary["virtual_time_s"], delta=1.0)
|
||||
self.assertEqual(summary["anomalies"], [], "守恒性或证书不应被打破")
|
||||
self.assertEqual(report["mismatches"], [])
|
||||
self.assertEqual(summary["virtual_recompute_mismatches"], 0)
|
||||
|
||||
Reference in New Issue
Block a user