def test_cyclic_different_start_number(self): edges = [(1, 2), (2, 1)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_cyclic_two_graphs(self): edges = [(0, 1), (2, 3), (3, 2)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_cyclic_second(self): edges = [(0, 1), (0, 2), (2, 0)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_not_cyclic_two_routes(self): edges = [(0, 1), (0, 2), (1, 2)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), False)
def test_not_cyclic(self): edges = [(0, 1)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), False)
def test_cyclic_simple(self): edges = [(0, 1), (1, 0)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_failing_example(self): edges = [(45, 16), (54, 29), (12, 41), (36, 13), (9, 31), (49, 52), (46, 53), (22, 4), (8, 11), (35, 19), (11, 54), (22, 47), (30, 37), (42, 53), (44, 47), (54, 28), (4, 47), (59, 19), (29, 35), (32, 39), (5, 23), (32, 51), (17, 55), (57, 25), (7, 31), (46, 18), (26, 8), (6, 57), (45, 50), (51, 30), (37, 47), (60, 43), (35, 59), (1, 4)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), False)
def test_loop_non_zero_index(self): edges = [(1, 2), (2, 1)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_split(self): edges = [(0, 1), (0, 2), (1, 3), (2, 3)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), False)
def test_loop_rh_branch(self): edges = [(0, 1), (0, 2), (2, 2)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_self_loop(self): edges = [(0, 1), (0, 0)] graph = initialise_graph(edges) self.assertEqual(is_cyclic(graph), True)
def test_cycle(self): num_nodes = 3 edges = [(0, 1), (1, 2), (2, 0)] graph = initialise_graph(edges) self.assertEqual(detect_cycle(graph, num_nodes), True)
def test_example_1(self): N = 5 edges = [(0, 1), (0, 2), (0, 3), (2, 4)] graph = initialise_graph(edges) self.assertEqual(dfs(graph, N), [0, 1, 2, 4, 3])
def test_raises_on_limit(self): edges = [(i, i+1) for i in range(MAX_NUM_EDGES + 1)] graph = initialise_graph(edges) with self.assertRaises(ValueError): is_cyclic(graph)
def test_example_2(self): N = 4 edges = [(0, 1), (1, 2), (0, 3)] graph = initialise_graph(edges) self.assertEqual(dfs(graph, N), [0, 1, 2, 3])
def test_example_1(self): num_nodes = 5 edges = [(0, 1), (0, 2), (0, 3), (2, 4)] graph = initialise_graph(edges) self.assertEqual(bfs(graph, num_nodes), [0, 1, 2, 3, 4])
def test_more_nodes_than_edges(self): num_nodes = 6 edges = [(0, 1)] graph = initialise_graph(edges) self.assertEqual(bfs(graph, num_nodes), [0, 1])
def test_example_2(self): num_nodes = 3 edges = [(0, 1), (0, 2)] graph = initialise_graph(edges) self.assertEqual(bfs(graph, num_nodes), [0, 1, 2])
def test_circular_above_trunk(self): N = 2 edges = [(0, 1), (1, 2), (2, 1)] graph = initialise_graph(edges) self.assertEqual(dfs(graph, N), [0, 1, 2])
def test_circular(self): N = 2 edges = [(0, 1), (1, 0)] graph = initialise_graph(edges) self.assertEqual(dfs(graph, N), [0, 1])
def test_raises(self): N = 201 edges = [(i, i+1) for i in range(201)] graph = initialise_graph(edges) with self.assertRaises(ValueError): dfs(graph, N)
def test_circular_not_root(self): # it's a graph not a tree! num_nodes = 2 edges = [(0, 1), (1, 2), (2, 1)] graph = initialise_graph(edges) self.assertEqual(bfs(graph, num_nodes), [0, 1, 2])
def test_double_link(self): # it's a graph not a tree! num_nodes = 2 edges = [(0, 1), (0, 2), (1, 3), (2, 3)] graph = initialise_graph(edges) self.assertEqual(bfs(graph, num_nodes), [0, 1, 2, 3])