<filename>test/test_expression.py
#!/usr/bin/env python
# encoding: utf-8



import unittest

from pymath.expression import Expression
from pymath.fraction import Fraction
from pymath.generic import first_elem
from pymath.renders import txt_render


class TestExpression(unittest.TestCase):
    """Testing functions from pymath.expression"""

    def test_init_from_str(self):
        exp = Expression("2 + 3")
        self.assertEqual(exp.infix_tokens, [2, "+", 3])
        self.assertEqual(exp.postfix_tokens, [2, 3, "+"])

    def test_init_from_exp(self):
        pass

    def test_infix_tokens(self):
        pass

    def test_postfix_tokens(self):
        pass

    def test_str2tokens_big_num(self):
        exp = "123 + 3"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, [123, "+", 3])

    def test_str2tokens_beg_minus(self):
        exp = "-123 + 3"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, [-123, "+", 3])

    def test_str2tokens_time_lack(self):
        exp = "(-3)(2)"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, ["(", -3, ")", "*","(", 2, ")" ])

    def test_str2tokens_time_lack2(self):
        exp = "-3(2)"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, [-3, "*","(", 2, ")" ])

    def test_str2tokens_error_float(self):
        exp = "1 + 1.3"
        self.assertRaises(ValueError, Expression.str2tokens, exp)

    def test_str2tokens_error(self):
        exp = "1 + $"
        self.assertRaises(ValueError, Expression.str2tokens, exp)

    def test_doMath(self):
        ops = [\
                {"op": ("+", 1 , 2), "res" : 3}, \
                {"op": ("-", 1 , 2), "res" : -1}, \
                {"op": ("*", 1 , 2), "res" : 2}, \
                {"op": ("/", 1 , 2), "res" : Fraction(1,2)}, \
                {"op": ("^", 1 , 2), "res" : 1}, \
                ]
        for op in ops:
            res = first_elem(Expression.doMath(*op["op"]))
            self.assertAlmostEqual(res, op["res"])

    def test_isNumber(self):
        pass

    def test_isOperator(self):
        pass

    def test_simplify_frac(self):
        exp = Expression("1/2 - 4")
        steps = ["[1, 2, '/', 4, '-']", \
                "[< Fraction 1 / 2>, 4, '-']", \
                "[1, 1, '*', 2, 1, '*', '/', 4, 2, '*', 1, 2, '*', '/', '-']", \
                "[1, 8, '-', 2, '/']", \
                '[< Fraction -7 / 2>]']
        self.assertEqual(steps, list(exp.simplify()))


if __name__ == '__main__':
    unittest.main()


# -----------------------------
# Reglages pour 'vim'
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
# cursor: 16 del 

<filename>test/test_expression.py
#!/usr/bin/env python
# encoding: utf-8



import unittest

from pymath.expression import Expression
from pymath.fraction import Fraction
from pymath.generic import first_elem
from pymath.renders import txt_render


class TestExpression(unittest.TestCase):
    """Testing functions from pymath.expression"""

    def test_init_from_str(self):
        exp = Expression("2 + 3")
        self.assertEqual(exp.infix_tokens, [2, "+", 3])
        self.assertEqual(exp.postfix_tokens, [2, 3, "+"])

    def test_init_from_exp(self):
        pass

    def test_infix_tokens(self):
        pass

    def test_postfix_tokens(self):
        pass

    def test_str2tokens_big_num(self):
        exp = "123 + 3"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, [123, "+", 3])

    def test_str2tokens_beg_minus(self):
        exp = "-123 + 3"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, [-123, "+", 3])

    def test_str2tokens_time_lack(self):
        exp = "(-3)(2)"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, ["(", -3, ")", "*","(", 2, ")" ])

    def test_str2tokens_time_lack2(self):
        exp = "-3(2)"
        tok = Expression.str2tokens(exp)
        self.assertEqual(tok, [-3, "*","(", 2, ")" ])

    def test_str2tokens_error_float(self):
        exp = "1 + 1.3"
        self.assertRaises(ValueError, Expression.str2tokens, exp)

    def test_str2tokens_error(self):
        exp = "1 + $"
        self.assertRaises(ValueError, Expression.str2tokens, exp)

    def test_doMath(self):
        ops = [\
                {"op": ("+", 1 , 2), "res" : 3}, \
                {"op": ("-", 1 , 2), "res" : -1}, \
                {"op": ("*", 1 , 2), "res" : 2}, \
                {"op": ("/", 1 , 2), "res" : Fraction(1,2)}, \
                {"op": ("^", 1 , 2), "res" : 1}, \
                ]
        for op in ops:
            res = first_elem(Expression.doMath(*op["op"]))
            self.assertAlmostEqual(res, op["res"])

    def test_isNumber(self):
        pass

    def test_isOperator(self):
        pass

    def test_simplify_frac(self):
        exp = Expression("1/2 - 4")
        steps = ["[1, 2, '/', 4, '-']", \
                "[< Fraction 1 / 2>, 4, '-']", \
                "[1, 1, '*', 2, 1, '*', '/', 4, 2, '*', 1, 2, '*', '/', '-']", \
                "[1, 8, '-', 2, '/']", \
                '[< Fraction -7 / 2>]']
        self.assertEqual(steps, list(exp.simplify()))


if __name__ == '__main__':
    unittest.main()


# -----------------------------
# Reglages pour 'vim'
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
# cursor: 16 del 

#!/usr/bin/env python # encoding: utf-8 Testing functions from pymath.expression # ----------------------------- # Reglages pour 'vim' # vim:set autoindent expandtab tabstop=4 shiftwidth=4: # cursor: 16 del