test_rules_negation.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from src.rules.negation import match_negated_factor, negated_factor, \
  2. match_negate_polynome, negate_polynome, negated_zero, \
  3. double_negation, match_negated_division, negated_nominator, \
  4. negated_denominator
  5. from src.node import Scope
  6. from src.possibilities import Possibility as P
  7. from tests.rulestestcase import RulesTestCase, tree
  8. class TestRulesNegation(RulesTestCase):
  9. def test_match_negated_factor(self):
  10. a, b = root = tree('a * -b')
  11. self.assertEqualPos(match_negated_factor(root),
  12. [P(root, negated_factor, (Scope(root), b))])
  13. (a, b), c = root = tree('a * (-b) * -c')
  14. scope = Scope(root)
  15. self.assertEqualPos(match_negated_factor(root),
  16. [P(root, negated_factor, (scope, b)),
  17. P(root, negated_factor, (scope, c))])
  18. def test_negated_factor(self):
  19. a, b = root = tree('a * -b')
  20. self.assertEqual(negated_factor(root, (Scope(root), b)), -(a * +b))
  21. (a, b), c = root = tree('a * (-b) * -c')
  22. self.assertEqual(negated_factor(root, (Scope(root), b)), -(a * +b * c))
  23. self.assertEqual(negated_factor(root, (Scope(root), c)), -(a * b * +c))
  24. def test_match_negate_polynome(self):
  25. root = tree('--a')
  26. self.assertEqualPos(match_negate_polynome(root),
  27. [P(root, double_negation)])
  28. root = tree('-0')
  29. self.assertEqualPos(match_negate_polynome(root),
  30. [P(root, negated_zero)])
  31. root = tree('--0')
  32. self.assertEqualPos(match_negate_polynome(root),
  33. [P(root, double_negation),
  34. P(root, negated_zero)])
  35. root = tree('-(a + b)')
  36. self.assertEqualPos(match_negate_polynome(root),
  37. [P(root, negate_polynome)])
  38. def test_double_negation(self):
  39. root = tree('--a')
  40. self.assertEqual(double_negation(root, ()), ++root)
  41. def test_negated_zero(self):
  42. root = tree('-0')
  43. self.assertEqual(negated_zero(root, ()), 0)
  44. def test_negate_polynome(self):
  45. a, b = root = tree('-(a + b)')
  46. self.assertEqual(negate_polynome(root, ()), -a + -b)
  47. a, b = root = tree('-(a - b)')
  48. self.assertEqual(negate_polynome(root, ()), -a + -b)
  49. def test_match_negated_division_none(self):
  50. self.assertEqual(match_negated_division(tree('1 / 2')), [])
  51. def test_match_negated_division_single(self):
  52. l1, l2 = root = tree('-1 / 2')
  53. self.assertEqualPos(match_negated_division(root), [])
  54. l1, l2 = root = tree('(-1) / 2')
  55. self.assertEqualPos(match_negated_division(root),
  56. [P(root, negated_nominator)])
  57. l1, l2 = root = tree('1 / -2')
  58. self.assertEqualPos(match_negated_division(root),
  59. [P(root, negated_denominator)])
  60. def test_match_negated_division_double(self):
  61. root = tree('(-1) / -2')
  62. self.assertEqualPos(match_negated_division(root),
  63. [P(root, negated_nominator),
  64. P(root, negated_denominator)])
  65. def test_negated_nominator(self):
  66. l1, l2 = root = tree('(-1) / 2')
  67. self.assertEqual(negated_nominator(root, ()), -(+l1 / l2))
  68. def test_negated_denominator(self):
  69. l1, l2 = root = tree('1 / -2')
  70. self.assertEqual(negated_denominator(root, ()), -(l1 / +l2))
  71. def test_double_negated_division(self):
  72. self.assertRewrite([
  73. '(-a) / (-b)',
  74. '-a / (-b)',
  75. '--a / b',
  76. 'a / b',
  77. ])