"""Tests for the multi-model reconciliation in judge_screenshot.combine().""" 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()