ModelTranslator: QR tolerance soft-gate + precollapse target policy

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ud18010
2026-07-23 14:58:25 +08:00
co-authored by Claude Opus 4.8
parent eb92ecacfa
commit bb6f32b1c1
2 changed files with 47 additions and 5 deletions
@@ -141,5 +141,38 @@ class TestTopologyAcceptable(unittest.TestCase):
self.assertTrue(qb.topology_acceptable(10, 2, 8, 1))
class TestTopologyTolerance(unittest.TestCase):
def test_tol_allows_small_increase(self):
# 封闭输入 + QR 多出 3 开边,容忍 12 内 -> 接受
self.assertTrue(qb.topology_acceptable(0, 0, 3, 0, tol=12))
def test_tol_rejects_large_increase(self):
self.assertFalse(qb.topology_acceptable(0, 0, 13, 0, tol=12))
def test_tol_applies_to_nonmanifold(self):
self.assertTrue(qb.topology_acceptable(0, 0, 0, 12, tol=12))
self.assertFalse(qb.topology_acceptable(0, 0, 0, 13, tol=12))
def test_default_tol_zero_strict(self):
# 默认 tol=0:现有严格语义不变
self.assertFalse(qb.topology_acceptable(0, 0, 1, 0))
self.assertTrue(qb.topology_acceptable(0, 0, 0, 0))
class TestPrecollapseTarget(unittest.TestCase):
def test_above_cap_returns_cap(self):
self.assertEqual(qb.precollapse_target(1000000, 50000), 50000)
def test_below_cap_returns_none(self):
self.assertIsNone(qb.precollapse_target(40000, 50000))
def test_at_cap_returns_none(self):
self.assertIsNone(qb.precollapse_target(50000, 50000))
def test_default_cap(self):
self.assertEqual(qb.precollapse_target(60000), qb.QR_INPUT_CAP)
self.assertIsNone(qb.precollapse_target(40000))
if __name__ == "__main__":
unittest.main()