test_rules.py 1.4 KB

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