"""Fan-out contract tests. Author: Sandeep Belgavi.""" import threading import time import unittest from pattern_05 import collect class ParallelTests(unittest.TestCase): def test_disagreement(self): self.assertEqual(collect({"a": lambda: "normal", "b": lambda: "degraded"})["status"], "conflict") def test_agreement(self): self.assertEqual(collect({"a": lambda: "normal"})["status"], "consistent") def test_error_retained(self): def fail(): raise RuntimeError() self.assertEqual(collect({"a": fail})["failures"], ["a"]) def test_invalid_output(self): self.assertEqual(collect({"a": lambda: "fixed"})["status"], "incomplete") def test_no_empty_success(self): with self.assertRaises(ValueError): collect({}) def test_deterministic_order(self): self.assertEqual(list(collect({"z": lambda: "normal", "a": lambda: "normal"})["results"]), ["a", "z"]) def test_worker_limit(self): active = peak = 0 lock = threading.Lock() def work(): nonlocal active, peak with lock: active += 1; peak = max(peak, active) time.sleep(.01) with lock: active -= 1 return "normal" collect({str(i): work for i in range(6)}, limit=2) self.assertLessEqual(peak, 2) self.assertEqual(active, 0) def test_invalid_limit(self): with self.assertRaises(ValueError): collect({"a": lambda: "normal"}, True) if __name__ == "__main__": unittest.main()