1
1
# Python test set -- math module
2
2
# XXXX Should not do tests around zero only
3
3
4
- from test .support import run_unittest , verbose , requires_IEEE_754
4
+ from test .support import verbose , requires_IEEE_754
5
5
from test import support
6
6
import unittest
7
7
import itertools
@@ -377,6 +377,24 @@ def testAtan2(self):
377
377
self .assertTrue (math .isnan (math .atan2 (NAN , INF )))
378
378
self .assertTrue (math .isnan (math .atan2 (NAN , NAN )))
379
379
380
+ # TODO: RUSTPYTHON
381
+ @unittest .expectedFailure
382
+ def testCbrt (self ):
383
+ self .assertRaises (TypeError , math .cbrt )
384
+ self .ftest ('cbrt(0)' , math .cbrt (0 ), 0 )
385
+ self .ftest ('cbrt(1)' , math .cbrt (1 ), 1 )
386
+ self .ftest ('cbrt(8)' , math .cbrt (8 ), 2 )
387
+ self .ftest ('cbrt(0.0)' , math .cbrt (0.0 ), 0.0 )
388
+ self .ftest ('cbrt(-0.0)' , math .cbrt (- 0.0 ), - 0.0 )
389
+ self .ftest ('cbrt(1.2)' , math .cbrt (1.2 ), 1.062658569182611 )
390
+ self .ftest ('cbrt(-2.6)' , math .cbrt (- 2.6 ), - 1.375068867074141 )
391
+ self .ftest ('cbrt(27)' , math .cbrt (27 ), 3 )
392
+ self .ftest ('cbrt(-1)' , math .cbrt (- 1 ), - 1 )
393
+ self .ftest ('cbrt(-27)' , math .cbrt (- 27 ), - 3 )
394
+ self .assertEqual (math .cbrt (INF ), INF )
395
+ self .assertEqual (math .cbrt (NINF ), NINF )
396
+ self .assertTrue (math .isnan (math .cbrt (NAN )))
397
+
380
398
def testCeil (self ):
381
399
self .assertRaises (TypeError , math .ceil )
382
400
self .assertEqual (int , type (math .ceil (0.5 )))
@@ -485,6 +503,17 @@ def testExp(self):
485
503
self .assertTrue (math .isnan (math .exp (NAN )))
486
504
self .assertRaises (OverflowError , math .exp , 1000000 )
487
505
506
+ def testExp2 (self ):
507
+ self .assertRaises (TypeError , math .exp2 )
508
+ self .ftest ('exp2(-1)' , math .exp2 (- 1 ), 0.5 )
509
+ self .ftest ('exp2(0)' , math .exp2 (0 ), 1 )
510
+ self .ftest ('exp2(1)' , math .exp2 (1 ), 2 )
511
+ self .ftest ('exp2(2.3)' , math .exp2 (2.3 ), 4.924577653379665 )
512
+ self .assertEqual (math .exp2 (INF ), INF )
513
+ self .assertEqual (math .exp2 (NINF ), 0. )
514
+ self .assertTrue (math .isnan (math .exp2 (NAN )))
515
+ self .assertRaises (OverflowError , math .exp2 , 1000000 )
516
+
488
517
def testFabs (self ):
489
518
self .assertRaises (TypeError , math .fabs )
490
519
self .ftest ('fabs(-1)' , math .fabs (- 1 ), 1 )
@@ -1198,6 +1227,8 @@ def testmodf(name, result, expected):
1198
1227
self .assertTrue (math .isnan (modf_nan [0 ]))
1199
1228
self .assertTrue (math .isnan (modf_nan [1 ]))
1200
1229
1230
+ # TODO: RUSTPYTHON
1231
+ @unittest .expectedFailure
1201
1232
def testPow (self ):
1202
1233
self .assertRaises (TypeError , math .pow )
1203
1234
self .ftest ('pow(0,1)' , math .pow (0 ,1 ), 0 )
@@ -1223,7 +1254,7 @@ def testPow(self):
1223
1254
self .assertRaises (ValueError , math .pow , 0. , - 2. )
1224
1255
self .assertRaises (ValueError , math .pow , 0. , - 2.3 )
1225
1256
self .assertRaises (ValueError , math .pow , 0. , - 3. )
1226
- self .assertRaises ( ValueError , math .pow , 0. , NINF )
1257
+ self .assertEqual ( math .pow ( 0. , NINF ), INF )
1227
1258
self .assertTrue (math .isnan (math .pow (0. , NAN )))
1228
1259
1229
1260
# pow(INF, x)
@@ -1249,7 +1280,7 @@ def testPow(self):
1249
1280
self .assertRaises (ValueError , math .pow , - 0. , - 2. )
1250
1281
self .assertRaises (ValueError , math .pow , - 0. , - 2.3 )
1251
1282
self .assertRaises (ValueError , math .pow , - 0. , - 3. )
1252
- self .assertRaises ( ValueError , math .pow , - 0. , NINF )
1283
+ self .assertEqual ( math .pow ( - 0. , NINF ), INF )
1253
1284
self .assertTrue (math .isnan (math .pow (- 0. , NAN )))
1254
1285
1255
1286
# pow(NINF, x)
@@ -1508,6 +1539,10 @@ def testSinh(self):
1508
1539
def testSqrt (self ):
1509
1540
self .assertRaises (TypeError , math .sqrt )
1510
1541
self .ftest ('sqrt(0)' , math .sqrt (0 ), 0 )
1542
+ self .ftest ('sqrt(0)' , math .sqrt (0.0 ), 0.0 )
1543
+ self .ftest ('sqrt(2.5)' , math .sqrt (2.5 ), 1.5811388300841898 )
1544
+ self .ftest ('sqrt(0.25)' , math .sqrt (0.25 ), 0.5 )
1545
+ self .ftest ('sqrt(25.25)' , math .sqrt (25.25 ), 5.024937810560445 )
1511
1546
self .ftest ('sqrt(1)' , math .sqrt (1 ), 1 )
1512
1547
self .ftest ('sqrt(4)' , math .sqrt (4 ), 2 )
1513
1548
self .assertEqual (math .sqrt (INF ), INF )
@@ -1797,16 +1832,22 @@ def test_prod(self):
1797
1832
self .assertRaises (TypeError , prod )
1798
1833
self .assertRaises (TypeError , prod , 42 )
1799
1834
self .assertRaises (TypeError , prod , ['a' , 'b' , 'c' ])
1800
- self .assertRaises (TypeError , prod , ['a' , 'b' , 'c' ], '' )
1801
- self .assertRaises (TypeError , prod , [b'a' , b'c' ], b'' )
1835
+ self .assertRaises (TypeError , prod , ['a' , 'b' , 'c' ], start = '' )
1836
+ self .assertRaises (TypeError , prod , [b'a' , b'c' ], start = b'' )
1802
1837
values = [bytearray (b'a' ), bytearray (b'b' )]
1803
- self .assertRaises (TypeError , prod , values , bytearray (b'' ))
1838
+ self .assertRaises (TypeError , prod , values , start = bytearray (b'' ))
1804
1839
self .assertRaises (TypeError , prod , [[1 ], [2 ], [3 ]])
1805
1840
self .assertRaises (TypeError , prod , [{2 :3 }])
1806
- self .assertRaises (TypeError , prod , [{2 :3 }]* 2 , {2 :3 })
1807
- self .assertRaises (TypeError , prod , [[1 ], [2 ], [3 ]], [])
1841
+ self .assertRaises (TypeError , prod , [{2 :3 }]* 2 , start = {2 :3 })
1842
+ self .assertRaises (TypeError , prod , [[1 ], [2 ], [3 ]], start = [])
1843
+
1844
+ # Some odd cases
1845
+ self .assertEqual (prod ([2 , 3 ], start = 'ab' ), 'abababababab' )
1846
+ self .assertEqual (prod ([2 , 3 ], start = [1 , 2 ]), [1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 , 1 , 2 ])
1847
+ self .assertEqual (prod ([], start = {2 : 3 }), {2 :3 })
1848
+
1808
1849
with self .assertRaises (TypeError ):
1809
- prod ([10 , 20 ], [ 30 , 40 ] ) # start is a keyword-only argument
1850
+ prod ([10 , 20 ], 1 ) # start is a keyword-only argument
1810
1851
1811
1852
self .assertEqual (prod ([0 , 1 , 2 , 3 ]), 0 )
1812
1853
self .assertEqual (prod ([1 , 0 , 2 , 3 ]), 0 )
@@ -1866,8 +1907,8 @@ def testPerm(self):
1866
1907
perm = math .perm
1867
1908
factorial = math .factorial
1868
1909
# Test if factorial definition is satisfied
1869
- for n in range (100 ):
1870
- for k in range (n + 1 ):
1910
+ for n in range (500 ):
1911
+ for k in ( range (n + 1 ) if n < 100 else range ( 30 ) if n < 200 else range ( 10 ) ):
1871
1912
self .assertEqual (perm (n , k ),
1872
1913
factorial (n ) // factorial (n - k ))
1873
1914
@@ -1930,8 +1971,8 @@ def testComb(self):
1930
1971
comb = math .comb
1931
1972
factorial = math .factorial
1932
1973
# Test if factorial definition is satisfied
1933
- for n in range (100 ):
1934
- for k in range (n + 1 ):
1974
+ for n in range (500 ):
1975
+ for k in ( range (n + 1 ) if n < 100 else range ( 30 ) if n < 200 else range ( 10 ) ):
1935
1976
self .assertEqual (comb (n , k ), factorial (n )
1936
1977
// (factorial (k ) * factorial (n - k )))
1937
1978
@@ -2219,13 +2260,10 @@ def test_fractions(self):
2219
2260
self .assertAllNotClose (fraction_examples , rel_tol = 1e-9 )
2220
2261
2221
2262
2222
- def test_main ():
2223
- # from doctest import DocFileSuite
2224
- suite = unittest .TestSuite ()
2225
- suite .addTest (unittest .makeSuite (MathTests ))
2226
- suite .addTest (unittest .makeSuite (IsCloseTests ))
2227
- # suite.addTest(DocFileSuite("ieee754.txt"))
2228
- run_unittest (suite )
2263
+ def load_tests (loader , tests , pattern ):
2264
+ from doctest import DocFileSuite
2265
+ # tests.addTest(DocFileSuite("ieee754.txt"))
2266
+ return tests
2229
2267
2230
2268
if __name__ == '__main__' :
2231
- test_main ()
2269
+ unittest . main ()
0 commit comments