from tests.rulestestcase import RulesTestCase as TestCase, rewrite class TestLeidenOefenopgave(TestCase): def test_1_1(self): self.assertRewrite([ '-5(x ^ 2 - 3x + 6)', '-(5x ^ 2 + 5(-3x) + 5 * 6)', '-(5x ^ 2 - 5 * 3x + 5 * 6)', '-(5x ^ 2 - 15x + 5 * 6)', '-(5x ^ 2 - 15x + 30)', '-5x ^ 2 - -15x - 30', '-5x ^ 2 + 15x - 30', ]) return for exp, solution in [ ('-5(x^2 - 3x + 6)', '-30 + 15x - 5x ^ 2'), ('(x+1)^2', 'x ^ 2 + 2x + 1'), ('(x-1)^2', 'x ^ 2 - 2x + 1'), ('(2x+x)*x', '3x ^ 2'), ('-2(6x-4)^2*x', '-72x ^ 3 + 96x ^ 2 + 32x'), ('(4x + 5) * -(5 - 4x)', '16x^2 - 25'), ]: self.assertEqual(str(rewrite(exp)), solution) def test_1_2(self): self.assertRewrite([ '(x+1)^3', '(x + 1)(x + 1) ^ 2', '(x + 1)(x + 1)(x + 1)', '(xx + x * 1 + 1x + 1 * 1)(x + 1)', '(x ^ (1 + 1) + x * 1 + 1x + 1 * 1)(x + 1)', '(x ^ 2 + x * 1 + 1x + 1 * 1)(x + 1)', '(x ^ 2 + x + 1x + 1 * 1)(x + 1)', '(x ^ 2 + x + x + 1 * 1)(x + 1)', '(x ^ 2 + x + x + 1)(x + 1)', '(x ^ 2 + (1 + 1)x + 1)(x + 1)', '(x ^ 2 + 2x + 1)(x + 1)', 'x ^ 2 * x + x ^ 2 * 1 + 2xx + 2x * 1 + 1x + 1 * 1', 'x ^ (2 + 1) + x ^ 2 * 1 + 2xx + 2x * 1 + 1x + 1 * 1', 'x ^ 3 + x ^ 2 * 1 + 2xx + 2x * 1 + 1x + 1 * 1', 'x ^ 3 + x ^ 2 + 2xx + 2x * 1 + 1x + 1 * 1', 'x ^ 3 + x ^ 2 + 2x ^ (1 + 1) + 2x * 1 + 1x + 1 * 1', 'x ^ 3 + x ^ 2 + 2x ^ 2 + 2x * 1 + 1x + 1 * 1', 'x ^ 3 + x ^ 2 + 2x ^ 2 + 2x + 1x + 1 * 1', 'x ^ 3 + x ^ 2 + 2x ^ 2 + 2x + x + 1 * 1', 'x ^ 3 + x ^ 2 + 2x ^ 2 + 2x + x + 1', 'x ^ 3 + (1 + 2)x ^ 2 + 2x + x + 1', 'x ^ 3 + 3x ^ 2 + 2x + x + 1', 'x ^ 3 + 3x ^ 2 + (2 + 1)x + 1', 'x ^ 3 + 3x ^ 2 + 3x + 1', ]) def test_1_3(self): # (x+1)^2 -> x^2 + 2x + 1 self.assertRewrite([ '(x+1)^2', '(x + 1)(x + 1)', 'xx + x * 1 + 1x + 1 * 1', 'x ^ (1 + 1) + x * 1 + 1x + 1 * 1', 'x ^ 2 + x * 1 + 1x + 1 * 1', 'x ^ 2 + x + 1x + 1 * 1', 'x ^ 2 + x + x + 1 * 1', 'x ^ 2 + x + x + 1', 'x ^ 2 + (1 + 1)x + 1', 'x ^ 2 + 2x + 1', ]) def test_1_4(self): # (x-1)^2 -> x^2 - 2x + 1 self.assertRewrite([ '(x - 1) ^ 2', '(x - 1)(x - 1)', 'xx + x(-1) + (-1)x + (-1)(-1)', 'x ^ (1 + 1) + x(-1) + (-1)x + (-1)(-1)', 'x ^ 2 + x(-1) + (-1)x + (-1)(-1)', 'x ^ 2 - x * 1 + (-1)x + (-1)(-1)', 'x ^ 2 - x + (-1)x + (-1)(-1)', 'x ^ 2 - x - 1x + (-1)(-1)', 'x ^ 2 - x - x + (-1)(-1)', 'x ^ 2 - x - x - -1', 'x ^ 2 - x - x + 1', 'x ^ 2 + (1 + 1)(-x) + 1', 'x ^ 2 + 2(-x) + 1', 'x ^ 2 - 2x + 1', ]) def test_1_4_1(self): self.assertRewrite([ 'x * -1 + 1x', '-x * 1 + 1x', '-x + 1x', '-x + x', '(-1 + 1)x', '0x', '0', ]) def test_1_4_2(self): self.assertRewrite([ 'x * -1 - 1x', '-x * 1 - 1x', '-x - 1x', '-x - x', '(1 + 1)(-x)', '2(-x)', '-2x', ]) def test_1_4_3(self): self.assertRewrite([ 'x * -1 + x * -1', '-x * 1 + x(-1)', '-x + x(-1)', '-x - x * 1', '-x - x', '(1 + 1)(-x)', '2(-x)', '-2x', ]) def test_1_5(self): self.assertRewrite([ '(2x + x)x', '(2 + 1)xx', '3xx', '3x ^ (1 + 1)', '3x ^ 2', ]) def test_1_7(self): self.assertRewrite([ '(4x + 5) * -(5 - 4x)', '(4x + 5)(-5 - -4x)', '(4x + 5)(-5 + 4x)', '4x(-5) + 4x * 4x + 5(-5) + 5 * 4x', '(-20)x + 4x * 4x + 5(-5) + 5 * 4x', '-20x + 4x * 4x + 5(-5) + 5 * 4x', '-20x + 16xx + 5(-5) + 5 * 4x', '-20x + 16x ^ (1 + 1) + 5(-5) + 5 * 4x', '-20x + 16x ^ 2 + 5(-5) + 5 * 4x', '-20x + 16x ^ 2 - 25 + 5 * 4x', '-20x + 16x ^ 2 - 25 + 20x', '(-1 + 1)20x + 16x ^ 2 - 25', '0 * 20x + 16x ^ 2 - 25', '0 + 16x ^ 2 - 25', '16x ^ 2 - 25', ]) def test_2(self): pass def test_3(self): pass def test_4_1(self): self.assertRewrite([ '2/15 + 1/4', '8 / 60 + 15 / 60', '(8 + 15) / 60', '23 / 60', ]) def test_4_2(self): self.assertRewrite([ '2/7 - 4/11', '22 / 77 - 28 / 77', '(22 - 28) / 77', '(-6) / 77', '-6 / 77', ]) def test_4_3(self): self.assertRewrite([ '(7/3)(3/5)', '(7 * 3) / (3 * 5)', '7 / 5', ]) #def test_4_4(self): # self.assertRewrite(['(3/4) / (5/6)', '9 / 10']) def test_4_5(self): self.assertRewrite([ '1/4 * 1/x', '(1 * 1) / (4x)', '1 / (4x)', ]) #def test_4_6(self): # self.assertRewrite(['(3/x^2) / (x/7)', '21 / x^3']) #def test_4_7(self): # self.assertRewrite(['1/x + 2/(x+1)', '(3x + 1) / (x * (x + 1))'])