test_leiden_oefenopgave.py 6.5 KB

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