test_rules_negation.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from src.rules.negation import match_negated_factor, negated_factor, \
  2. match_negate_polynome, negate_polynome, double_negation, \
  3. match_negated_division, single_negated_division, \
  4. double_negated_division
  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.assertEqualNodes(negated_factor(root, (Scope(root), b)),
  21. -(a * +b))
  22. (a, b), c = root = tree('a * -b * -c')
  23. scope = Scope(root)
  24. self.assertEqualNodes(negated_factor(root, (scope, b)),
  25. -(a * +b * c))
  26. self.assertEqualNodes(negated_factor(root, (scope, c)),
  27. -(a * b * +c))
  28. def test_match_negate_polynome(self):
  29. root = tree('--a')
  30. self.assertEqualPos(match_negate_polynome(root),
  31. [P(root, double_negation, ())])
  32. root = tree('-(a + b)')
  33. self.assertEqualPos(match_negate_polynome(root),
  34. [P(root, negate_polynome, ())])
  35. a, b = root = tree('-(a - -b)')
  36. self.assertEqualPos(match_negate_polynome(root),
  37. [P(root, double_negation, (b,)),
  38. P(root, negate_polynome, ())])
  39. def test_double_negation(self):
  40. root = tree('--a')
  41. self.assertEqualNodes(double_negation(root, ()), ++root)
  42. def test_negate_polynome(self):
  43. a, b = root = tree('-(a + b)')
  44. self.assertEqualNodes(negate_polynome(root, ()), -a + -b)
  45. a, b = root = tree('-(a - b)')
  46. self.assertEqualNodes(negate_polynome(root, ()), -a + -b)
  47. def test_match_negated_division_none(self):
  48. self.assertEqual(match_negated_division(tree('1 / 2')), [])
  49. def test_match_negated_division_single(self):
  50. l1, l2 = root = tree('-1 / 2')
  51. possibilities = match_negated_division(root)
  52. self.assertEqualPos(possibilities,
  53. [P(root, single_negated_division, (+l1, l2))])
  54. l1, l2 = root = tree('1 / -2')
  55. possibilities = match_negated_division(root)
  56. self.assertEqualPos(possibilities,
  57. [P(root, single_negated_division, (l1, +l2))])
  58. def test_match_negated_division_double(self):
  59. root = tree('-1 / -2')
  60. possibilities = match_negated_division(root)
  61. self.assertEqualPos(possibilities,
  62. [P(root, double_negated_division, ())])
  63. def test_single_negated_division(self):
  64. l1, l2 = root = tree('-1 / 2')
  65. self.assertEqualNodes(single_negated_division(root, (+l1, l2)),
  66. -(+l1 / l2))
  67. l1, l2 = root = tree('1 / -2')
  68. self.assertEqualNodes(single_negated_division(root, (l1, +l2)),
  69. -(l1 / +l2))
  70. def test_double_negated_division(self):
  71. l1, l2 = root = tree('-1 / -2')
  72. self.assertEqualNodes(double_negated_division(root, ()),
  73. +l1 / +l2)