from unittest import TestCase
from challenges import Graph, Node, Edge
[docs]class TestNode(TestCase):
"""Test units of Node."""
[docs] def setUp(self):
self.node = Node(2)
[docs] def test_node_constructor(self):
self.assertEqual(self.node._id, 2)
[docs] def test_node_property_access(self):
self.assertEqual(self.node.id, 2)
self.node.any = 5
self.assertEqual(self.node.any, 5)
[docs] def test_add_edge_to_node(self):
tail = Node(1)
head = Node(2)
edge = Edge(tail, head)
tail.add_edge(edge)
head.add_edge(edge)
self.assertIn(edge, tail.outgoing)
self.assertIn(edge, head.incoming)
[docs] def test_antecessors(self):
n1, n3 = Node(1), Node(3)
self.node.add_edge(Edge(n1, self.node))
self.node.add_edge(Edge(n3, self.node))
self.assertIn(n1, self.node.antecessors())
self.assertIn(n3, self.node.antecessors())
[docs] def test_successors(self):
n1, n3 = Node(1), Node(3)
self.node.add_edge(Edge(self.node, n1))
self.node.add_edge(Edge(self.node, n3))
self.assertIn(n1, self.node.successors())
self.assertIn(n3, self.node.successors())
[docs]class TestEdge(TestCase):
"""Test units of Node."""
[docs] def setUp(self):
self.tail = Node(1)
self.head = Node(2)
self.edge = Edge(self.tail, self.head)
[docs] def test_edge_constructor(self):
self.assertIs(self.edge._tail, self.tail)
self.assertIs(self.edge._head, self.head)
[docs] def test_edge_property_access(self):
self.assertIs(self.edge.tail, self.tail)
self.assertIs(self.edge.head, self.head)
self.edge.any = 5
self.assertEqual(self.edge.any, 5)
[docs]class TestGraph(TestCase):
"""Test units of Graph."""
[docs] def setUp(self):
self.graph = Graph()
[docs] def test_graph_constructor(self):
self.assertIsInstance(self.graph, Graph)
[docs] def test_create_node(self):
node = self.graph.create_node(2)
self.assertIsInstance(node, Node)
self.assertEqual(node.id, 2)
self.assertIs(self.graph._nodes[2], node)
[docs] def test_create_existing_node_returns_existing_node(self):
node1 = self.graph.create_node(2)
node2 = self.graph.create_node(2)
self.assertIs(node1, node2)
[docs] def test_create_edge(self):
edge = self.graph.create_edge(1, 2)
self.assertEqual(edge.tail.id, 1)
self.assertEqual(edge.head.id, 2)
self.assertIn(1, self.graph._nodes)
self.assertIn(2, self.graph._nodes)
self.assertIn(edge, edge.tail.outgoing)
self.assertIn(edge, edge.head.incoming)
[docs] def test_create_edge_from_nodes(self):
node1 = self.graph.create_node(1)
node2 = self.graph.create_node(2)
edge = self.graph.create_edge(node1, node2)
self.assertIs(node1, edge.tail)
self.assertIs(node2, edge.head)
[docs] def test_get_node(self):
node = self.graph.create_node(3)
self.assertIs(self.graph.node(3), node)
[docs] def test_nodes_are_returned_in_order(self):
node2 = self.graph.create_node(2)
node3 = self.graph.create_node(3)
node1 = self.graph.create_node(1)
nodes = self.graph.nodes()
self.assertEqual(3, len(nodes))
self.assertIs(nodes[0], node1)
self.assertIs(nodes[1], node2)
self.assertIs(nodes[2], node3)
[docs] def test_keys_are_returned_ordered(self):
self.graph.create_node(4)
self.graph.create_node(8)
self.graph.create_node(3)
self.assertEqual(self.graph.keys(), [3, 4, 8])
[docs] def test_count_of_nodes(self):
self.graph.create_node(2)
self.graph.create_node(3)
self.assertEqual(2, self.graph.count())