"""Tests for the multi-model reconciliation in judge_screenshot.combine().""" import os import sys _TOOLS = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, _TOOLS) for _sub in ("review", "gen", "unreal", "blender", "input"): sys.path.insert(0, os.path.join(_TOOLS, _sub)) import unittest from judge_screenshot import combine class CombineTests(unittest.TestCase): def test_agreement_takes_the_verdict_and_mean_confidence(self): result = combine([ {"model": "a", "verdict": "yes", "confidence": 0.8, "reason": "ok"}, {"model": "b", "verdict": "yes", "confidence": 0.6, "reason": "fine"}, ]) self.assertEqual(result["verdict"], "yes") self.assertAlmostEqual(result["confidence"], 0.7) def test_disagreement_becomes_uncertain_and_keeps_both_reasons(self): result = combine([ {"model": "a", "verdict": "yes", "confidence": 0.9, "reason": "looks right"}, {"model": "b", "verdict": "no", "confidence": 0.4, "reason": "missing banner"}, ]) self.assertEqual(result["verdict"], "uncertain") self.assertAlmostEqual(result["confidence"], 0.4) self.assertIn("a=yes", result["reason"]) self.assertIn("b=no", result["reason"]) def test_unknown_verdicts_are_ignored(self): result = combine([ {"model": "a", "verdict": "no", "confidence": 0.5, "reason": "x"}, {"model": "b", "verdict": "garbage", "confidence": 0.9, "reason": "y"}, ]) self.assertEqual(result["verdict"], "no") def test_no_usable_verdicts(self): result = combine([{"model": "a", "verdict": "garbage"}]) self.assertEqual(result["verdict"], "unknown") if __name__ == "__main__": unittest.main()