|
|
@@ -1,7 +1,7 @@
|
|
|
from src.rules.negation import match_negated_factor, negated_factor, \
|
|
|
- match_negate_polynome, negate_polynome, double_negation, \
|
|
|
- match_negated_division, single_negated_division, \
|
|
|
- double_negated_division
|
|
|
+ match_negate_polynome, negate_polynome, negated_zero, \
|
|
|
+ double_negation, match_negated_division, negated_nominator, \
|
|
|
+ negated_denominator
|
|
|
from src.node import Scope
|
|
|
from src.possibilities import Possibility as P
|
|
|
from tests.rulestestcase import RulesTestCase, tree
|
|
|
@@ -14,7 +14,7 @@ class TestRulesNegation(RulesTestCase):
|
|
|
self.assertEqualPos(match_negated_factor(root),
|
|
|
[P(root, negated_factor, (Scope(root), b))])
|
|
|
|
|
|
- (a, b), c = root = tree('a * -b * -c')
|
|
|
+ (a, b), c = root = tree('a * (-b) * -c')
|
|
|
scope = Scope(root)
|
|
|
self.assertEqualPos(match_negated_factor(root),
|
|
|
[P(root, negated_factor, (scope, b)),
|
|
|
@@ -22,34 +22,44 @@ class TestRulesNegation(RulesTestCase):
|
|
|
|
|
|
def test_negated_factor(self):
|
|
|
a, b = root = tree('a * -b')
|
|
|
- self.assertEqualNodes(negated_factor(root, (Scope(root), b)),
|
|
|
- -a * +b)
|
|
|
+ self.assertEqual(negated_factor(root, (Scope(root), b)), -(a * +b))
|
|
|
|
|
|
- (a, b), c = root = tree('a * -b * -c')
|
|
|
- self.assertEqualNodes(negated_factor(root, (Scope(root), b)),
|
|
|
- -a * +b * c)
|
|
|
- self.assertEqualNodes(negated_factor(root, (Scope(root), c)),
|
|
|
- -a * b * +c)
|
|
|
+ (a, b), c = root = tree('a * (-b) * -c')
|
|
|
+ self.assertEqual(negated_factor(root, (Scope(root), b)), -(a * +b * c))
|
|
|
+ self.assertEqual(negated_factor(root, (Scope(root), c)), -(a * b * +c))
|
|
|
|
|
|
def test_match_negate_polynome(self):
|
|
|
root = tree('--a')
|
|
|
self.assertEqualPos(match_negate_polynome(root),
|
|
|
- [P(root, double_negation, ())])
|
|
|
+ [P(root, double_negation)])
|
|
|
+
|
|
|
+ root = tree('-0')
|
|
|
+ self.assertEqualPos(match_negate_polynome(root),
|
|
|
+ [P(root, negated_zero)])
|
|
|
+
|
|
|
+ root = tree('--0')
|
|
|
+ self.assertEqualPos(match_negate_polynome(root),
|
|
|
+ [P(root, double_negation),
|
|
|
+ P(root, negated_zero)])
|
|
|
|
|
|
root = tree('-(a + b)')
|
|
|
self.assertEqualPos(match_negate_polynome(root),
|
|
|
- [P(root, negate_polynome, ())])
|
|
|
+ [P(root, negate_polynome)])
|
|
|
|
|
|
def test_double_negation(self):
|
|
|
root = tree('--a')
|
|
|
- self.assertEqualNodes(double_negation(root, ()), ++root)
|
|
|
+ self.assertEqual(double_negation(root, ()), ++root)
|
|
|
+
|
|
|
+ def test_negated_zero(self):
|
|
|
+ root = tree('-0')
|
|
|
+ self.assertEqual(negated_zero(root, ()), 0)
|
|
|
|
|
|
def test_negate_polynome(self):
|
|
|
a, b = root = tree('-(a + b)')
|
|
|
- self.assertEqualNodes(negate_polynome(root, ()), -a + -b)
|
|
|
+ self.assertEqual(negate_polynome(root, ()), -a + -b)
|
|
|
|
|
|
a, b = root = tree('-(a - b)')
|
|
|
- self.assertEqualNodes(negate_polynome(root, ()), -a + -b)
|
|
|
+ self.assertEqual(negate_polynome(root, ()), -a + -b)
|
|
|
|
|
|
def test_match_negated_division_none(self):
|
|
|
self.assertEqual(match_negated_division(tree('1 / 2')), [])
|
|
|
@@ -58,25 +68,32 @@ class TestRulesNegation(RulesTestCase):
|
|
|
l1, l2 = root = tree('-1 / 2')
|
|
|
self.assertEqualPos(match_negated_division(root), [])
|
|
|
|
|
|
+ l1, l2 = root = tree('(-1) / 2')
|
|
|
+ self.assertEqualPos(match_negated_division(root),
|
|
|
+ [P(root, negated_nominator)])
|
|
|
+
|
|
|
l1, l2 = root = tree('1 / -2')
|
|
|
- possibilities = match_negated_division(root)
|
|
|
- self.assertEqualPos(possibilities,
|
|
|
- [P(root, single_negated_division, (l1, +l2))])
|
|
|
+ self.assertEqualPos(match_negated_division(root),
|
|
|
+ [P(root, negated_denominator)])
|
|
|
|
|
|
def test_match_negated_division_double(self):
|
|
|
- root = tree('-1 / -2')
|
|
|
+ root = tree('(-1) / -2')
|
|
|
+ self.assertEqualPos(match_negated_division(root),
|
|
|
+ [P(root, negated_nominator),
|
|
|
+ P(root, negated_denominator)])
|
|
|
|
|
|
- possibilities = match_negated_division(root)
|
|
|
- self.assertEqualPos(possibilities,
|
|
|
- [P(root, double_negated_division, ())])
|
|
|
+ def test_negated_nominator(self):
|
|
|
+ l1, l2 = root = tree('(-1) / 2')
|
|
|
+ self.assertEqual(negated_nominator(root, ()), -(+l1 / l2))
|
|
|
|
|
|
- def test_single_negated_division(self):
|
|
|
+ def test_negated_denominator(self):
|
|
|
l1, l2 = root = tree('1 / -2')
|
|
|
- self.assertEqualNodes(single_negated_division(root, (l1, +l2)),
|
|
|
- -l1 / +l2)
|
|
|
+ self.assertEqual(negated_denominator(root, ()), -(l1 / +l2))
|
|
|
|
|
|
def test_double_negated_division(self):
|
|
|
- l1, l2 = root = tree('-1 / -2')
|
|
|
-
|
|
|
- self.assertEqualNodes(double_negated_division(root, ()),
|
|
|
- +l1 / +l2)
|
|
|
+ self.assertRewrite([
|
|
|
+ '(-a) / (-b)',
|
|
|
+ '-a / (-b)',
|
|
|
+ '--a / b',
|
|
|
+ 'a / b',
|
|
|
+ ])
|