|
@@ -0,0 +1,74 @@
|
|
|
|
|
+# vim: set fileencoding=utf-8 :
|
|
|
|
|
+import unittest
|
|
|
|
|
+
|
|
|
|
|
+from node import Node, Leaf
|
|
|
|
|
+from graph import generate_graph
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class TestGraph(unittest.TestCase):
|
|
|
|
|
+
|
|
|
|
|
+ def setUp(self):
|
|
|
|
|
+ self.l0, self.l1, self.multi = Leaf(0), Leaf(1), Leaf('test')
|
|
|
|
|
+
|
|
|
|
|
+ def tearDown(self):
|
|
|
|
|
+ pass
|
|
|
|
|
+
|
|
|
|
|
+ def test_simple_unary(self):
|
|
|
|
|
+ uminus = Node('-', self.l1)
|
|
|
|
|
+ g = generate_graph(uminus, Node)
|
|
|
|
|
+ expect = self.strip("""
|
|
|
|
|
+ -
|
|
|
|
|
+ │
|
|
|
|
|
+ 1
|
|
|
|
|
+ """)
|
|
|
|
|
+ assert g == expect
|
|
|
|
|
+
|
|
|
|
|
+ def test_simple_binary(self):
|
|
|
|
|
+ plus = Node('+', self.l0, self.l1)
|
|
|
|
|
+ g = generate_graph(plus, Node)
|
|
|
|
|
+ expect = self.strip("""
|
|
|
|
|
+ +
|
|
|
|
|
+ ╭┴╮
|
|
|
|
|
+ 0 1
|
|
|
|
|
+ """)
|
|
|
|
|
+ assert g == expect
|
|
|
|
|
+
|
|
|
|
|
+ def test_multichar_unary(self):
|
|
|
|
|
+ uminus = Node('-', self.multi)
|
|
|
|
|
+ g = generate_graph(uminus, Node)
|
|
|
|
|
+ expect = self.strip("""
|
|
|
|
|
+ -
|
|
|
|
|
+ │
|
|
|
|
|
+ test
|
|
|
|
|
+ """)
|
|
|
|
|
+ print g
|
|
|
|
|
+ print expect
|
|
|
|
|
+ assert g == expect
|
|
|
|
|
+
|
|
|
|
|
+ def test_multichar_binary(self):
|
|
|
|
|
+ plus = Node('+', self.multi, self.l1)
|
|
|
|
|
+ g = generate_graph(plus, Node)
|
|
|
|
|
+ expect = self.strip("""
|
|
|
|
|
+ +
|
|
|
|
|
+ ╭───┴╮
|
|
|
|
|
+ test 1
|
|
|
|
|
+ """)
|
|
|
|
|
+ assert g == expect
|
|
|
|
|
+
|
|
|
|
|
+ def test_function(self):
|
|
|
|
|
+ exp = Leaf('x')
|
|
|
|
|
+ inf = Leaf('oo')
|
|
|
|
|
+ minus_inf = Node('-', inf)
|
|
|
|
|
+ integral = Node('int', exp, minus_inf, inf)
|
|
|
|
|
+ g = generate_graph(integral, Node)
|
|
|
|
|
+ expect = self.strip("""
|
|
|
|
|
+ int
|
|
|
|
|
+ ╭─┼──╮
|
|
|
|
|
+ x - oo
|
|
|
|
|
+ │
|
|
|
|
|
+ oo
|
|
|
|
|
+ """)
|
|
|
|
|
+ assert g == expect
|
|
|
|
|
+
|
|
|
|
|
+ def strip(self, str):
|
|
|
|
|
+ return str.replace('\n ', '\n')[1:-1]
|