14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# Python test set -- math module 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# XXXX Should not do tests around zero only 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test.test_support import run_unittest, verbose 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport math 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport sys 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport random 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport struct 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoeps = 1E-05 134adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoNAN = float('nan') 144adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoINF = float('inf') 154adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoNINF = float('-inf') 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# decorator for skipping tests on non-IEEE 754 platforms 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaorequires_IEEE_754 = unittest.skipUnless( 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float.__getformat__("double").startswith("IEEE"), 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "test requires IEEE 754 doubles") 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# detect evidence of double-rounding: fsum is not always correctly 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# rounded on machines that suffer from double rounding. 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaox, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer 254adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoHAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4) 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao# locate file with test values 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == '__main__': 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = sys.argv[0] 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoelse: 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao file = __file__ 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotest_dir = os.path.dirname(file) or os.curdir 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaomath_testcases = os.path.join(test_dir, 'math_testcases.txt') 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotest_file = os.path.join(test_dir, 'cmath_testcases.txt') 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef to_ulps(x): 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Convert a non-NaN float x to an integer, in such a way that 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao adjacent floats are converted to adjacent integers. Then 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abs(ulps(x) - ulps(y)) gives the difference in ulps between two 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao floats. 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao The results from this function will only make sense on platforms 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao where C doubles are represented in IEEE 754 binary64 format. 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao n = struct.unpack('<q', struct.pack('<d', x))[0] 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if n < 0: 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao n = ~(n+2**63) 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return n 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef ulps_check(expected, got, ulps=20): 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Given non-NaN floats `expected` and `got`, 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao check that they're equal to within the given number of ulps. 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Returns None on success and an error message on failure.""" 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ulps_error = to_ulps(got) - to_ulps(expected) 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if abs(ulps_error) <= ulps: 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return None 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return "error = {} ulps; permitted error = {} ulps".format(ulps_error, 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ulps) 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef acc_check(expected, got, rel_err=2e-15, abs_err = 5e-323): 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Determine whether non-NaN floats a and b are equal to within a 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (small) rounding error. The default values for rel_err and 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abs_err are chosen to be suitable for platforms where a float is 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao represented by an IEEE 754 double. They allow an error of between 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9 and 19 ulps.""" 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # need to special case infinities, since inf - inf gives nan 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if math.isinf(expected) and got == expected: 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return None 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao error = got - expected 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao permitted_error = max(abs_err, rel_err * abs(expected)) 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if abs(error) < permitted_error: 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return None 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return "error = {}; permitted error = {}".format(error, 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao permitted_error) 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef parse_mtestfile(fname): 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Parse a file with test values 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -- starts a comment 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao blank lines, or lines containing only a comment, are ignored 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao other lines are expected to have the form 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao id fn arg -> expected [flag]* 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(fname) as fp: 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for line in fp: 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # strip comments, and skip blank lines 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if '--' in line: 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao line = line[:line.index('--')] 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not line.strip(): 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lhs, rhs = line.split('->') 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao id, fn, arg = lhs.split() 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao rhs_pieces = rhs.split() 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exp = rhs_pieces[0] 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao flags = rhs_pieces[1:] 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yield (id, fn, float(arg), float(exp), flags) 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef parse_testfile(fname): 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Parse a file with test values 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Empty lines or lines starting with -- are ignored 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yields id, fn, arg_real, arg_imag, exp_real, exp_imag 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with open(fname) as fp: 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for line in fp: 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # skip comment lines and blank lines 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if line.startswith('--') or not line.strip(): 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lhs, rhs = line.split('->') 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao id, fn, arg_real, arg_imag = lhs.split() 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao rhs_pieces = rhs.split() 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao exp_real, exp_imag = rhs_pieces[0], rhs_pieces[1] 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao flags = rhs_pieces[2:] 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yield (id, fn, 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float(arg_real), float(arg_imag), 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float(exp_real), float(exp_imag), 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao flags 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass MathTests(unittest.TestCase): 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def ftest(self, name, value, expected): 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if abs(value-expected) > eps: 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Use %r instead of %f so the error message 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # displays full precision. Otherwise discrepancies 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # in the last few bits will lead to very confusing 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # error messages 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail('%s returned %r, expected %r' % 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (name, value, expected)) 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testConstants(self): 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('pi', math.pi, 3.1415926) 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('e', math.e, 2.7182818) 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAcos(self): 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.acos) 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('acos(-1)', math.acos(-1), math.pi) 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('acos(0)', math.acos(0), math.pi/2) 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('acos(1)', math.acos(1), 0) 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.acos, INF) 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.acos, NINF) 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.acos(NAN))) 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAcosh(self): 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.acosh) 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('acosh(1)', math.acosh(1), 0) 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('acosh(2)', math.acosh(2), 1.3169578969248168) 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.acosh, 0) 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.acosh, -1) 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.acosh(INF), INF) 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.acosh, NINF) 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.acosh(NAN))) 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAsin(self): 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.asin) 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('asin(-1)', math.asin(-1), -math.pi/2) 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('asin(0)', math.asin(0), 0) 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('asin(1)', math.asin(1), math.pi/2) 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.asin, INF) 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.asin, NINF) 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.asin(NAN))) 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAsinh(self): 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.asinh) 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('asinh(0)', math.asinh(0), 0) 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('asinh(1)', math.asinh(1), 0.88137358701954305) 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('asinh(-1)', math.asinh(-1), -0.88137358701954305) 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.asinh(INF), INF) 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.asinh(NINF), NINF) 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.asinh(NAN))) 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAtan(self): 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.atan) 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan(-1)', math.atan(-1), -math.pi/4) 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan(0)', math.atan(0), 0) 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan(1)', math.atan(1), math.pi/4) 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan(inf)', math.atan(INF), math.pi/2) 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan(-inf)', math.atan(NINF), -math.pi/2) 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan(NAN))) 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAtanh(self): 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.atan) 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atanh(0)', math.atanh(0), 0) 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atanh(0.5)', math.atanh(0.5), 0.54930614433405489) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atanh(-0.5)', math.atanh(-0.5), -0.54930614433405489) 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.atanh, 1) 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.atanh, -1) 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.atanh, INF) 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.atanh, NINF) 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atanh(NAN))) 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testAtan2(self): 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.atan2) 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-1, 0)', math.atan2(-1, 0), -math.pi/2) 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-1, 1)', math.atan2(-1, 1), -math.pi/4) 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(0, 1)', math.atan2(0, 1), 0) 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(1, 1)', math.atan2(1, 1), math.pi/4) 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(1, 0)', math.atan2(1, 0), math.pi/2) 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(0, x) 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(0., -inf)', math.atan2(0., NINF), math.pi) 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(0., -2.3)', math.atan2(0., -2.3), math.pi) 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(0., -0.)', math.atan2(0., -0.), math.pi) 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(0., 0.), 0.) 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(0., 2.3), 0.) 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(0., INF), 0.) 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(0., NAN))) 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(-0, x) 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-0., -inf)', math.atan2(-0., NINF), -math.pi) 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-0., -2.3)', math.atan2(-0., -2.3), -math.pi) 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-0., -0.)', math.atan2(-0., -0.), -math.pi) 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(-0., 0.), -0.) 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(-0., 2.3), -0.) 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(-0., INF), -0.) 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(-0., NAN))) 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(INF, x) 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(inf, -inf)', math.atan2(INF, NINF), math.pi*3/4) 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(inf, -2.3)', math.atan2(INF, -2.3), math.pi/2) 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(inf, -0.)', math.atan2(INF, -0.0), math.pi/2) 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(inf, 0.)', math.atan2(INF, 0.0), math.pi/2) 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(inf, 2.3)', math.atan2(INF, 2.3), math.pi/2) 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(inf, inf)', math.atan2(INF, INF), math.pi/4) 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(INF, NAN))) 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(NINF, x) 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-inf, -inf)', math.atan2(NINF, NINF), -math.pi*3/4) 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-inf, -2.3)', math.atan2(NINF, -2.3), -math.pi/2) 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-inf, -0.)', math.atan2(NINF, -0.0), -math.pi/2) 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-inf, 0.)', math.atan2(NINF, 0.0), -math.pi/2) 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-inf, 2.3)', math.atan2(NINF, 2.3), -math.pi/2) 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-inf, inf)', math.atan2(NINF, INF), -math.pi/4) 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NINF, NAN))) 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(+finite, x) 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(2.3, -inf)', math.atan2(2.3, NINF), math.pi) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(2.3, -0.)', math.atan2(2.3, -0.), math.pi/2) 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(2.3, 0.)', math.atan2(2.3, 0.), math.pi/2) 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(2.3, INF), 0.) 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(2.3, NAN))) 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(-finite, x) 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-2.3, -inf)', math.atan2(-2.3, NINF), -math.pi) 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-2.3, -0.)', math.atan2(-2.3, -0.), -math.pi/2) 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('atan2(-2.3, 0.)', math.atan2(-2.3, 0.), -math.pi/2) 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.atan2(-2.3, INF), -0.) 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(-2.3, NAN))) 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.atan2(NAN, x) 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, NINF))) 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, -2.3))) 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, -0.))) 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, 0.))) 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, 2.3))) 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, INF))) 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.atan2(NAN, NAN))) 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testCeil(self): 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.ceil) 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # These types will be int in py3k. 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(float, type(math.ceil(1))) 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(float, type(math.ceil(1L))) 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(float, type(math.ceil(1.0))) 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(0.5)', math.ceil(0.5), 1) 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(1.0)', math.ceil(1.0), 1) 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(1.5)', math.ceil(1.5), 2) 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(-0.5)', math.ceil(-0.5), 0) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(-1.0)', math.ceil(-1.0), -1) 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(-1.5)', math.ceil(-1.5), -1) 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ceil(INF), INF) 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ceil(NINF), NINF) 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.ceil(NAN))) 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class TestCeil(object): 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __float__(self): 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 41.3 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class TestNoCeil(object): 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ceil(TestCeil())', math.ceil(TestCeil()), 42) 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.ceil, TestNoCeil()) 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = TestNoCeil() 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t.__ceil__ = lambda *args: args 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.ceil, t) 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.ceil, t, 0) 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @requires_IEEE_754 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testCopysign(self): 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1, 42), 1.0) 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(0., 42), 0.0) 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1., -42), -1.0) 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(3, 0.), 3.0) 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(4., -0.), -4.0) 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.copysign) 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # copysign should let us distinguish signs of zeros 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1., 0.), 1.) 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1., -0.), -1.) 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(INF, 0.), INF) 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(INF, -0.), NINF) 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(NINF, 0.), INF) 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(NINF, -0.), NINF) 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # and of infinities 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1., INF), 1.) 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1., NINF), -1.) 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(INF, INF), INF) 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(INF, NINF), NINF) 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(NINF, INF), INF) 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(NINF, NINF), NINF) 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.copysign(NAN, 1.))) 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.copysign(NAN, INF))) 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.copysign(NAN, NINF))) 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.copysign(NAN, NAN))) 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # copysign(INF, NAN) may be INF or it may be NINF, since 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # we don't know whether the sign bit of NAN is set on any 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # given platform. 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isinf(math.copysign(INF, NAN))) 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # similarly, copysign(2., NAN) could be 2. or -2. 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(abs(math.copysign(2., NAN)), 2.) 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testCos(self): 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.cos) 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0) 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('cos(0)', math.cos(0), 1) 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('cos(pi/2)', math.cos(math.pi/2), 0) 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('cos(pi)', math.cos(math.pi), -1) 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.cos(INF))) 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.cos(NINF))) 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.cos, INF) 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.cos, NINF) 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.cos(NAN))) 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testCosh(self): 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.cosh) 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('cosh(0)', math.cosh(0), 1) 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('cosh(2)-2*cosh(1)**2', math.cosh(2)-2*math.cosh(1)**2, -1) # Thanks to Lambert 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.cosh(INF), INF) 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.cosh(NINF), INF) 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.cosh(NAN))) 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testDegrees(self): 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.degrees) 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('degrees(pi)', math.degrees(math.pi), 180.0) 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('degrees(pi/2)', math.degrees(math.pi/2), 90.0) 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0) 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testExp(self): 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.exp) 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('exp(-1)', math.exp(-1), 1/math.e) 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('exp(0)', math.exp(0), 1) 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('exp(1)', math.exp(1), math.e) 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.exp(INF), INF) 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.exp(NINF), 0.) 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.exp(NAN))) 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testFabs(self): 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.fabs) 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fabs(-1)', math.fabs(-1), 1) 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fabs(0)', math.fabs(0), 0) 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fabs(1)', math.fabs(1), 1) 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testFactorial(self): 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def fact(n): 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = 1 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in range(1, int(n)+1): 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result *= i 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return result 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao values = range(10) + [50, 100, 500] 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao random.shuffle(values) 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for x in values: 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for cast in (int, long, float): 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.factorial(cast(x)), fact(x), (x, fact(x), math.factorial(x))) 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.factorial, -1) 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.factorial, math.pi) 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testFloor(self): 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.floor) 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # These types will be int in py3k. 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(float, type(math.floor(1))) 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(float, type(math.floor(1L))) 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(float, type(math.floor(1.0))) 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(0.5)', math.floor(0.5), 0) 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(1.0)', math.floor(1.0), 1) 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(1.5)', math.floor(1.5), 1) 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(-0.5)', math.floor(-0.5), -1) 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(-1.0)', math.floor(-1.0), -1) 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(-1.5)', math.floor(-1.5), -2) 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow() relies on floor() to check for integers 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # This fails on some platforms - so check it here 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(1.23e167)', math.floor(1.23e167), 1.23e167) 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(-1.23e167)', math.floor(-1.23e167), -1.23e167) 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ceil(INF), INF) 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ceil(NINF), NINF) 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.floor(NAN))) 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class TestFloor(object): 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __float__(self): 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 42.3 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class TestNoFloor(object): 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('floor(TestFloor())', math.floor(TestFloor()), 42) 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.floor, TestNoFloor()) 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t = TestNoFloor() 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao t.__floor__ = lambda *args: args 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.floor, t) 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.floor, t, 0) 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testFmod(self): 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.fmod) 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fmod(10,1)', math.fmod(10,1), 0) 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fmod(10,0.5)', math.fmod(10,0.5), 0) 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fmod(10,1.5)', math.fmod(10,1.5), 1) 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fmod(-10,1)', math.fmod(-10,1), 0) 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fmod(-10,0.5)', math.fmod(-10,0.5), 0) 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('fmod(-10,1.5)', math.fmod(-10,1.5), -1) 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.fmod(NAN, 1.))) 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.fmod(1., NAN))) 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.fmod(NAN, NAN))) 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.fmod, 1., 0.) 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.fmod, INF, 1.) 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.fmod, NINF, 1.) 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.fmod, INF, 0.) 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.fmod(3.0, INF), 3.0) 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.fmod(-3.0, INF), -3.0) 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.fmod(3.0, NINF), 3.0) 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.fmod(-3.0, NINF), -3.0) 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.fmod(0.0, 3.0), 0.0) 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.fmod(0.0, NINF), 0.0) 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testFrexp(self): 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.frexp) 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testfrexp(name, result, expected): 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (mant, exp), (emant, eexp) = result, expected 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if abs(mant-emant) > eps or exp != eexp: 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail('%s returned %r, expected %r'%\ 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (name, (mant, exp), (emant,eexp))) 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1)) 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testfrexp('frexp(0)', math.frexp(0), (0, 0)) 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testfrexp('frexp(1)', math.frexp(1), (0.5, 1)) 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testfrexp('frexp(2)', math.frexp(2), (0.5, 2)) 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.frexp(INF)[0], INF) 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.frexp(NINF)[0], NINF) 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.frexp(NAN)[0])) 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @requires_IEEE_754 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @unittest.skipIf(HAVE_DOUBLE_ROUNDING, 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "fsum is not exact on machines with double rounding") 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testFsum(self): 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.fsum relies on exact rounding for correct operation. 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # There's a known problem with IA32 floating-point that causes 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # inexact rounding in some situations, and will cause the 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # math.fsum tests below to fail; see issue #2937. On non IEEE 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # 754 platforms, and on IEEE 754 platforms that exhibit the 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # problem described in issue #2937, we simply skip the whole 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # test. 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Python version of math.fsum, for comparison. Uses a 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # different algorithm based on frexp, ldexp and integer 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # arithmetic. 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from sys import float_info 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mant_dig = float_info.mant_dig 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao etiny = float_info.min_exp - mant_dig 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def msum(iterable): 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """Full precision summation. Compute sum(iterable) without any 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao intermediate accumulation of error. Based on the 'lsum' function 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao at http://code.activestate.com/recipes/393090/ 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao """ 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tmant, texp = 0, 0 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for x in iterable: 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mant, exp = math.frexp(x) 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mant, exp = int(math.ldexp(mant, mant_dig)), exp - mant_dig 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if texp > exp: 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tmant <<= texp-exp 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao texp = exp 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mant <<= exp-texp 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tmant += mant 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Round tmant * 2**texp to a float. The original recipe 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # used float(str(tmant)) * 2.0**texp for this, but that's 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # a little unsafe because str -> float conversion can't be 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # relied upon to do correct rounding on all platforms. 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tail = max(len(bin(abs(tmant)))-2 - mant_dig, etiny - texp) 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if tail > 0: 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao h = 1 << (tail-1) 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tmant = tmant // (2*h) + bool(tmant & h and tmant & 3*h-1) 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao texp += tail 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return math.ldexp(tmant, texp) 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_values = [ 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([], 0.0), 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([0.0], 0.0), 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([1e100, 1.0, -1e100, 1e-100, 1e50, -1.0, -1e50], 1e-100), 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([2.0**53, -0.5, -2.0**-54], 2.0**53-1.0), 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([2.0**53, 1.0, 2.0**-100], 2.0**53+2.0), 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([2.0**53+10.0, 1.0, 2.0**-100], 2.0**53+12.0), 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([2.0**53-4.0, 0.5, 2.0**-54], 2.0**53-3.0), 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([1./n for n in range(1, 1001)], 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float.fromhex('0x1.df11f45f4e61ap+2')), 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([(-1.)**n/n for n in range(1, 1001)], 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float.fromhex('-0x1.62a2af1bd3624p-1')), 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([1.7**(i+1)-1.7**i for i in range(1000)] + [-1.7**1000], -1.0), 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([1e16, 1., 1e-16], 10000000000000002.0), 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([1e16-2., 1.-2.**-53, -(1e16-2.), -(1.-2.**-53)], 0.0), 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # exercise code for resizing partials array 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ([2.**n - 2.**(n+50) + 2.**(n+52) for n in range(-1074, 972, 2)] + 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao [-2.**1022], 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao float.fromhex('0x1.5555555555555p+970')), 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ] 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i, (vals, expected) in enumerate(test_values): 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao actual = math.fsum(vals) 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except OverflowError: 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("test %d failed: got OverflowError, expected %r " 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "for math.fsum(%.100r)" % (i, expected, vals)) 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("test %d failed: got ValueError, expected %r " 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "for math.fsum(%.100r)" % (i, expected, vals)) 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(actual, expected) 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from random import random, gauss, shuffle 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for j in xrange(1000): 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao vals = [7, 1e100, -7, -1e100, -9e-20, 8e-20] * 10 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = 0 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in xrange(200): 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao v = gauss(0, random()) ** 7 - s 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s += v 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao vals.append(v) 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao shuffle(vals) 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = msum(vals) 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(msum(vals), math.fsum(vals)) 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testHypot(self): 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.hypot) 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('hypot(0,0)', math.hypot(0,0), 0) 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('hypot(3,4)', math.hypot(3,4), 5) 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.hypot(NAN, INF), INF) 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.hypot(INF, NAN), INF) 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.hypot(NAN, NINF), INF) 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.hypot(NINF, NAN), INF) 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.hypot(1.0, NAN))) 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.hypot(NAN, -2.0))) 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testLdexp(self): 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.ldexp) 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ldexp(0,1)', math.ldexp(0,1), 0) 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ldexp(1,1)', math.ldexp(1,1), 2) 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ldexp(1,-1)', math.ldexp(1,-1), 0.5) 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('ldexp(-1,1)', math.ldexp(-1,1), -2) 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, math.ldexp, 1., 1000000) 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, math.ldexp, -1., 1000000) 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(1., -1000000), 0.) 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(-1., -1000000), -0.) 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(INF, 30), INF) 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(NINF, -213), NINF) 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.ldexp(NAN, 0))) 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # large second argument 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for n in [10**5, 10L**5, 10**10, 10L**10, 10**20, 10**40]: 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(INF, -n), INF) 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(NINF, -n), NINF) 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(1., -n), 0.) 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(-1., -n), -0.) 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(0., -n), 0.) 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(-0., -n), -0.) 5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.ldexp(NAN, -n))) 5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, math.ldexp, 1., n) 5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, math.ldexp, -1., n) 5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(0., n), 0.) 5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(-0., n), -0.) 5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(INF, n), INF) 5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.ldexp(NINF, n), NINF) 5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.ldexp(NAN, n))) 5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testLog(self): 5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.log) 5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log(1/e)', math.log(1/math.e), -1) 5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log(1)', math.log(1), 0) 5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log(e)', math.log(math.e), 1) 5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log(32,2)', math.log(32,2), 5) 5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log(10**40, 10)', math.log(10**40, 10), 40) 5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log(10**40, 10**20)', math.log(10**40, 10**20), 2) 5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.log(INF), INF) 6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.log, NINF) 6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.log(NAN))) 6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testLog1p(self): 6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.log1p) 6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log1p(1/e -1)', math.log1p(1/math.e-1), -1) 6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log1p(0)', math.log1p(0), 0) 6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log1p(e-1)', math.log1p(math.e-1), 1) 6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log1p(1)', math.log1p(1), math.log(2)) 6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.log1p(INF), INF) 6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.log1p, NINF) 6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.log1p(NAN))) 6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao n= 2**90 6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertAlmostEqual(math.log1p(n), 62.383246250395075) 6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertAlmostEqual(math.log1p(n), math.log1p(float(n))) 6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testLog10(self): 6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.log10) 6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log10(0.1)', math.log10(0.1), -1) 6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log10(1)', math.log10(1), 0) 6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('log10(10)', math.log10(10), 1) 6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.log(INF), INF) 6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.log10, NINF) 6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.log10(NAN))) 6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testModf(self): 6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.modf) 6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testmodf(name, result, expected): 6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (v1, v2), (e1, e2) = result, expected 6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if abs(v1-e1) > eps or abs(v2-e2): 6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail('%s returned %r, expected %r'%\ 6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao (name, (v1,v2), (e1,e2))) 6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0)) 6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0)) 6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.modf(INF), (0.0, INF)) 6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.modf(NINF), (-0.0, NINF)) 6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao modf_nan = math.modf(NAN) 6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(modf_nan[0])) 6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(modf_nan[1])) 6434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testPow(self): 6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.pow) 6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('pow(0,1)', math.pow(0,1), 0) 6474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('pow(1,0)', math.pow(1,0), 1) 6484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('pow(2,1)', math.pow(2,1), 2) 6494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('pow(2,-1)', math.pow(2,-1), 0.5) 6504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, 1), INF) 6514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, 1), NINF) 6524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual((math.pow(1, INF)), 1.) 6534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual((math.pow(1, NINF)), 1.) 6544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(NAN, 1))) 6554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(2, NAN))) 6564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(0, NAN))) 6574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1, NAN), 1) 6584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(0., x) 6604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0., INF), 0.) 6614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0., 3.), 0.) 6624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0., 2.3), 0.) 6634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0., 2.), 0.) 6644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0., 0.), 1.) 6654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0., -0.), 1.) 6664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, 0., -2.) 6674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, 0., -2.3) 6684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, 0., -3.) 6694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, 0., NINF) 6704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(0., NAN))) 6714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(INF, x) 6734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, INF), INF) 6744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, 3.), INF) 6754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, 2.3), INF) 6764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, 2.), INF) 6774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, 0.), 1.) 6784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, -0.), 1.) 6794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, -2.), 0.) 6804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, -2.3), 0.) 6814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, -3.), 0.) 6824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(INF, NINF), 0.) 6834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(INF, NAN))) 6844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(-0., x) 6864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0., INF), 0.) 6874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0., 3.), -0.) 6884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0., 2.3), 0.) 6894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0., 2.), 0.) 6904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0., 0.), 1.) 6914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0., -0.), 1.) 6924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -0., -2.) 6934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -0., -2.3) 6944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -0., -3.) 6954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -0., NINF) 6964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(-0., NAN))) 6974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(NINF, x) 6994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, INF), INF) 7004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, 3.), NINF) 7014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, 2.3), INF) 7024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, 2.), INF) 7034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, 0.), 1.) 7044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, -0.), 1.) 7054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, -2.), 0.) 7064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, -2.3), 0.) 7074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, -3.), -0.) 7084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NINF, NINF), 0.) 7094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(NINF, NAN))) 7104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(-1, x) 7124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., INF), 1.) 7134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., 3.), -1.) 7144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -1., 2.3) 7154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., 2.), 1.) 7164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., 0.), 1.) 7174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., -0.), 1.) 7184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., -2.), 1.) 7194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -1., -2.3) 7204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., -3.), -1.) 7214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1., NINF), 1.) 7224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.pow(-1., NAN))) 7234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(1, x) 7254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., INF), 1.) 7264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., 3.), 1.) 7274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., 2.3), 1.) 7284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., 2.), 1.) 7294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., 0.), 1.) 7304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., -0.), 1.) 7314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., -2.), 1.) 7324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., -2.3), 1.) 7334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., -3.), 1.) 7344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., NINF), 1.) 7354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1., NAN), 1.) 7364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(x, 0) should be 1 for any x 7384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(2.3, 0.), 1.) 7394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-2.3, 0.), 1.) 7404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NAN, 0.), 1.) 7414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(2.3, -0.), 1.) 7424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-2.3, -0.), 1.) 7434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(NAN, -0.), 1.) 7444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(x, y) is invalid if x is negative and y is not integral 7464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -1., 2.3) 7474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -15., -3.1) 7484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(x, NINF) 7504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1.9, NINF), 0.) 7514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1.1, NINF), 0.) 7524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0.9, NINF), INF) 7534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0.1, NINF), INF) 7544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0.1, NINF), INF) 7554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0.9, NINF), INF) 7564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1.1, NINF), 0.) 7574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1.9, NINF), 0.) 7584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(x, INF) 7604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1.9, INF), INF) 7614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(1.1, INF), INF) 7624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0.9, INF), 0.) 7634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(0.1, INF), 0.) 7644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0.1, INF), 0.) 7654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-0.9, INF), 0.) 7664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1.1, INF), INF) 7674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.pow(-1.9, INF), INF) 7684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pow(x, y) should work for x negative, y an integer 7704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**3.', math.pow(-2.0, 3.0), -8.0) 7714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**2.', math.pow(-2.0, 2.0), 4.0) 7724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**1.', math.pow(-2.0, 1.0), -2.0) 7734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**0.', math.pow(-2.0, 0.0), 1.0) 7744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**-0.', math.pow(-2.0, -0.0), 1.0) 7754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**-1.', math.pow(-2.0, -1.0), -0.5) 7764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**-2.', math.pow(-2.0, -2.0), 0.25) 7774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('(-2.)**-3.', math.pow(-2.0, -3.0), -0.125) 7784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -2.0, -0.5) 7794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.pow, -2.0, 0.5) 7804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # the following tests have been commented out since they don't 7824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # really belong here: the implementation of ** for floats is 7834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # independent of the implementation of math.pow 7844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1**NAN, 1) 7854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1**INF, 1) 7864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1**NINF, 1) 7874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1**0, 1) 7884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1.**NAN, 1) 7894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1.**INF, 1) 7904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1.**NINF, 1) 7914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao #self.assertEqual(1.**0, 1) 7924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testRadians(self): 7944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.radians) 7954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('radians(180)', math.radians(180), math.pi) 7964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('radians(90)', math.radians(90), math.pi/2) 7974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('radians(-45)', math.radians(-45), -math.pi/4) 7984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testSin(self): 8004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.sin) 8014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sin(0)', math.sin(0), 0) 8024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sin(pi/2)', math.sin(math.pi/2), 1) 8034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sin(-pi/2)', math.sin(-math.pi/2), -1) 8044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 8054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.sin(INF))) 8064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.sin(NINF))) 8074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 8084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.sin, INF) 8094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.sin, NINF) 8104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.sin(NAN))) 8114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testSinh(self): 8134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.sinh) 8144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sinh(0)', math.sinh(0), 0) 8154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sinh(1)**2-cosh(1)**2', math.sinh(1)**2-math.cosh(1)**2, -1) 8164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0) 8174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.sinh(INF), INF) 8184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.sinh(NINF), NINF) 8194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.sinh(NAN))) 8204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testSqrt(self): 8224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.sqrt) 8234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sqrt(0)', math.sqrt(0), 0) 8244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sqrt(1)', math.sqrt(1), 1) 8254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('sqrt(4)', math.sqrt(4), 2) 8264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.sqrt(INF), INF) 8274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.sqrt, NINF) 8284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.sqrt(NAN))) 8294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testTan(self): 8314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.tan) 8324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tan(0)', math.tan(0), 0) 8334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tan(pi/4)', math.tan(math.pi/4), 1) 8344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tan(-pi/4)', math.tan(-math.pi/4), -1) 8354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 8364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.tan(INF))) 8374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.tan(NINF))) 8384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except: 8394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.tan, INF) 8404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, math.tan, NINF) 8414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.tan(NAN))) 8424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testTanh(self): 8444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.tanh) 8454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tanh(0)', math.tanh(0), 0) 8464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0) 8474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tanh(inf)', math.tanh(INF), 1) 8484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest('tanh(-inf)', math.tanh(NINF), -1) 8494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(math.tanh(NAN))) 8504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # check that tanh(-0.) == -0. on IEEE 754 systems 8514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if float.__getformat__("double").startswith("IEEE"): 8524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.tanh(-0.), -0.) 8534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.copysign(1., math.tanh(-0.)), 8544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao math.copysign(1., -0.)) 8554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_trunc(self): 8574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(1), 1) 8584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(-1), -1) 8594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(math.trunc(1)), int) 8604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(math.trunc(1.5)), int) 8614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(1.5), 1) 8624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(-1.5), -1) 8634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(1.999999), 1) 8644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(-1.999999), -1) 8654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(-0.999999), -0) 8664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(-100.999), -100) 8674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class TestTrunc(object): 8694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __trunc__(self): 8704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 23 8714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class TestNoTrunc(object): 8734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 8744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(math.trunc(TestTrunc()), 23) 8764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.trunc) 8784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, math.trunc, 1, 2) 8794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises((AttributeError, TypeError), math.trunc, 8804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestNoTrunc()) 8814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testIsnan(self): 8834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(float("nan"))) 8844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isnan(float("inf")* 0.)) 8854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(math.isnan(float("inf"))) 8864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(math.isnan(0.)) 8874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(math.isnan(1.)) 8884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def testIsinf(self): 8904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isinf(float("inf"))) 8914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isinf(float("-inf"))) 8924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isinf(1E400)) 8934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(math.isinf(-1E400)) 8944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(math.isinf(float("nan"))) 8954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(math.isinf(0.)) 8964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertFalse(math.isinf(1.)) 8974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # RED_FLAG 16-Oct-2000 Tim 8994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # While 2.0 is more consistent about exceptions than previous releases, it 9004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # still fails this part of the test on some platforms. For now, we only 9014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # *run* test_exceptions() in verbose mode, so that this isn't normally 9024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # tested. 9034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if verbose: 9054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_exceptions(self): 9064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 9074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = math.exp(-1000000000) 9084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except: 9094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # mathmodule.c is failing to weed out underflows from libm, or 9104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # we've got an fp format with huge dynamic range 9114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("underflowing exp() should not have raised " 9124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "an exception") 9134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if x != 0: 9144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("underflowing exp() should have returned 0") 9154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # If this fails, probably using a strict IEEE-754 conforming libm, and x 9174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # is +Inf afterwards. But Python wants overflows detected by default. 9184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 9194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = math.exp(1000000000) 9204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except OverflowError: 9214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 9224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 9234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("overflowing exp() didn't trigger OverflowError") 9244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # If this fails, it could be a puzzle. One odd possibility is that 9264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # mathmodule.c's macros are getting confused while comparing 9274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE 9284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # as a result (and so raising OverflowError instead). 9294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 9304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x = math.sqrt(-1.0) 9314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 9324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 9334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 9344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("sqrt(-1) didn't raise ValueError") 9354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @requires_IEEE_754 9374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_testfile(self): 9384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for id, fn, ar, ai, er, ei, flags in parse_testfile(test_file): 9394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Skip if either the input or result is complex, or if 9404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # flags is nonempty 9414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if ai != 0. or ei != 0. or flags: 9424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 9434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if fn in ['rect', 'polar']: 9444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # no real versions of rect, polar 9454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 9464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao func = getattr(math, fn) 9474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 9484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao result = func(ar) 9494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 9504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao message = ("Unexpected ValueError in " + 9514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "test %s:%s(%r)\n" % (id, fn, ar)) 9524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail(message) 9534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except OverflowError: 9544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao message = ("Unexpected OverflowError in " + 9554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "test %s:%s(%r)\n" % (id, fn, ar)) 9564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail(message) 9574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.ftest("%s:%s(%r)" % (id, fn, ar), result, er) 9584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), 9604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao "test requires IEEE 754 doubles") 9614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_mtestfile(self): 9624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ALLOWED_ERROR = 20 # permitted error, in ulps 9634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fail_fmt = "{}:{}({!r}): expected {!r}, got {!r}" 9644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures = [] 9664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for id, fn, arg, expected, flags in parse_mtestfile(math_testcases): 9674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao func = getattr(math, fn) 9684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if 'invalid' in flags or 'divide-by-zero' in flags: 9704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = 'ValueError' 9714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif 'overflow' in flags: 9724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao expected = 'OverflowError' 9734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 9754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao got = func(arg) 9764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 9774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao got = 'ValueError' 9784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except OverflowError: 9794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao got = 'OverflowError' 9804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao accuracy_failure = None 9824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(got, float) and isinstance(expected, float): 9834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if math.isnan(expected) and math.isnan(got): 9844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 9854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not math.isnan(expected) and not math.isnan(got): 9864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if fn == 'lgamma': 9874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # we use a weaker accuracy test for lgamma; 9884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # lgamma only achieves an absolute error of 9894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # a few multiples of the machine accuracy, in 9904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # general. 9914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao accuracy_failure = acc_check(expected, got, 9924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao rel_err = 5e-15, 9934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao abs_err = 5e-15) 9944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao elif fn == 'erfc': 9954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # erfc has less-than-ideal accuracy for large 9964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # arguments (x ~ 25 or so), mainly due to the 9974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # error involved in computing exp(-x*x). 9984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # 9994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # XXX Would be better to weaken this test only 10004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # for large x, instead of for all x. 10014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao accuracy_failure = ulps_check(expected, got, 2000) 10024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 10044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao accuracy_failure = ulps_check(expected, got, 20) 10054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if accuracy_failure is None: 10064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 10074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if isinstance(got, str) and isinstance(expected, str): 10094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if got == expected: 10104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao continue 10114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fail_msg = fail_fmt.format(id, fn, arg, expected, got) 10134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if accuracy_failure is not None: 10144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fail_msg += ' ({})'.format(accuracy_failure) 10154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao failures.append(fail_msg) 10164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if failures: 10184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail('Failures in test_mtestfile:\n ' + 10194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao '\n '.join(failures)) 10204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 10234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from doctest import DocFileSuite 10244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao suite = unittest.TestSuite() 10254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao suite.addTest(unittest.makeSuite(MathTests)) 10264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao suite.addTest(DocFileSuite("ieee754.txt")) 10274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao run_unittest(suite) 10284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == '__main__': 10304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 1031