diff --git a/python/tests/test_algorithm.py b/python/tests/test_algorithm.py index 1d0bd4a..c45749e 100644 --- a/python/tests/test_algorithm.py +++ b/python/tests/test_algorithm.py @@ -574,6 +574,60 @@ class TestVerificationFail(unittest.TestCase): verify_optimum(ctx) +class TestValueRange(unittest.TestCase): + """Test graphs that force big values for dual variables or edge slack.""" + + def test_big_blossom_dual(self): + """Force modified blossom dual close to 2*maxweight.""" + # + # [3] + # / \ + # W-4/ \W + # 7 / \ + # [1]-----[2]-----[4] + # | W-4 + # 5| + # | 1 + # [5]-----[6] + # + w = 100000 + pairs = mwm([(1,2,7), (2,3,w-4), (2,4,w-4), (2,5,5), (3,4,w), (5,6,1)]) + self.assertEqual(pairs, [(1,2), (3,4), (5,6)]) + + def test_negative_blossom_dual(self): + """Force modified blossom dual close to -maxweight.""" + # + # [3] + # / \ + # 5/ \7 + # 1 / \ + # [1]-----[2]-----[4] + # | 5 + # 1| + # | W + # [5]-----[6] + # + w = 100000 + pairs = mwm([(1,2,1), (2,3,5), (2,4,5), (2,5,1), (3,4,7), (5,6,w)]) + self.assertEqual(pairs, [(1,2), (3,4), (5,6)]) + + def test_big_edge_slack(self): + """Force modified edge slack close to 3*maxweight.""" + # + # 6 W W-2 5 + # [1]-----[2]-----[3]-----[4]-----[5] + # | | + # |1 |1 + # | | + # [6]-----[7]-----[8]-----[9]-----[10] + # 6 W W-2 5 + # + w = 100000 + pairs = mwm([(1,2,6), (1,6,1), (2,3,w), (3,4,w-2), (3,8,1), (4,5,5), + (6,7,6), (7,8,w), (8,9,w-2), (9,10,5)]) + self.assertEqual(pairs, [(1,6), (2,3), (4,5), (7,8), (9,10)]) + + if __name__ == "__main__": unittest.main()