test_leiden_oefenopgave.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. '-5 * x ^ 2 - 5 * -3x - 5 * 6',
  6. '-5 * x ^ 2 - -15x - 5 * 6',
  7. # FIXME: '-5 * x ^ 2 - 5 * -3x - 30',
  8. # FIXME: '-5 * x ^ 2 - -15x - 5 * 6',
  9. # FIXME: '-5 * x ^ 2 + 15x - 5 * 6',
  10. # FIXME: '-5 * x ^ 2 + 15x - 30',
  11. ], #'-30 + 15 * x - 5 * x ^ 2'],
  12. ]:
  13. self.assertRewrite(chain)
  14. return
  15. for exp, solution in [
  16. ('-5(x2 - 3x + 6)', '-30 + 15 * x - 5 * x ^ 2'),
  17. ('(x+1)^2', 'x ^ 2 + 2 * x + 1'),
  18. ('(x-1)^2', 'x ^ 2 - 2 * x + 1'),
  19. ('(2x+x)*x', '3 * x ^ 2'),
  20. ('-2(6x-4)^2*x', '-72 * x^3 + 96 * x ^ 2 + 32 * x'),
  21. ('(4x + 5) * -(5 - 4x)', '16x^2 - 25'),
  22. ]:
  23. self.assertEqual(str(rewrite(exp)), solution)
  24. def test_1_2(self):
  25. for chain in [['(x+1)^3', '(x + 1)(x + 1) ^ 2',
  26. '(x + 1)(x + 1)(x + 1)',
  27. '(xx + x * 1 + 1x + 1 * 1)(x + 1)',
  28. '(x ^ (1 + 1) + x * 1 + 1x + 1 * 1)(x + 1)',
  29. '(x ^ 2 + x * 1 + 1x + 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. 'x * x ^ 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 + x ^ (1 + 1) * 2 + (x ^ 2 + 2x) * 1 + 1x + 1 * 1',
  38. 'x ^ 3 + x ^ 2 * 2 + (x ^ 2 + 2x) * 1 + 1x + 1 * 1',
  39. 'x ^ 3 + x ^ 2 * 2 + 1 * x ^ 2 + 1 * 2x + 1x + 1 * 1',
  40. 'x ^ 3 + (2 + 1) * x ^ 2 + 1 * 2x + 1x + 1 * 1',
  41. 'x ^ 3 + 3 * x ^ 2 + 1 * 2x + 1x + 1 * 1',
  42. 'x ^ 3 + 3 * x ^ 2 + 2x + 1x + 1 * 1',
  43. 'x ^ 3 + 3 * x ^ 2 + (2 + 1)x + 1 * 1',
  44. 'x ^ 3 + 3 * x ^ 2 + 3x + 1 * 1',
  45. 'x ^ 3 + 3 * x ^ 2 + 3x + 1',
  46. ]
  47. ]:
  48. self.assertRewrite(chain)
  49. def test_1_3(self):
  50. # (x+1)^2 -> x^2 + 2x + 1
  51. for chain in [['(x+1)^2', '(x + 1)(x + 1)',
  52. 'xx + x * 1 + 1x + 1 * 1',
  53. 'x ^ (1 + 1) + x * 1 + 1x + 1 * 1',
  54. 'x ^ 2 + x * 1 + 1x + 1 * 1',
  55. 'x ^ 2 + (1 + 1)x + 1 * 1',
  56. 'x ^ 2 + 2x + 1 * 1',
  57. 'x ^ 2 + 2x + 1'],
  58. ]:
  59. self.assertRewrite(chain)
  60. def test_1_4(self):
  61. # (x-1)^2 -> x^2 - 2x + 1
  62. for chain in [['(x-1)^2', '(x - 1)(x - 1)',
  63. 'xx + x * -1 - 1x - 1 * -1',
  64. 'x ^ (1 + 1) + x * -1 - 1x - 1 * -1',
  65. 'x ^ 2 + x * -1 - 1x - 1 * -1',
  66. # FIXME: 'x ^ 2 + (-1 - 1)x - 1 * -1',
  67. # FIXME: 'x ^ 2 - 2x - 1 * -1',
  68. # FIXME: 'x ^ 2 - 2x + 1',
  69. ]]:
  70. self.assertRewrite(chain)
  71. def test_2(self):
  72. pass
  73. def test_3(self):
  74. pass
  75. def test_4(self):
  76. for exp, solution in [
  77. ('2/15 + 1/4', '8 / 60 + 15 / 60'),
  78. ('8/60 + 15/60', '(8 + 15) / 60'),
  79. ('(8 + 15) / 60', '23 / 60'),
  80. ('2/7 - 4/11', '22 / 77 - 28 / 77'),
  81. ('22/77 - 28/77', '(22 - 28) / 77'),
  82. ('(22 - 28)/77', '-6 / 77'),
  83. # FIXME: ('(7/3) * (3/5)', '7 / 5'),
  84. # FIXME: ('(3/4) / (5/6)', '9 / 10'),
  85. # FIXME: ('1/4 * 1/x', '1 / (4x)'),
  86. # FIXME: ('(3/x^2) / (x/7)', '21 / x^3'),
  87. # FIXME: ('1/x + 2/(x+1)', '(3x + 1) / (x * (x + 1))'),
  88. ]:
  89. self.assertEqual(str(rewrite(exp)), solution)