test_rules_fractions.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from src.rules.fractions import match_constant_division, division_by_one, \
  2. division_of_zero, division_by_self, match_add_constant_fractions, \
  3. equalize_denominators, add_nominators
  4. from src.possibilities import Possibility as P
  5. from tests.test_rules_poly import tree
  6. from tests.rulestestcase import RulesTestCase
  7. class TestRulesFractions(RulesTestCase):
  8. def test_match_constant_division(self):
  9. a, zero = tree('a,0')
  10. root = a / zero
  11. self.assertRaises(ZeroDivisionError, match_constant_division, root)
  12. root = a / 1
  13. possibilities = match_constant_division(root)
  14. self.assertEqualPos(possibilities, [P(root, division_by_one, (a,))])
  15. root = zero / a
  16. possibilities = match_constant_division(root)
  17. self.assertEqualPos(possibilities, [P(root, division_of_zero)])
  18. root = a / a
  19. possibilities = match_constant_division(root)
  20. self.assertEqualPos(possibilities, [P(root, division_by_self)])
  21. def test_division_by_one(self):
  22. a = tree('a')
  23. root = a / 1
  24. self.assertEqualNodes(division_by_one(root, (a,)), a)
  25. def test_division_of_zero(self):
  26. a, zero = tree('a,0')
  27. root = zero / a
  28. self.assertEqualNodes(division_of_zero(root, ()), zero)
  29. def test_division_by_self(self):
  30. a, one = tree('a,1')
  31. root = a / a
  32. self.assertEqualNodes(division_by_self(root, ()), one)
  33. def test_match_add_constant_fractions(self):
  34. a, b, c, l1, l2, l3, l4 = tree('a,b,c,1,2,3,4')
  35. n0, n1 = root = l1 / l2 + l3 / l4
  36. possibilities = match_add_constant_fractions(root)
  37. self.assertEqualPos(possibilities,
  38. [P(root, equalize_denominators, (n0, n1, 4))])
  39. (((n0, n1), n2), n3), n4 = root = a + l1 / l2 + b + l3 / l4 + c
  40. possibilities = match_add_constant_fractions(root)
  41. self.assertEqualPos(possibilities,
  42. [P(root, equalize_denominators, (n1, n3, 4))])
  43. n0, n1 = root = l2 / l4 + l3 / l4
  44. possibilities = match_add_constant_fractions(root)
  45. self.assertEqualPos(possibilities,
  46. [P(root, add_nominators, (n0, n1))])
  47. (((n0, n1), n2), n3), n4 = root = a + l2 / l4 + b + l3 / l4 + c
  48. possibilities = match_add_constant_fractions(root)
  49. self.assertEqualPos(possibilities,
  50. [P(root, add_nominators, (n1, n3))])
  51. def test_equalize_denominators(self):
  52. a, b, l1, l2, l3, l4 = tree('a,b,1,2,3,4')
  53. n0, n1 = root = l1 / l2 + l3 / l4
  54. self.assertEqualNodes(equalize_denominators(root, (n0, n1, 4)),
  55. l2 / l4 + l3 / l4)
  56. n0, n1 = root = a / l2 + b / l4
  57. self.assertEqualNodes(equalize_denominators(root, (n0, n1, 4)),
  58. (l2 * a) / l4 + b / l4)
  59. def test_add_nominators(self):
  60. a, b, c = tree('a,b,c')
  61. n0, n1 = root = a / b + c / b
  62. self.assertEqualNodes(add_nominators(root, (n0, n1)), (a + c) / b)