test_rules_groups.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from src.rules.groups import match_combine_groups, combine_groups
  2. from src.node import Scope
  3. from src.possibilities import Possibility as P
  4. from tests.rulestestcase import RulesTestCase, tree
  5. class TestRulesGroups(RulesTestCase):
  6. def test_match_combine_groups_no_const(self):
  7. a0, a1 = root = tree('a + a')
  8. possibilities = match_combine_groups(root)
  9. self.assertEqualPos(possibilities,
  10. [P(root, combine_groups, (Scope(root), 1, a0, a0,
  11. 1, a1, a1))])
  12. def test_match_combine_groups_single_const(self):
  13. a0, mul = root = tree('a + 2a')
  14. l2, a1 = mul
  15. possibilities = match_combine_groups(root)
  16. self.assertEqualPos(possibilities,
  17. [P(root, combine_groups, (Scope(root), 1, a0, a0,
  18. l2, a1, mul))])
  19. def test_match_combine_groups_two_const(self):
  20. ((l2, a0), b), (l3, a1) = (m0, b), m1 = root = tree('2a + b + 3a')
  21. possibilities = match_combine_groups(root)
  22. self.assertEqualPos(possibilities,
  23. [P(root, combine_groups, (Scope(root), l2, a0, m0,
  24. l3, a1, m1))])
  25. def test_match_combine_groups_n_const(self):
  26. ((l2, a0), (l3, a1)), (l4, a2) = (m0, m1), m2 = root = tree('2a+3a+4a')
  27. possibilities = match_combine_groups(root)
  28. self.assertEqualPos(possibilities,
  29. [P(root, combine_groups, (Scope(root), l2, a0, m0,
  30. l3, a1, m1)),
  31. P(root, combine_groups, (Scope(root), l2, a0, m0,
  32. l4, a2, m2)),
  33. P(root, combine_groups, (Scope(root), l3, a1, m1,
  34. l4, a2, m2))])
  35. def test_match_combine_groups_identifier_group_no_const(self):
  36. ab0, ab1 = root = tree('ab + ab')
  37. possibilities = match_combine_groups(root)
  38. self.assertEqualPos(possibilities,
  39. [P(root, combine_groups, (Scope(root), 1, ab0, ab0,
  40. 1, ab1, ab1))])
  41. def test_match_combine_groups_identifier_group_single_const(self):
  42. m0, m1 = root = tree('ab + 2ab')
  43. (l2, a), b = m1
  44. possibilities = match_combine_groups(root)
  45. self.assertEqualPos(possibilities,
  46. [P(root, combine_groups, (Scope(root), 1, m0, m0,
  47. l2, a * b, m1))])
  48. def test_match_combine_groups_identifier_group_unordered(self):
  49. m0, m1 = root = tree('ab + ba')
  50. b, a = m1
  51. possibilities = match_combine_groups(root)
  52. self.assertEqualPos(possibilities,
  53. [P(root, combine_groups, (Scope(root), 1, m0, m0,
  54. 1, b * a, m1))])
  55. def test_combine_groups_simple(self):
  56. root, l1 = tree('a + a,1')
  57. a0, a1 = root
  58. self.assertEqualNodes(combine_groups(root,
  59. (Scope(root), 1, a0, a0, 1, a1, a1)),
  60. (l1 + 1) * a0)
  61. def test_combine_groups_nary(self):
  62. root, l1 = tree('ab + b + ba,1')
  63. abb, ba = root
  64. ab, b = abb
  65. self.assertEqualNodes(combine_groups(root,
  66. (Scope(root), 1, ab, ab, 1, ba, ba)),
  67. (l1 + 1) * ab + b)