1#!/usr/local/bin/python3.8 2# -*- coding: utf-8 -*- 3 4 5import unittest 6from mathics.core.expression import Expression, Integer, Rational, Symbol 7from mathics.core.definitions import Definitions 8from mathics.core.evaluation import Evaluation 9 10 11class ArithmeticTest(unittest.TestCase): 12 def setUp(self): 13 definitions = Definitions(add_builtin=True) 14 self.evaluation = Evaluation(definitions, format="xml") 15 16 def testAdd(self): 17 cases = ( 18 (Symbol("a") + 3, Expression("Plus", 3, Symbol("a"))), 19 (Integer(1) + 3, Integer(4)), 20 (Integer(1) + (-3), Integer(-2)), 21 ( 22 Expression("List", 1, 2) + Expression("List", -1, 8), 23 Expression("List", 0, 10), 24 ), 25 ) 26 self._testCases(cases) 27 28 def testSub(self): 29 cases = ( 30 (Symbol("a") - 3, Expression("Plus", -3, Symbol("a"))), 31 (Integer(1) - 3, Integer(-2)), 32 (Integer(1) - (-3), Integer(4)), 33 ( 34 Expression("List", 1, 2) - Expression("List", -1, 8), 35 Expression("List", 2, -6), 36 ), 37 ) 38 self._testCases(cases) 39 40 def testMul(self): 41 cases = ( 42 (Symbol("a") * 3, Expression("Times", 3, Symbol("a"))), 43 (Integer(3) * 7, Integer(21)), 44 (Integer(3) * (-7), Integer(-21)), 45 ( 46 Expression("List", 1, 2) * Expression("List", -1, 8), 47 Expression("List", -1, 16), 48 ), 49 ) 50 self._testCases(cases) 51 52 def testTrueDiv(self): 53 cases = ( 54 (Symbol("a") / 3, Expression("Times", Rational(1, 3), Symbol("a"))), 55 (Integer(8) / 2, Integer(4)), 56 (Integer(8) / (-2), Integer(-4)), 57 (Integer(7) / 2, Rational(7, 2)), 58 ( 59 Expression("List", 1, 9) / Expression("List", -1, 3), 60 Expression("List", -1, 3), 61 ), 62 ) 63 self._testCases(cases) 64 65 def testFloorDiv(self): 66 cases = ( 67 (Integer(8) // 2, Integer(4)), 68 (Integer(8) // (-2), Integer(-4)), 69 (Integer(7) // 2, Integer(3)), 70 ) 71 self._testCases(cases) 72 73 def testPow(self): 74 cases = ( 75 (Integer(8) ** 2, Integer(64)), 76 ( 77 Expression("List", 2, 5) ** Expression("List", 3, 4), 78 Expression("List", 8, 625), 79 ), 80 ) 81 self._testCases(cases) 82 83 def testAbs(self): 84 cases = ( 85 (abs(Integer(-8)), Integer(8)), 86 (abs(Expression("List")), Expression("Abs", Expression("List"))), 87 ) 88 self._testCases(cases) 89 90 def _testCases(self, cases): 91 for expression, result in cases: 92 self.assertEqual( 93 Expression("FullSimplify", expression).evaluate(self.evaluation), 94 Expression("FullSimplify", result).evaluate(self.evaluation), 95 ) 96 97 98if __name__ == "__main__": 99 unittest.main() 100