test_node.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import unittest
  2. from src.node import ExpressionNode as N, ExpressionLeaf as L
  3. class TestNode(unittest.TestCase):
  4. def setUp(self):
  5. self.l = [L(1), N('*', L(2), L(3)), L(4), L(5)]
  6. def test___lt__(self):
  7. self.assertTrue(L(1) < L(2))
  8. self.assertFalse(L(1) < L(1))
  9. self.assertFalse(L(2) < L(1))
  10. self.assertTrue(L(2) < N('+', L(1), L(2)))
  11. self.assertFalse(N('+', L(1), L(2)) < L(1))
  12. self.assertTrue(N('^', L('a'), L(2)) < N('^', L('a'), L(3)))
  13. self.assertTrue(N('^', L(2), L('a')) < N('^', L(3), L('a')))
  14. self.assertTrue(N('*', L(2), N('^', L('a'), L('b')))
  15. < N('*', L(3), N('^', L('a'), L('b'))))
  16. self.assertFalse(N('^', L('a'), L(3)) < N('^', L('a'), L(2)))
  17. def test_is_power_true(self):
  18. self.assertTrue(N('^', *self.l[:2]).is_power())
  19. self.assertFalse(N('+', *self.l[:2]).is_power())
  20. def test_is_nary(self):
  21. self.assertTrue(N('+', *self.l[:2]).is_nary())
  22. self.assertTrue(N('-', *self.l[:2]).is_nary())
  23. self.assertTrue(N('*', *self.l[:2]).is_nary())
  24. self.assertFalse(N('^', *self.l[:2]).is_nary())
  25. def test_is_identifier(self):
  26. self.assertTrue(L('a').is_identifier())
  27. self.assertFalse(L(1).is_identifier())
  28. def test_is_int(self):
  29. self.assertTrue(L(1).is_int())
  30. self.assertFalse(L(1.5).is_int())
  31. self.assertFalse(L('a').is_int())
  32. def test_is_float(self):
  33. self.assertTrue(L(1.5).is_float())
  34. self.assertFalse(L(1).is_float())
  35. self.assertFalse(L('a').is_float())
  36. def test_is_numeric(self):
  37. self.assertTrue(L(1).is_numeric())
  38. self.assertTrue(L(1.5).is_numeric())
  39. self.assertFalse(L('a').is_numeric())
  40. def test_extract_polynome_properties_identifier(self):
  41. self.assertEqual(L('a').extract_polynome_properties(),
  42. (L(1), L('a'), L(1)))
  43. def test_extract_polynome_properties_None(self):
  44. self.assertIsNone(N('+').extract_polynome_properties())
  45. def test_extract_polynome_properties_power(self):
  46. power = N('^', L('a'), L(2))
  47. self.assertEqual(power.extract_polynome_properties(),
  48. (L(1), L('a'), L(2)))
  49. def test_extract_polynome_properties_coefficient_exponent_int(self):
  50. times = N('*', L(3), N('^', L('a'), L(2)))
  51. self.assertEqual(times.extract_polynome_properties(),
  52. (L(3), L('a'), L(2)))
  53. def test_extract_polynome_properties_coefficient_exponent_id(self):
  54. times = N('*', L(3), N('^', L('a'), L('b')))
  55. self.assertEqual(times.extract_polynome_properties(),
  56. (L(3), L('a'), L('b')))
  57. def test_get_scope_binary(self):
  58. plus = N('+', *self.l[:2])
  59. self.assertEqual(plus.get_scope(), self.l[:2])
  60. def test_get_scope_nested_left(self):
  61. plus = N('+', N('+', *self.l[:2]), self.l[2])
  62. self.assertEqual(plus.get_scope(), self.l[:3])
  63. def test_get_scope_nested_right(self):
  64. plus = N('+', self.l[0], N('+', *self.l[1:3]))
  65. self.assertEqual(plus.get_scope(), self.l[:3])
  66. def test_get_scope_nested_deep(self):
  67. plus = N('+', N('+', N('+', *self.l[:2]), self.l[2]), self.l[3])
  68. self.assertEqual(plus.get_scope(), self.l)