Ejemplo n.º 1
0
    def test_nodes_reachable_from(self):
        """
        Tests finding all nodes reachable from a single node.
        """
        # Simple situation first.
        g = DAG()
        g.add_node(1)
        g.add_node(2)
        g.add_node(3)
        g.add_edge(1, 2)
        g.add_edge(2, 3)

        self.assertEqual(len(g.nodes_reachable_from(1)), 2)
        self.assertIn(2, g.nodes_reachable_from(1))
        self.assertIn(3, g.nodes_reachable_from(1))
        self.assertEqual(len(g.nodes_reachable_from(2)), 1)
        self.assertIn(3, g.nodes_reachable_from(1))

        # No nodes reachable from the given node
        g = DAG()
        g.add_node(1)
        g.add_node(2)
        g.add_node(3)
        g.add_edge(2, 3)

        self.assertEqual(len(g.nodes_reachable_from(1)), 0)

        # More complex graph
        g = DAG()

        g.add_node(1)
        g.add_node(2)
        g.add_node(3)
        g.add_node(4)
        g.add_node(5)
        g.add_edge(1, 3)
        g.add_edge(2, 4)
        g.add_edge(2, 5)
        g.add_edge(4, 5)
        g.add_edge(5, 3)

        self.assertEqual(len(g.nodes_reachable_from(2)), 3)
        for node in range(3, 6):
            self.assertIn(node, g.nodes_reachable_from(2))
        self.assertEqual(len(g.nodes_reachable_from(1)), 1)
        self.assertIn(3, g.nodes_reachable_from(1))