"""Đo khả năng phát hiện lỗi của hai bộ ca kiểm thử sĩ số nguyên.""" MUTANTS = { "M1 loại nhầm 15": lambda x: 15 < x <= 45, "M2 loại nhầm 45": lambda x: 15 <= x < 45, "M3 nhận nhầm 46": lambda x: 15 <= x <= 46, "M4 bỏ giới hạn trên": lambda x: x >= 15, "M5 tương đương trên miền số nguyên": lambda x: x in range(15, 46), } EQUIVALENT = {"M5 tương đương trên miền số nguyên"} def report(cases): killed = {name: [x for x, expected in cases if implementation(x) != expected] for name, implementation in MUTANTS.items()} numerator = sum(bool(killed[name]) for name in MUTANTS.keys() - EQUIVALENT) return numerator, len(MUTANTS) - len(EQUIVALENT), killed if __name__ == "__main__": central = [(30, True), (50, False)] boundary = [(14, False), (15, True), (45, True), (46, False)] for label, cases in [("Giữa miền", central), ("Qua hai biên", boundary)]: hit, total, detail = report(cases) print(label, f"{hit}/{total}", detail) assert report(central)[:2] == (1, 4) assert report(boundary)[:2] == (4, 4)