瀏覽代碼

Merge branch 'master' of kompiler.org:trs

Sander Mathijs van Veen 14 年之前
父節點
當前提交
3c9a4762a0
共有 4 個文件被更改,包括 7 次插入4 次删除
  1. 4 3
      src/rules/fractions.py
  2. 1 1
      src/rules/numerics.py
  3. 1 0
      tests/test_node.py
  4. 1 0
      tests/test_rules_numerics.py

+ 4 - 3
src/rules/fractions.py

@@ -140,9 +140,10 @@ MESSAGES[equalize_denominators] = _('Equalize the denominators of division'
 
 def add_nominators(root, args):
     """
-    a / b + c / b    ->  (a + c) / b
-    a / -b + c / -b  ->  (a + c) / -b
-    a / -b - c / -b  ->  (a - c) / -b
+    a / b + c / b      ->  (a + c) / b
+    a / b - c / b      ->  (a - c) / b
+    -(a / b) + c / b   ->  -((a + c) / b)
+    -(a / b) - c / b   ->  (c - a) / -b
     """
     # TODO: is 'add' Appropriate when rewriting to "(a + (-c)) / b"?
     ab, cb = args

+ 1 - 1
src/rules/numerics.py

@@ -18,7 +18,7 @@ def add_numerics(root, args):
     n0, n1, c0, c1 = args
 
     if c0.is_op(OP_NEG):
-        c0 = (-c0[0].value)
+        c0 = -c0[0].value
     else:
         c0 = c0.value
 

+ 1 - 0
tests/test_node.py

@@ -34,6 +34,7 @@ class TestNode(RulesTestCase):
         self.assertTrue(N('+', *self.l[:2]).is_op_or_negated(OP_ADD))
         self.assertTrue(N('-', N('+', *self.l[:2])).is_op_or_negated(OP_ADD))
         self.assertFalse(N('-', *self.l[:2]).is_op_or_negated(OP_ADD))
+        self.assertFalse(self.l[0].is_op_or_negated(OP_ADD))
 
     def test_is_leaf(self):
         self.assertTrue(L(2).is_leaf())

+ 1 - 0
tests/test_rules_numerics.py

@@ -17,6 +17,7 @@ class TestRulesNumerics(RulesTestCase):
     def test_add_numerics_negations(self):
         l0, a, l1 = tree('1,a,2')
 
+        self.assertEqual(add_numerics(-l0 + l1, (-l0, l1, -L(1), L(2))), 1)
         self.assertEqual(add_numerics(l0 + -l1, (l0, -l1, L(1), -L(2))), -1)
         self.assertEqual(add_numerics(l0 + a + -l1, (l0, -l1, L(1), -L(2))),
                          L(-1) + a)