示例#1
0
 def test_comparison_operators(self):
     self.assertEqual(1 + 2 * 3 == 1 + 2 * 3,
                      calculation.calculate("1+2*3==1+2*3"))
     self.assertEqual(e**5 >= e**5 + 1,
                      calculation.calculate("e**5>=e**5+1"))
     self.assertEqual(1 + 2 * 4 // 3 + 1 != 1 + 2 * 4 // 3 + 2,
                      calculation.calculate("1+24/3+1!=1+24/3+2"))
示例#2
0
 def test_calculation_func_consts(self):
     expression = "log(e)"
     modules = ['math', ]
     postfix_notation = [Constant(value=2.718281828459045), Function(name='log', func='log', priority=15)]
     with patch.object(PostfixNotation, 'generate_postfix_notation', return_value=postfix_notation) as mock_method:
         post_not = PostfixNotation(expression, modules)
         post_not.generate_postfix_notation()
     mock_method.assert_called_once_with()
     self.assertEqual(math.log(math.e), calculation.calculate(expression))
示例#3
0
 def test_calculation_num(self):
     expression = "123456778"
     modules = ['math', ]
     postfix_notation = [Number(value=123456778.0)]
     with patch.object(PostfixNotation, 'generate_postfix_notation', return_value=postfix_notation) as mock_method:
         post_not = PostfixNotation(expression, modules)
         post_not.generate_postfix_notation()
     mock_method.assert_called_once_with()
     self.assertEqual(123456778, calculation.calculate(expression))
示例#4
0
 def test_operation_priority(self):
     self.assertEqual(5, calculation.calculate("1+2*2"))
     self.assertEqual(25, calculation.calculate("1+(2+3*2)*3"))
     self.assertEqual(30, calculation.calculate("10*(2+1)"))
     self.assertEqual(1000, calculation.calculate("10**(2+1)"))
     self.assertEqual(100 / 3**2, calculation.calculate("100/3**2"))
     self.assertEqual(100 / 3 % 2**2, calculation.calculate("100/3%2**2"))
示例#5
0
 def test_functions_and_constants(self):
     self.assertEqual(pi + e, calculation.calculate("pi+e"))
     self.assertEqual(1, calculation.calculate("log(e)"))
     self.assertEqual(1, calculation.calculate("sin(pi/2)"))
     self.assertEqual(2, calculation.calculate("log10(100)"))
     self.assertEqual(
         sin(pi / 2) * 1116, calculation.calculate("sin(pi/2)1116"))
     self.assertEqual(2, calculation.calculate("2*sin(pi/2)"))
示例#6
0
 def test_calculate(self):
     expression = "(2.0**(pi/pi+e/e+2.0**0.0))"
     modules = ['math', ]
     postfix_notation = [Number(value=2.0), Constant(value=3.141592653589793), Constant(value=3.141592653589793),
                         Operator('/', lambda x, y: x / y, 15, True), Constant(value=2.718281828459045),
                         Constant(value=2.718281828459045), Operator('/', lambda x, y: x / y, 15, True),
                         Operator('+ ', lambda x, y: x + y, 10, True), Number(value=2.0), Number(value=0.0),
                         Operator('**', lambda x, y: x ** y, 20, False),
                         Operator('+ ', lambda x, y: x + y, 10, True), Operator('**', lambda x, y: x ** y, 20, False)]
     with patch.object(PostfixNotation, 'generate_postfix_notation', return_value=postfix_notation) as mock_method:
         post_not = PostfixNotation(expression, modules)
         post_not.generate_postfix_notation()
     mock_method.assert_called_once_with()
     self.assertEqual((2.0**(math.pi/math.pi+math.e/math.e+2.0**0.0)), calculation.calculate(expression))
示例#7
0
 def test_unary_operators(self):
     self.assertEqual(-13, calculation.calculate("-13"))
     self.assertEqual(19, calculation.calculate("6-(-13)"))
     self.assertEqual(0, calculation.calculate("1---1"))
     self.assertEqual(-1, calculation.calculate("-+---+-1"))
示例#8
0
    def test_common_tests(self):
        self.assertEqual(100, calculation.calculate("(100)"))
        self.assertEqual(666, calculation.calculate("666"))
        self.assertEqual(30, calculation.calculate("10(2+1)"))
        self.assertEqual(-0.1, calculation.calculate("-.1"))
        self.assertEqual(1. / 3, calculation.calculate("1/3"))
        self.assertEqual(1.0 / 3.0, calculation.calculate("1.0/3.0"))
        self.assertEqual(.1 * 2.0**56.0,
                         calculation.calculate(".1 * 2.0**56.0"))
        self.assertEqual(e**34, calculation.calculate("e**34"))
        self.assertEqual((2.0**(pi / pi + e / e + 2.0**0.0)),
                         calculation.calculate("(2.0**(pi/pi+e/e+2.0**0.0))"))
        self.assertEqual(
            (2.0**(pi / pi + e / e + 2.0**0.0))**(1.0 / 3.0),
            calculation.calculate("(2.0**(pi/pi+e/e+2.0**0.0))**(1.0/3.0)"))
        self.assertEqual(
            sin(pi / 2**1) + log(1 * 4 + 2**2 + 1, 3**2),
            calculation.calculate("sin(pi/2**1) + log(1*4+2**2+1, 3**2)"))

        self.assertEqual(
            10 * e**0. * log10(.4 * -5 / -0.1 - 10) - -abs(-53 // 10) + -5,
            calculation.calculate(
                "10*e^0*log10(.4* -5/ -0.1-10) - -abs(-53//10) + -5"))
        self.assertEqual(
            sin(-cos(-sin(3.0) -
                     cos(-sin(-3.0 * 5.0) - sin(cos(log10(43.0)))) +
                     cos(sin(sin(34.0 - 2.0**2.0)))) - -cos(1.0) -
                -cos(0.0)**3.0),
            calculation.calculate(
                "sin(-cos(-sin(3.0)-cos(-sin(-3.0*5.0)-sin(cos(log10(43.0))))+cos(sin(sin(34.0-2.0**2.0))))--cos(1.0)--cos(0.0)**3.0)"
            ))
        self.assertEqual(2.0**(2.0**2.0 * 2.0**2.0),
                         calculation.calculate("2.0**(2.0**2.0*2.0**2.0)"))
        self.assertEqual(
            sin(e**log(e**e**sin(23.0), 45.0) + cos(3.0 + log10(e**-e))),
            calculation.calculate(
                "sin(e**log(e**e**sin(23.0),45.0) + cos(3.0+log10(e**-e)))"))
示例#9
0
 def test_associative(self):
     self.assertEqual(102 % 12 % 7, calculation.calculate("102%12%7"))
     self.assertEqual(100 / 4 / 3, calculation.calculate("100/4/3"))
     self.assertEqual(2**3**4, calculation.calculate("2**3**4"))
示例#10
0
def main():
    args = _parse_args()
    expression = args.EXPRESSION
    result = calculation.calculate(expression, args.use_modules)
    print(result)