pungi/tests/test_graph.py

92 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
try:
import unittest2 as unittest
except ImportError:
import unittest
from pungi.graph import SimpleAcyclicOrientedGraph
class SimpleAcyclicOrientedGraphTestCase(unittest.TestCase):
def setUp(self):
self.g = SimpleAcyclicOrientedGraph()
def test_simple_graph(self):
graph_data = (
("Client", "Base"),
("Server", "Base"),
("Workstation", "Base"),
)
for start, end in graph_data:
self.g.add_edge(start, end)
spanning_line = self.g.prune_graph()
self.assertEqual(4, len(spanning_line))
# 'Base' as a lookaside should be at the end of the spanning line,
# order of others is not crucial
self.assertEqual("Base", spanning_line[-1])
def test_complex_graph(self):
graph_data = (
("1", "3"), # 1 --> 3 --> 4 --> 5 ...
("3", "4"),
("4", "5"),
("4", "6"),
("2", "4"),
("7", "6"),
("6", "5"),
)
for start, end in graph_data:
self.g.add_edge(start, end)
spanning_line = self.g.prune_graph()
# spanning line have to match completely to given graph
self.assertEqual(["1", "3", "2", "4", "7", "6", "5"], spanning_line)
def test_cyclic_graph(self):
graph_data = (
("1", "2"),
("2", "3"),
("3", "1"),
)
with self.assertRaises(ValueError):
for start, end in graph_data:
self.g.add_edge(start, end)
def test_two_separate_graph_lines(self):
graph_data = (
("1", "3"), # 1st graph
("3", "2"), # 1st graph
("6", "5"), # 2nd graph
)
for start, end in graph_data:
self.g.add_edge(start, end)
spanning_line = self.g.prune_graph()
spanning_line_str = "".join(spanning_line)
self.assertEqual(5, len(spanning_line))
# Particular parts should match. Order of these parts is not crucial.
self.assertTrue(
"132" in spanning_line_str and "65" in spanning_line_str,
"Spanning line '%s' does not match to graphs" % spanning_line_str,
)
def alternative_route_in_graph(self):
graph_data = (
("1", "3"),
("3", "2"),
("1", "2"),
)
for start, end in graph_data:
self.g.add_edge(start, end)
spanning_line = self.g.prune_graph()
# spanning line have to match completely to given graph
self.assertEqual(["1", "3", "2"], spanning_line)