test_graph.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. # vim: set fileencoding=utf-8 :
  2. import unittest
  3. from node import Node, Leaf
  4. from graph import generate_graph
  5. class TestGraph(unittest.TestCase):
  6. def setUp(self):
  7. self.l0, self.l1, self.multi = Leaf(0), Leaf(1), Leaf('test')
  8. def tearDown(self):
  9. pass
  10. def test_simple_unary(self):
  11. uminus = Node('-', self.l1)
  12. g = generate_graph(uminus, Node)
  13. self.assertEqualGraphs(g, """
  14. -
  15. 1
  16. """)
  17. def test_simple_binary(self):
  18. plus = Node('+', self.l0, self.l1)
  19. g = generate_graph(plus, Node)
  20. self.assertEqualGraphs(g, """
  21. +
  22. ╭┴╮
  23. 0 1
  24. """)
  25. def test_multichar_unary(self):
  26. uminus = Node('-', self.multi)
  27. g = generate_graph(uminus, Node)
  28. self.assertEqualGraphs(g, """
  29. -
  30. test
  31. """)
  32. def test_multichar_binary(self):
  33. plus = Node('+', self.multi, self.l1)
  34. g = generate_graph(plus, Node)
  35. self.assertEqualGraphs(g, """
  36. +
  37. ╭──┴╮
  38. test 1
  39. """)
  40. def test_ternary(self):
  41. exp = Leaf('x')
  42. inf = Leaf('o')
  43. minus_inf = Node('-', Leaf('L'))
  44. integral = Node('n', exp, minus_inf, inf)
  45. g = generate_graph(integral, Node, verbose=True)
  46. self.assertEqualGraphs(g, """
  47. n
  48. ╭─┼─╮
  49. x - o
  50. L
  51. """)
  52. def test_ternary_multichar(self):
  53. exp = Leaf('x')
  54. inf = Leaf('oo')
  55. minus_inf = Node('-', Leaf('LL'))
  56. integral = Node('int', exp, minus_inf, inf)
  57. g = generate_graph(integral, Node, verbose=True)
  58. self.assertEqualGraphs(g, """
  59. int
  60. ╭─┼──╮
  61. x - oo
  62. LL
  63. """)
  64. def test_ternary_multichar_middle_right(self):
  65. exp = Leaf('x')
  66. minus_99 = Node('-', Leaf('99'))
  67. minus_inf = Node('-', Leaf('oo'))
  68. integral = Node('int', exp, minus_inf, minus_99)
  69. g = generate_graph(integral, Node, verbose=True)
  70. self.assertEqualGraphs(g, """
  71. int
  72. ╭─┼──╮
  73. x - -
  74. │ │
  75. oo 99
  76. """)
  77. def test_ternary_multichar_right(self):
  78. exp = Leaf('x')
  79. minus_99 = Node('-', Leaf('99'))
  80. ten = Leaf('10')
  81. integral = Node('int', exp, ten, minus_99)
  82. g = generate_graph(integral, Node, verbose=True)
  83. self.assertEqualGraphs(g, """
  84. int
  85. ╭─┼──╮
  86. x 10 -
  87. 99
  88. """)
  89. def test_quaternary(self):
  90. a, b, c, d = Leaf(0), Leaf(1), Leaf(2), Leaf(3)
  91. sum_node = Node('sum', a, b, c, d)
  92. g = generate_graph(sum_node, Node, verbose=True)
  93. self.assertEqualGraphs(g, """
  94. sum
  95. ╭─┬┴┬─╮
  96. 0 1 2 3
  97. """)
  98. def test_quinary(self):
  99. a, b, c, d, e = Leaf(0), Leaf(1), Leaf(2), Leaf(3), Leaf(4)
  100. sum_node = Node('sum', a, b, c, d, e)
  101. g = generate_graph(sum_node, Node, verbose=True)
  102. self.assertEqualGraphs(g, """
  103. sum
  104. ╭─┬─┼─┬─╮
  105. 0 1 2 3 4
  106. """)
  107. def strip(self, str):
  108. return str.replace('\n ', '\n')[1:-1]
  109. def assertEqualGraphs(self, g, expect):
  110. expect = self.strip(expect)
  111. if g != expect: # pragma: nocover
  112. print 'Expected:'
  113. print expect
  114. print 'Got:'
  115. print g
  116. raise AssertionError('Graph does not match expected value')