test_node.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import unittest
  2. from src.node import ExpressionNode as N, ExpressionLeaf as L
  3. from tests.rulestestcase import tree
  4. class TestNode(unittest.TestCase):
  5. def setUp(self):
  6. self.l = [L(1), N('*', L(2), L(3)), L(4), L(5)]
  7. def test___lt__(self):
  8. self.assertTrue(L(1) < L(2))
  9. self.assertFalse(L(1) < L(1))
  10. self.assertFalse(L(2) < L(1))
  11. self.assertTrue(L(2) < N('+', L(1), L(2)))
  12. self.assertFalse(N('+', L(1), L(2)) < L(1))
  13. self.assertTrue(N('^', L('a'), L(2)) < N('^', L('a'), L(3)))
  14. self.assertTrue(N('^', L(2), L('a')) < N('^', L(3), L('a')))
  15. self.assertTrue(N('*', L(2), N('^', L('a'), L('b')))
  16. < N('*', L(3), N('^', L('a'), L('b'))))
  17. self.assertFalse(N('^', L('a'), L(3)) < N('^', L('a'), L(2)))
  18. def test_is_power_true(self):
  19. self.assertTrue(N('^', *self.l[:2]).is_power())
  20. self.assertFalse(N('+', *self.l[:2]).is_power())
  21. def test_is_nary(self):
  22. self.assertTrue(N('+', *self.l[:2]).is_nary())
  23. self.assertTrue(N('-', *self.l[:2]).is_nary())
  24. self.assertTrue(N('*', *self.l[:2]).is_nary())
  25. self.assertFalse(N('^', *self.l[:2]).is_nary())
  26. def test_is_identifier(self):
  27. self.assertTrue(L('a').is_identifier())
  28. self.assertFalse(L(1).is_identifier())
  29. def test_is_int(self):
  30. self.assertTrue(L(1).is_int())
  31. self.assertFalse(L(1.5).is_int())
  32. self.assertFalse(L('a').is_int())
  33. def test_is_float(self):
  34. self.assertTrue(L(1.5).is_float())
  35. self.assertFalse(L(1).is_float())
  36. self.assertFalse(L('a').is_float())
  37. def test_is_numeric(self):
  38. self.assertTrue(L(1).is_numeric())
  39. self.assertTrue(L(1.5).is_numeric())
  40. self.assertFalse(L('a').is_numeric())
  41. def test_extract_polynome_properties_identifier(self):
  42. self.assertEqual(L('a').extract_polynome_properties(),
  43. (L(1), L('a'), L(1)))
  44. def test_extract_polynome_properties_None(self):
  45. self.assertIsNone(N('+').extract_polynome_properties())
  46. def test_extract_polynome_properties_power(self):
  47. power = N('^', L('a'), L(2))
  48. self.assertEqual(power.extract_polynome_properties(),
  49. (L(1), L('a'), L(2)))
  50. def test_extract_polynome_properties_coefficient_exponent_int(self):
  51. times = N('*', L(3), N('^', L('a'), L(2)))
  52. self.assertEqual(times.extract_polynome_properties(),
  53. (L(3), L('a'), L(2)))
  54. def test_extract_polynome_properties_coefficient_exponent_id(self):
  55. times = N('*', L(3), N('^', L('a'), L('b')))
  56. self.assertEqual(times.extract_polynome_properties(),
  57. (L(3), L('a'), L('b')))
  58. def test_get_scope_binary(self):
  59. plus = N('+', *self.l[:2])
  60. self.assertEqual(plus.get_scope(), self.l[:2])
  61. def test_get_scope_nested_left(self):
  62. plus = N('+', N('+', *self.l[:2]), self.l[2])
  63. self.assertEqual(plus.get_scope(), self.l[:3])
  64. def test_get_scope_nested_right(self):
  65. plus = N('+', self.l[0], N('+', *self.l[1:3]))
  66. self.assertEqual(plus.get_scope(), self.l[:3])
  67. def test_get_scope_nested_deep(self):
  68. plus = N('+', N('+', N('+', *self.l[:2]), self.l[2]), self.l[3])
  69. self.assertEqual(plus.get_scope(), self.l)
  70. def test_equals_node_leaf(self):
  71. a, b = plus = tree('a + b')
  72. self.assertFalse(a.equals(plus))
  73. self.assertFalse(plus.equals(a))
  74. def test_equals_other_op(self):
  75. plus, mul = tree('a + b, a * b')
  76. self.assertFalse(plus.equals(mul))
  77. def test_equals_add(self):
  78. p0, p1, p2, p3 = tree('a + b,a + b,b + a, a + c')
  79. self.assertTrue(p0.equals(p1))
  80. self.assertTrue(p0.equals(p2))
  81. self.assertFalse(p0.equals(p3))
  82. self.assertFalse(p2.equals(p3))
  83. def test_equals_mul(self):
  84. m0, m1, m2, m3 = tree('a * b,a * b,b * a, a * c')
  85. self.assertTrue(m0.equals(m1))
  86. self.assertTrue(m0.equals(m2))
  87. self.assertFalse(m0.equals(m3))
  88. self.assertFalse(m2.equals(m3))
  89. def test_equals_nary(self):
  90. p0, p1, p2, p3, p4 = \
  91. tree('a + b + c,a + c + b,b + a + c,b + c + a, a + b + d')
  92. self.assertTrue(p0.equals(p1))
  93. self.assertTrue(p0.equals(p2))
  94. self.assertTrue(p0.equals(p3))
  95. self.assertTrue(p1.equals(p2))
  96. self.assertTrue(p1.equals(p3))
  97. self.assertTrue(p2.equals(p3))
  98. self.assertFalse(p2.equals(p4))
  99. def test_equals_nary_mary(self):
  100. m0, m1 = tree('ab,2ab')
  101. self.assertFalse(m0.equals(m1))
  102. def test_equals_div(self):
  103. d0, d1, d2 = tree('a / b,a / b,b / a')
  104. self.assertTrue(d0.equals(d1))
  105. self.assertFalse(d0.equals(d2))