11# Python test set -- math module
22# XXXX Should not do tests around zero only
33
4- from test .support import run_unittest , verbose , requires_IEEE_754
4+ from test .support import verbose , requires_IEEE_754
55from test import support
66import unittest
77import itertools
@@ -377,6 +377,24 @@ def testAtan2(self):
377377 self .assertTrue (math .isnan (math .atan2 (NAN , INF )))
378378 self .assertTrue (math .isnan (math .atan2 (NAN , NAN )))
379379
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+
380398 def testCeil (self ):
381399 self .assertRaises (TypeError , math .ceil )
382400 self .assertEqual (int , type (math .ceil (0.5 )))
@@ -1209,6 +1227,8 @@ def testmodf(name, result, expected):
12091227 self .assertTrue (math .isnan (modf_nan [0 ]))
12101228 self .assertTrue (math .isnan (modf_nan [1 ]))
12111229
1230+ # TODO: RUSTPYTHON
1231+ @unittest .expectedFailure
12121232 def testPow (self ):
12131233 self .assertRaises (TypeError , math .pow )
12141234 self .ftest ('pow(0,1)' , math .pow (0 ,1 ), 0 )
@@ -1234,7 +1254,7 @@ def testPow(self):
12341254 self .assertRaises (ValueError , math .pow , 0. , - 2. )
12351255 self .assertRaises (ValueError , math .pow , 0. , - 2.3 )
12361256 self .assertRaises (ValueError , math .pow , 0. , - 3. )
1237- self .assertRaises ( ValueError , math .pow , 0. , NINF )
1257+ self .assertEqual ( math .pow ( 0. , NINF ), INF )
12381258 self .assertTrue (math .isnan (math .pow (0. , NAN )))
12391259
12401260 # pow(INF, x)
@@ -1260,7 +1280,7 @@ def testPow(self):
12601280 self .assertRaises (ValueError , math .pow , - 0. , - 2. )
12611281 self .assertRaises (ValueError , math .pow , - 0. , - 2.3 )
12621282 self .assertRaises (ValueError , math .pow , - 0. , - 3. )
1263- self .assertRaises ( ValueError , math .pow , - 0. , NINF )
1283+ self .assertEqual ( math .pow ( - 0. , NINF ), INF )
12641284 self .assertTrue (math .isnan (math .pow (- 0. , NAN )))
12651285
12661286 # pow(NINF, x)
@@ -1519,6 +1539,10 @@ def testSinh(self):
15191539 def testSqrt (self ):
15201540 self .assertRaises (TypeError , math .sqrt )
15211541 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 )
15221546 self .ftest ('sqrt(1)' , math .sqrt (1 ), 1 )
15231547 self .ftest ('sqrt(4)' , math .sqrt (4 ), 2 )
15241548 self .assertEqual (math .sqrt (INF ), INF )
@@ -1808,16 +1832,22 @@ def test_prod(self):
18081832 self .assertRaises (TypeError , prod )
18091833 self .assertRaises (TypeError , prod , 42 )
18101834 self .assertRaises (TypeError , prod , ['a' , 'b' , 'c' ])
1811- self .assertRaises (TypeError , prod , ['a' , 'b' , 'c' ], '' )
1812- 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'' )
18131837 values = [bytearray (b'a' ), bytearray (b'b' )]
1814- self .assertRaises (TypeError , prod , values , bytearray (b'' ))
1838+ self .assertRaises (TypeError , prod , values , start = bytearray (b'' ))
18151839 self .assertRaises (TypeError , prod , [[1 ], [2 ], [3 ]])
18161840 self .assertRaises (TypeError , prod , [{2 :3 }])
1817- self .assertRaises (TypeError , prod , [{2 :3 }]* 2 , {2 :3 })
1818- 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+
18191849 with self .assertRaises (TypeError ):
1820- prod ([10 , 20 ], [ 30 , 40 ] ) # start is a keyword-only argument
1850+ prod ([10 , 20 ], 1 ) # start is a keyword-only argument
18211851
18221852 self .assertEqual (prod ([0 , 1 , 2 , 3 ]), 0 )
18231853 self .assertEqual (prod ([1 , 0 , 2 , 3 ]), 0 )
@@ -1877,8 +1907,8 @@ def testPerm(self):
18771907 perm = math .perm
18781908 factorial = math .factorial
18791909 # Test if factorial definition is satisfied
1880- for n in range (100 ):
1881- 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 ) ):
18821912 self .assertEqual (perm (n , k ),
18831913 factorial (n ) // factorial (n - k ))
18841914
@@ -1941,8 +1971,8 @@ def testComb(self):
19411971 comb = math .comb
19421972 factorial = math .factorial
19431973 # Test if factorial definition is satisfied
1944- for n in range (100 ):
1945- 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 ) ):
19461976 self .assertEqual (comb (n , k ), factorial (n )
19471977 // (factorial (k ) * factorial (n - k )))
19481978
@@ -2230,13 +2260,10 @@ def test_fractions(self):
22302260 self .assertAllNotClose (fraction_examples , rel_tol = 1e-9 )
22312261
22322262
2233- def test_main ():
2234- # from doctest import DocFileSuite
2235- suite = unittest .TestSuite ()
2236- suite .addTest (unittest .makeSuite (MathTests ))
2237- suite .addTest (unittest .makeSuite (IsCloseTests ))
2238- # suite.addTest(DocFileSuite("ieee754.txt"))
2239- run_unittest (suite )
2263+ def load_tests (loader , tests , pattern ):
2264+ from doctest import DocFileSuite
2265+ # tests.addTest(DocFileSuite("ieee754.txt"))
2266+ return tests
22402267
22412268if __name__ == '__main__' :
2242- test_main ()
2269+ unittest . main ()
0 commit comments