ConceptPortal-public/rsconcept/backend/apps/rsform/tests/t_graph.py

116 lines
3.2 KiB
Python

''' Unit tests: graph. '''
import unittest
from apps.rsform.graph import Graph
class TestGraph(unittest.TestCase):
''' Test class for graph. '''
def test_construction(self):
graph = Graph()
self.assertFalse(graph.contains(1))
graph.add_node(1)
self.assertTrue(graph.contains(1))
graph.add_edge(2, 3)
self.assertTrue(graph.contains(2))
self.assertTrue(graph.contains(3))
self.assertTrue(graph.has_edge(2, 3))
self.assertFalse(graph.has_edge(3, 2))
graph = Graph({1: [3, 4], 2: [1], 3: [], 4: [], 5: []})
self.assertTrue(graph.contains(1))
self.assertTrue(graph.contains(5))
self.assertTrue(graph.has_edge(1, 3))
self.assertTrue(graph.has_edge(2, 1))
def test_expand_outputs(self):
graph = Graph({
1: [2],
2: [3, 5],
3: [],
5: [6],
6: [1],
7: []
})
self.assertEqual(graph.expand_outputs([]), [])
self.assertEqual(graph.expand_outputs([3]), [])
self.assertEqual(graph.expand_outputs([7]), [])
self.assertEqual(graph.expand_outputs([2, 5]), [3, 6, 1])
def test_expand_inputs(self):
graph = Graph({
1: [2],
2: [3, 5],
3: [],
5: [6],
6: [1],
7: []
})
self.assertEqual(graph.expand_inputs([]), [])
self.assertEqual(graph.expand_inputs([1]), [6, 5, 2])
self.assertEqual(graph.expand_inputs([7]), [])
self.assertEqual(graph.expand_inputs([3]), [2, 1, 6, 5])
self.assertEqual(graph.expand_inputs([2, 5]), [1, 6])
def test_transitive_closure(self):
graph = Graph({
1: [2],
2: [3, 5],
3: [],
5: [6],
6: [],
7: [6]
})
self.assertEqual(graph.transitive_closure(), {
1: [2, 3, 5, 6],
2: [3, 5, 6],
3: [],
5: [6],
6: [],
7: [6]
})
def test_topological_order(self):
self.assertEqual(Graph().topological_order(), [])
graph = Graph({
1: [],
2: [1],
3: [],
4: [3],
5: [6],
6: [1, 2]
})
self.assertEqual(graph.topological_order(), [5, 6, 4, 3, 2, 1])
graph = Graph({
1: [1],
2: [4],
3: [2],
4: [],
5: [2],
})
self.assertEqual(graph.topological_order(), [5, 3, 2, 4, 1])
def test_sort_stable(self):
graph = Graph({
1: [2],
2: [3, 5],
3: [],
5: [6],
6: [],
7: [6]
})
self.assertEqual(graph.sort_stable([]), [])
self.assertEqual(graph.sort_stable([1]), [1])
self.assertEqual(graph.sort_stable([1, 2]), [1, 2])
self.assertEqual(graph.sort_stable([7, 2, 1]), [7, 1, 2])
self.assertEqual(graph.sort_stable([2, 1, 7]), [1, 2, 7])
self.assertEqual(graph.sort_stable([1, 2, 7]), [1, 2, 7])
self.assertEqual(graph.sort_stable([2, 1, 3, 6, 7]), [1, 2, 3, 7, 6])
self.assertEqual(graph.sort_stable([2, 1, 6, 7, 3]), [1, 2, 7, 6, 3])