test_leiden_oefenopgave.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. from tests.rulestestcase import RulesTestCase as TestCase, rewrite
  2. class TestLeidenOefenopgave(TestCase):
  3. def test_1_1(self):
  4. self.assertRewrite([
  5. '-5(x2 - 3x + 6)',
  6. '-(5(x ^ 2 - 3x) + 5 * 6)',
  7. '-(5x ^ 2 + 5(-3x) + 5 * 6)',
  8. '-(5x ^ 2 - 5 * 3x + 5 * 6)',
  9. '-(5x ^ 2 - 15x + 5 * 6)',
  10. '-(5x ^ 2 - 15x + 30)',
  11. '-5x ^ 2 - -15x - 30',
  12. '-5x ^ 2 + 15x - 30',
  13. ])
  14. return
  15. for exp, solution in [
  16. ('-5(x2 - 3x + 6)', '-30 + 15x - 5x ^ 2'),
  17. ('(x+1)^2', 'x ^ 2 + 2x + 1'),
  18. ('(x-1)^2', 'x ^ 2 - 2x + 1'),
  19. ('(2x+x)*x', '3x ^ 2'),
  20. ('-2(6x-4)^2*x', '-72x ^ 3 + 96x ^ 2 + 32x'),
  21. ('(4x + 5) * -(5 - 4x)', '16x^2 - 25'),
  22. ]:
  23. self.assertEqual(str(rewrite(exp)), solution)
  24. def test_1_2(self):
  25. self.assertRewrite([
  26. '(x+1)^3', '(x + 1)(x + 1) ^ 2',
  27. '(x + 1)(x + 1)(x + 1)',
  28. '(xx + x * 1 + 1x + 1 * 1)(x + 1)',
  29. '(x ^ (1 + 1) + x * 1 + 1x + 1 * 1)(x + 1)',
  30. '(x ^ 2 + x * 1 + 1x + 1 * 1)(x + 1)',
  31. '(x ^ 2 + x + 1x + 1 * 1)(x + 1)',
  32. '(x ^ 2 + x + x + 1 * 1)(x + 1)',
  33. '(x ^ 2 + (1 + 1)x + 1 * 1)(x + 1)',
  34. '(x ^ 2 + 2x + 1 * 1)(x + 1)',
  35. '(x ^ 2 + 2x + 1)(x + 1)',
  36. '(x ^ 2 + 2x)x + (x ^ 2 + 2x)1 + 1x + 1 * 1',
  37. 'xx ^ 2 + x * 2x + (x ^ 2 + 2x)1 + 1x + 1 * 1',
  38. 'x ^ (1 + 2) + x * 2x + (x ^ 2 + 2x)1 + 1x + 1 * 1',
  39. 'x ^ 3 + x * 2x + (x ^ 2 + 2x)1 + 1x + 1 * 1',
  40. 'x ^ 3 + x ^ (1 + 1)2 + (x ^ 2 + 2x)1 + 1x + 1 * 1',
  41. 'x ^ 3 + x ^ 2 * 2 + (x ^ 2 + 2x)1 + 1x + 1 * 1',
  42. 'x ^ 3 + x ^ 2 * 2 + 1x ^ 2 + 1 * 2x + 1x + 1 * 1',
  43. 'x ^ 3 + x ^ 2 * 2 + x ^ 2 + 1 * 2x + 1x + 1 * 1',
  44. 'x ^ 3 + (2 + 1)x ^ 2 + 1 * 2x + 1x + 1 * 1',
  45. 'x ^ 3 + 3x ^ 2 + 1 * 2x + 1x + 1 * 1',
  46. 'x ^ 3 + 3x ^ 2 + 2x + 1x + 1 * 1',
  47. 'x ^ 3 + 3x ^ 2 + 2x + x + 1 * 1',
  48. 'x ^ 3 + 3x ^ 2 + (2 + 1)x + 1 * 1',
  49. 'x ^ 3 + 3x ^ 2 + 3x + 1 * 1',
  50. 'x ^ 3 + 3x ^ 2 + 3x + 1',
  51. ])
  52. def test_1_3(self):
  53. # (x+1)^2 -> x^2 + 2x + 1
  54. self.assertRewrite([
  55. '(x+1)^2', '(x + 1)(x + 1)',
  56. 'xx + x * 1 + 1x + 1 * 1',
  57. 'x ^ (1 + 1) + x * 1 + 1x + 1 * 1',
  58. 'x ^ 2 + x * 1 + 1x + 1 * 1',
  59. 'x ^ 2 + x + 1x + 1 * 1',
  60. 'x ^ 2 + x + x + 1 * 1',
  61. 'x ^ 2 + (1 + 1)x + 1 * 1',
  62. 'x ^ 2 + 2x + 1 * 1',
  63. 'x ^ 2 + 2x + 1',
  64. ])
  65. def test_1_4(self):
  66. # (x-1)^2 -> x^2 - 2x + 1
  67. self.assertRewrite([
  68. '(x - 1) ^ 2',
  69. '(x - 1)(x - 1)',
  70. 'xx + x(-1) + (-1)x + (-1)(-1)',
  71. 'x ^ (1 + 1) + x(-1) + (-1)x + (-1)(-1)',
  72. 'x ^ 2 + x(-1) + (-1)x + (-1)(-1)',
  73. 'x ^ 2 - x * 1 + (-1)x + (-1)(-1)',
  74. 'x ^ 2 - x + (-1)x + (-1)(-1)',
  75. 'x ^ 2 - x - 1x + (-1)(-1)',
  76. 'x ^ 2 - x - x + (-1)(-1)',
  77. 'x ^ 2 + (1 + 1)(-x) + (-1)(-1)',
  78. 'x ^ 2 + 2(-x) + (-1)(-1)',
  79. 'x ^ 2 - 2x + (-1)(-1)',
  80. 'x ^ 2 - 2x - -1',
  81. 'x ^ 2 - 2x + 1',
  82. ])
  83. def test_1_4_1(self):
  84. self.assertRewrite([
  85. 'x * -1 + 1x',
  86. '-x * 1 + 1x',
  87. '-x + 1x',
  88. '-x + x',
  89. '(-1 + 1)x',
  90. '0x',
  91. '0',
  92. ])
  93. def test_1_4_2(self):
  94. self.assertRewrite([
  95. 'x * -1 - 1x',
  96. '-x * 1 - 1x',
  97. '-x - 1x',
  98. '-x - x',
  99. '(1 + 1)(-x)',
  100. '2(-x)',
  101. '-2x',
  102. ])
  103. def test_1_4_3(self):
  104. self.assertRewrite([
  105. 'x * -1 + x * -1',
  106. '-x * 1 + x(-1)',
  107. '-x + x(-1)',
  108. '-x - x * 1',
  109. '-x - x',
  110. '(1 + 1)(-x)',
  111. '2(-x)',
  112. '-2x',
  113. ])
  114. def test_1_5(self):
  115. self.assertRewrite([
  116. '(2x + x)x',
  117. '(2 + 1)xx',
  118. '3xx',
  119. '3x ^ (1 + 1)',
  120. '3x ^ 2',
  121. ])
  122. def test_1_7(self):
  123. self.assertRewrite([
  124. '(4x + 5) * -(5 - 4x)',
  125. '(4x + 5)(-5 - -4x)',
  126. '(4x + 5)(-5 + 4x)',
  127. '4x(-5) + 4x * 4x + 5(-5) + 5 * 4x',
  128. '(-20)x + 4x * 4x + 5(-5) + 5 * 4x',
  129. '-20x + 4x * 4x + 5(-5) + 5 * 4x',
  130. '-20x + 16xx + 5(-5) + 5 * 4x',
  131. '-20x + 16x ^ (1 + 1) + 5(-5) + 5 * 4x',
  132. '-20x + 16x ^ 2 + 5(-5) + 5 * 4x',
  133. '-20x + 16x ^ 2 - 25 + 5 * 4x',
  134. '-20x + 16x ^ 2 - 25 + 20x',
  135. '(-1 + 1)20x + 16x ^ 2 - 25',
  136. '0 * 20x + 16x ^ 2 - 25',
  137. '0x + 16x ^ 2 - 25',
  138. '0 + 16x ^ 2 - 25',
  139. '16x ^ 2 - 25',
  140. ])
  141. def test_2(self):
  142. pass
  143. def test_3(self):
  144. pass
  145. def test_4_1(self):
  146. self.assertRewrite([
  147. '2/15 + 1/4',
  148. '8 / 60 + 15 / 60',
  149. '(8 + 15) / 60',
  150. '23 / 60',
  151. ])
  152. def test_4_2(self):
  153. self.assertRewrite([
  154. '2/7 - 4/11',
  155. '22 / 77 - 28 / 77',
  156. '(22 - 28) / 77',
  157. '(-6) / 77',
  158. '-6 / 77',
  159. ])
  160. def test_4_3(self):
  161. self.assertRewrite([
  162. '(7/3)(3/5)',
  163. '7 * 3 / (3 * 5)',
  164. '21 / (3 * 5)',
  165. '21 / 15',
  166. '7 / 5',
  167. ])
  168. #def test_4_4(self):
  169. # self.assertRewrite(['(3/4) / (5/6)', '9 / 10'])
  170. def test_4_5(self):
  171. self.assertRewrite([
  172. '1/4 * 1/x',
  173. '1 / 4 / x',
  174. '1 / (4x)',
  175. ])
  176. #def test_4_6(self):
  177. # self.assertRewrite(['(3/x^2) / (x/7)', '21 / x^3'])
  178. #def test_4_7(self):
  179. # self.assertRewrite(['1/x + 2/(x+1)', '(3x + 1) / (x * (x + 1))'])