test_rules.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import unittest
  2. from src.node import ExpressionNode as N, ExpressionLeaf as L
  3. from src.rules.poly import match_combine_factors, combine_numerics, \
  4. combine_orders
  5. from src.rules.utils import nary_node
  6. from src.possibilities import Possibility as P
  7. class TestRules(unittest.TestCase):
  8. def test_nary_node_binary(self):
  9. l0, l1 = L(1), L(2)
  10. plus = N('+', l0, l1)
  11. self.assertEqual(nary_node('+', [l0, l1]), plus)
  12. def test_nary_node_ternary(self):
  13. l0, l1, l2 = L(1), L(2), L(3)
  14. plus = N('+', N('+', l0, l1), l2)
  15. self.assertEqual(nary_node('+', [l0, l1, l2]), plus)
  16. def test_match_combine_factors_numeric_simple(self):
  17. l0, l1 = L(1), L(2)
  18. plus = N('+', l0, l1)
  19. p = match_combine_factors(plus)
  20. self.assertEqualPos(p, [P(plus, combine_numerics, (l0, l1, []))])
  21. def test_match_combine_factors_numeric_combinations(self):
  22. l0, l1, l2 = L(1), L(2), L(2)
  23. plus = N('+', N('+', l0, l1), l2)
  24. p = match_combine_factors(plus)
  25. self.assertEqualPos(p, [P(plus, combine_numerics, (l0, l1, [])),
  26. P(plus, combine_numerics, (l0, l2, [])),
  27. P(plus, combine_numerics, (l1, l2, []))])
  28. def assertEqualPos(self, possibilities, expected):
  29. for p, e in zip(possibilities, expected):
  30. self.assertEqual(p.root, e.root)
  31. self.assertEqual(p.handler, e.handler)
  32. self.assertEqual(p.args, e.args)