test_rules_sort.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from src.rules.sort import match_sort_polynome, swap_factors, get_poly_prop, \
  2. match_sort_monomial, iter_pairs, swap_mono, swap_poly, get_power_prop
  3. from src.node import Scope
  4. from src.possibilities import Possibility as P
  5. from tests.rulestestcase import RulesTestCase, tree
  6. class TestRulesSort(RulesTestCase):
  7. def test_swap_mono(self):
  8. self.assertTrue(swap_mono(tree('x, 1 / 2')))
  9. self.assertFalse(swap_mono(tree('2, 1 / 2')))
  10. self.assertTrue(swap_mono(tree('x, 2')))
  11. self.assertFalse(swap_mono(tree('2, x')))
  12. self.assertTrue(swap_mono(tree('x ^ 2, 2')))
  13. self.assertTrue(swap_mono(tree('y, x')))
  14. self.assertFalse(swap_mono(tree('x, y')))
  15. self.assertFalse(swap_mono(tree('x, x')))
  16. self.assertTrue(swap_mono(tree('x ^ 3, x ^ 2')))
  17. self.assertFalse(swap_mono(tree('x ^ 2, x ^ 3')))
  18. def test_swap_poly(self):
  19. self.assertTrue(swap_poly(tree('2, x')))
  20. self.assertFalse(swap_poly(tree('x, 2')))
  21. self.assertTrue(swap_poly(tree('a, a^2')))
  22. self.assertFalse(swap_poly(tree('a^2, a')))
  23. self.assertTrue(swap_poly(tree('y, x')))
  24. self.assertFalse(swap_poly(tree('x, y')))
  25. self.assertFalse(swap_poly(tree('x, x')))
  26. self.assertFalse(swap_poly(tree('x ^ 3, x ^ 2')))
  27. self.assertTrue(swap_poly(tree('x ^ 2, x ^ 3')))
  28. def test_get_power_prop(self):
  29. self.assertEqual(get_power_prop(tree('a')), ('a', 1))
  30. self.assertEqual(get_power_prop(tree('a ^ b')), ('a', 1))
  31. self.assertEqual(get_power_prop(tree('a ^ 2')), ('a', 2))
  32. self.assertEqual(get_power_prop(tree('a ^ -2')), ('a', -2))
  33. self.assertIsNone(get_power_prop(tree('1')))
  34. def test_get_poly_prop(self):
  35. self.assertEqual(get_poly_prop(tree('a ^ 2')), ('a', 2))
  36. self.assertEqual(get_poly_prop(tree('2a ^ 2')), ('a', 2))
  37. self.assertEqual(get_poly_prop(tree('ca ^ 2 * 2')), ('a', 2))
  38. self.assertEqual(get_poly_prop(tree('ab ^ 2')), ('a', 1))
  39. self.assertEqual(get_poly_prop(tree('a^3 * a^2')), ('a', 3))
  40. self.assertEqual(get_poly_prop(tree('a^2 * a^3')), ('a', 3))
  41. self.assertIsNone(get_poly_prop(tree('1')))
  42. def test_match_sort_monomial_constant(self):
  43. x, l2 = root = tree('x * 2')
  44. self.assertEqualPos(match_sort_monomial(root),
  45. [P(root, swap_factors, (Scope(root), x, l2))])
  46. root = tree('2x')
  47. self.assertEqualPos(match_sort_monomial(root), [])
  48. def test_match_sort_monomial_variables(self):
  49. y, x = root = tree('yx')
  50. self.assertEqualPos(match_sort_monomial(root),
  51. [P(root, swap_factors, (Scope(root), y, x))])
  52. root = tree('xy')
  53. self.assertEqualPos(match_sort_monomial(root), [])
  54. def test_match_sort_polynome(self):
  55. x, x2 = root = tree('x + x ^ 2')
  56. self.assertEqualPos(match_sort_polynome(root),
  57. [P(root, swap_factors, (Scope(root), x, x2))])
  58. root = tree('x + 2')
  59. self.assertEqualPos(match_sort_polynome(root), [])
  60. def test_swap_factors(self):
  61. x, l2 = root = tree('x * 2')
  62. self.assertEqualNodes(swap_factors(root, (Scope(root), x, l2)),
  63. l2 * x)