test_rules_poly.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import unittest
  2. from src.node import ExpressionNode as N, ExpressionLeaf as L
  3. from src.rules.poly import match_combine_factors, combine_polynomes
  4. from src.possibilities import Possibility as P
  5. from src.parser import Parser
  6. from tests.parser import ParserWrapper
  7. def tree(exp, **kwargs):
  8. return ParserWrapper(Parser, **kwargs).run([exp])
  9. class TestRulesPoly(unittest.TestCase):
  10. #def test_match_combine_factors_numeric_combinations(self):
  11. # l0, l1, l2 = L(1), L(2), L(2)
  12. # plus = N('+', N('+', l0, l1), l2)
  13. # p = match_combine_factors(plus)
  14. # self.assertEqualPos(p, [P(plus, combine_polynomes, (l0, l1)),
  15. # P(plus, combine_polynomes, (l0, l2)),
  16. # P(plus, combine_polynomes, (l1, l2))])
  17. def assertEqualPos(self, possibilities, expected):
  18. self.assertEqual(len(possibilities), len(expected))
  19. for p, e in zip(possibilities, expected):
  20. self.assertEqual(p.root, e.root)
  21. self.assertEqual(p, e)
  22. def test_numeric(self):
  23. l1, l2 = root = tree('1+2')
  24. self.assertEqualPos(match_combine_factors(root),
  25. [P(root, combine_polynomes, ((l1, (l1, l1, l1, False)),
  26. (l2, (l2, l1, l1, False))))])
  27. a1, a2 = root = tree('a+a')
  28. self.assertEqualPos(match_combine_factors(root),
  29. [P(root, combine_polynomes, ((a1, (a1, l1, l1, False)),
  30. (a2, (a2, l1, l1, False))))])
  31. a1, a2 = root = tree('a+2a')
  32. self.assertEqualPos(match_combine_factors(root),
  33. [P(root, combine_polynomes, ((a1, (a1, l1, l1, False)),
  34. (a2, (a2[1], l1, l2, False))))])
  35. a1, a2 = root = tree('a2+a2')
  36. self.assertEqualPos(match_combine_factors(root),
  37. [P(root, combine_polynomes, ((a1, (a1[0], l2, l1, True)),
  38. (a2, (a2[0], l2, l1, True))))])