test_rules_utils.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from src.rules import utils
  2. from src.rules.utils import least_common_multiple, is_fraction, partition, \
  3. find_variables, first_sorted_variable, find_variable, substitute, \
  4. divides, evals_to_numeric
  5. from tests.rulestestcase import tree, RulesTestCase
  6. class TestRulesUtils(RulesTestCase):
  7. def test_doctest(self):
  8. self.assertDoctests(utils)
  9. def test_least_common_multiple(self):
  10. self.assertEqual(least_common_multiple(5, 6), 30)
  11. self.assertEqual(least_common_multiple(5, 6, 15), 30)
  12. self.assertEqual(least_common_multiple(2, 4), 4)
  13. def test_is_fraction(self):
  14. l1, a = tree('1, a')
  15. self.assertTrue(is_fraction(a / 2, a, 2))
  16. self.assertTrue(is_fraction(l1 / 2 * a, a, 2))
  17. self.assertTrue(is_fraction(a * (l1 / 2), a, 2))
  18. self.assertFalse(is_fraction(l1 / 3 * a, a, 2))
  19. self.assertFalse(is_fraction(l1, a, 2))
  20. def test_partition(self):
  21. self.assertEqual(partition(lambda x: x & 1, range(6)),
  22. ([1, 3, 5], [0, 2, 4]))
  23. def test_find_variables(self):
  24. x, l2, add, mul0, mul1 = tree('x, 2, x + 2, 2x, xy')
  25. self.assertSetEqual(find_variables(x), set(['x']))
  26. self.assertSetEqual(find_variables(l2), set())
  27. self.assertSetEqual(find_variables(add), set(['x']))
  28. self.assertSetEqual(find_variables(mul0), set(['x']))
  29. self.assertSetEqual(find_variables(mul1), set(['x', 'y']))
  30. def test_first_sorted_variable(self):
  31. self.assertEqual(first_sorted_variable(set('ax')), 'x')
  32. self.assertEqual(first_sorted_variable(set('ay')), 'y')
  33. self.assertEqual(first_sorted_variable(set('az')), 'z')
  34. self.assertEqual(first_sorted_variable(set('xz')), 'x')
  35. self.assertEqual(first_sorted_variable(set('bac')), 'a')
  36. def test_find_variable(self):
  37. x, y = tree('x, y')
  38. self.assertEqual(find_variable(tree('x')), x)
  39. self.assertEqual(find_variable(tree('x ^ 2')), x)
  40. self.assertEqual(find_variable(tree('1 + 2')), x)
  41. self.assertEqual(find_variable(tree('y ^ 2')), y)
  42. def test_substitute(self):
  43. x, a = tree('x, a')
  44. self.assertEqual(substitute(x, x, a), a)
  45. self.assertEqual(substitute(tree('x2'), x, a), tree('a2'))
  46. self.assertEqual(substitute(tree('y + x + 1'), x, a),
  47. tree('y + a + 1'))
  48. def test_divides(self):
  49. self.assertTrue(divides(3, 3))
  50. self.assertTrue(divides(2, 4))
  51. self.assertTrue(divides(7, 21))
  52. self.assertFalse(divides(4, 2))
  53. self.assertFalse(divides(2, 3))
  54. def test_evals_to_numeric(self):
  55. self.assertTrue(evals_to_numeric(tree('1')))
  56. self.assertFalse(evals_to_numeric(tree('a')))
  57. self.assertTrue(evals_to_numeric(tree('1 + 2')))
  58. self.assertFalse(evals_to_numeric(tree('1 + a')))
  59. self.assertTrue(evals_to_numeric(tree('1 + 2 / 2 * 9')))
  60. self.assertFalse(evals_to_numeric(tree('int 1')))
  61. self.assertFalse(evals_to_numeric(tree('int a')))
  62. self.assertTrue(evals_to_numeric(tree('sqrt 1')))