def test_cycle_that_doesnt_involve_start(self): self.assertIsNone( validation.find_cycle('A', { 'A': ['B'], 'B': ['C'], 'C': ['B'], }))
def test_longer_cycle(self): self.assertEqual( validation.find_cycle('A', { 'A': ['B'], 'B': ['C'], 'C': ['A'], }), ['A', 'B', 'C', 'A'])
def test_no_cycles(self): self.assertIsNone( validation.find_cycle('A', { 'A': ['B', 'C'], 'B': ['C'], 'C': [], }))
def test_diamon_with_cycle(self): self.assertEqual( validation.find_cycle('A', { 'A': ['B1', 'B2'], 'B1': ['C'], 'B2': ['C'], 'C': ['A'], }), ['A', 'B1', 'C', 'A'])
def test_many_cycles_but_only_one_has_start(self): self.assertEqual( validation.find_cycle('A', { 'A': ['B'], 'B': ['C'], 'C': ['B', 'D'], 'D': ['B', 'C', 'A'], }), ['A', 'B', 'C', 'D', 'A'])
def test_trivial_cycle(self): self.assertEqual(validation.find_cycle('A', { 'A': ['A'], }), ['A', 'A'])