2014-11-11 09:45:45 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
|
2016-01-07 16:56:30 +00:00
|
|
|
from pymath.calculus.polynom import Polynom
|
|
|
|
from pymath.calculus.fraction import Fraction
|
|
|
|
from pymath.calculus.expression import Expression
|
|
|
|
from pymath.calculus.render import txt
|
2016-02-27 09:14:21 +00:00
|
|
|
from pymath.calculus.operator import op
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestPolynom(unittest.TestCase):
|
2016-01-07 16:56:30 +00:00
|
|
|
"""Testing functions from pymath.calculus.polynom"""
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-12-21 18:13:34 +00:00
|
|
|
def setup(self):
|
|
|
|
Expression.set_render(txt)
|
|
|
|
|
2014-11-11 09:45:45 +00:00
|
|
|
def test_init(self):
|
|
|
|
p = Polynom([1, 2, 3], "x")
|
|
|
|
|
|
|
|
def test_init_multi(self):
|
|
|
|
p = Polynom([1, [2, 3], 4], "x")
|
|
|
|
|
2016-02-13 03:49:37 +00:00
|
|
|
# def test_init_arith(self):
|
2014-11-11 20:51:03 +00:00
|
|
|
# p = Polynom([1, [2, 3, "+"], 4], "x")
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2016-02-13 03:49:37 +00:00
|
|
|
# def test_init_arith_2(self):
|
2014-11-11 20:51:03 +00:00
|
|
|
# p = Polynom([1, [[2, 3, "*"],3], 4], "x")
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
def test_deg(self):
|
|
|
|
pass
|
|
|
|
|
2014-12-21 18:13:34 +00:00
|
|
|
def test_eval_base(self):
|
|
|
|
p = Polynom([1, 2])
|
2015-03-07 08:15:21 +00:00
|
|
|
self.assertEqual(p(3), 7)
|
2014-12-21 18:13:34 +00:00
|
|
|
|
|
|
|
def test_eval_const(self):
|
|
|
|
p = Polynom([1])
|
2015-03-07 08:15:21 +00:00
|
|
|
self.assertEqual(p(3), 1)
|
2014-12-21 18:13:34 +00:00
|
|
|
|
|
|
|
def test_eval_const_neg(self):
|
|
|
|
p = Polynom([-1])
|
2015-03-07 08:15:21 +00:00
|
|
|
self.assertEqual(p(3), -1)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-12-22 14:32:17 +00:00
|
|
|
def test_eval_poly(self):
|
|
|
|
p = Polynom([1, 2])
|
2016-02-13 03:49:37 +00:00
|
|
|
self.assertEqual(p("h+1"), Polynom([3, 2], "h"))
|
2014-12-22 09:13:20 +00:00
|
|
|
|
2014-11-11 20:51:03 +00:00
|
|
|
def test_postfix(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([1, 2, 3])
|
2016-02-27 09:14:21 +00:00
|
|
|
ans = [3, 'x', 2, op.pw, op.mul, 2, 'x', op.mul, op.add, 1, op.add]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-11-11 20:51:03 +00:00
|
|
|
def test_postfix_monom(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([0, 2])
|
2016-02-27 09:14:21 +00:00
|
|
|
ans = [2, "x", op.mul]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-11-11 20:51:03 +00:00
|
|
|
def test_postfix_0_coef(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([0, 2, 0, 4])
|
2016-02-27 09:14:21 +00:00
|
|
|
ans = [4, 'x', 3, op.pw, op.mul, 2, 'x', op.mul, op.add]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-11-11 20:51:03 +00:00
|
|
|
def test_postfix_1_coef(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([0, 1, 1])
|
2016-02-27 09:14:21 +00:00
|
|
|
ans = ["x", 2, op.pw, "x", op.add]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-11-11 20:51:03 +00:00
|
|
|
def test_postfix_neg_coef(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([-1, -2, -3])
|
2016-03-11 15:16:19 +00:00
|
|
|
ans = [-3, 'x', 2, op.pw, op.mul, -2, 'x', op.mul, op.add, -1, op.add]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-11-11 20:51:03 +00:00
|
|
|
def test_postfix_multi_coef(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([1, [2, 3], 4])
|
2016-02-27 09:14:21 +00:00
|
|
|
ans = [4, 'x', 2, op.pw, op.mul, 2, 'x', op.mul, op.add, 3, 'x', op.mul, op.add, 1, op.add]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2016-03-11 15:16:19 +00:00
|
|
|
def test_postfix_exp_coef(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([1, Expression([2, 3, "+"]), 4])
|
2016-02-27 09:14:21 +00:00
|
|
|
ans = [4, 'x', 2, op.pw, op.mul, 2, 3, op.add, 'x', op.mul, op.add, 1, op.add]
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(ans, p.postfix_tokens)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2016-03-11 15:16:19 +00:00
|
|
|
def test_str(self):
|
|
|
|
p = Polynom([1, 2, 3])
|
|
|
|
ans = '3 x^{ 2 } + 2 x + 1'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
|
|
|
def test_str_monom(self):
|
|
|
|
p = Polynom([0, 2])
|
|
|
|
ans = '2 x'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
|
|
|
def test_str_0_coef(self):
|
|
|
|
p = Polynom([0, 2, 0, 4])
|
|
|
|
ans = '4 x^{ 3 } + 2 x'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
|
|
|
def test_str_1_coef(self):
|
|
|
|
p = Polynom([0, 1, 1])
|
|
|
|
ans = 'x^{ 2 } + x'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
|
|
|
def test_str_neg_coef(self):
|
|
|
|
p = Polynom([-1, -2, -3])
|
|
|
|
ans = '-3 x^{ 2 } - 2 x - 1'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
|
|
|
def test_str_multi_coef(self):
|
|
|
|
p = Polynom([1, [2, 3], 4])
|
|
|
|
ans = '4 x^{ 2 } + 2 x + 3 x + 1'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
|
|
|
def test_str_exp_coef(self):
|
|
|
|
p = Polynom([1, Expression([2, 3, "+"]), 4])
|
|
|
|
ans = '4 x^{ 2 } + ( 2 + 3 ) x + 1'
|
|
|
|
self.assertEqual(ans, str(p))
|
|
|
|
|
2015-02-28 21:52:28 +00:00
|
|
|
def test_reduce_nilpo(self):
|
|
|
|
p = Polynom([1, 2, 3])
|
|
|
|
self.assertEqual(p, p.reduce())
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
def test_reduce(self):
|
|
|
|
p = Polynom([1, [2, 3], 4])
|
2016-02-13 03:49:37 +00:00
|
|
|
ans = '4 x^{ 2 } + 5 x + 1'
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(str(p.reduce()), ans)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
def test_add_int(self):
|
|
|
|
p = Polynom([1, 2, 3])
|
2015-02-28 21:52:28 +00:00
|
|
|
q = p + 2
|
|
|
|
ans = '3 x^{ 2 } + 2 x + 3'
|
|
|
|
self.assertEqual(str(q), ans)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
def test_add_frac(self):
|
|
|
|
p = Polynom([1, 2, 3])
|
|
|
|
f = Fraction(1, 2)
|
2015-02-28 21:52:28 +00:00
|
|
|
q = p + f
|
|
|
|
ans = '3 x^{ 2 } + 2 x + \\frac{ 3 }{ 2 }'
|
2016-02-13 03:49:37 +00:00
|
|
|
self.assertEqual(str(q), ans)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
def test_add_poly(self):
|
|
|
|
p = Polynom([1, 0, 3])
|
|
|
|
q = Polynom([0, 2, 3])
|
2015-02-28 21:52:28 +00:00
|
|
|
r = p + q
|
|
|
|
ans = '6 x^{ 2 } + 2 x + 1'
|
|
|
|
self.assertEqual(str(r), ans)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
2014-12-21 07:53:10 +00:00
|
|
|
def test_sub_int(self):
|
|
|
|
p = Polynom([1, 2, 3])
|
2015-02-28 21:52:28 +00:00
|
|
|
q = p - 2
|
|
|
|
ans = '3 x^{ 2 } + 2 x - 1'
|
2016-02-13 03:49:37 +00:00
|
|
|
self.assertEqual(str(q), ans)
|
2014-12-21 07:53:10 +00:00
|
|
|
|
|
|
|
def test_sub_frac(self):
|
|
|
|
p = Polynom([1, 2, 3])
|
|
|
|
f = Fraction(1, 2)
|
2015-02-28 21:52:28 +00:00
|
|
|
q = p - f
|
|
|
|
ans = '3 x^{ 2 } + 2 x + \\frac{ 1 }{ 2 }'
|
|
|
|
self.assertEqual(str(q), ans)
|
2014-12-21 07:53:10 +00:00
|
|
|
|
|
|
|
def test_sub_poly(self):
|
|
|
|
p = Polynom([1, 0, 2])
|
|
|
|
q = Polynom([0, 2, 3])
|
2015-02-28 21:52:28 +00:00
|
|
|
r = p - q
|
|
|
|
ans = '- x^{ 2 } - 2 x + 1'
|
|
|
|
self.assertEqual(str(r), ans)
|
2014-12-21 07:53:10 +00:00
|
|
|
|
2014-12-22 14:54:07 +00:00
|
|
|
def test_pow_monome(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([0, -2])
|
2015-02-28 21:52:28 +00:00
|
|
|
r = p**3
|
2016-03-10 14:25:13 +00:00
|
|
|
ans = '-8 x^{ 3 }'
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(str(r), ans)
|
2014-12-21 07:53:10 +00:00
|
|
|
|
2014-12-22 14:54:07 +00:00
|
|
|
def test_pow2_monome(self):
|
2016-02-13 03:49:37 +00:00
|
|
|
p = Polynom([0, -2])
|
|
|
|
r = p ^ 3
|
2016-03-10 14:25:13 +00:00
|
|
|
ans = '-8 x^{ 3 }'
|
2015-02-28 21:52:28 +00:00
|
|
|
self.assertEqual(str(r), ans)
|
2014-11-11 09:45:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|
|
|
|
|
|
|
|
|
|
|
|
# -----------------------------
|
|
|
|
# Reglages pour 'vim'
|
|
|
|
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
2016-02-13 03:29:26 +00:00
|
|
|
# cursor: 16 del
|