@@ -290,6 +290,66 @@ def testLog(self):
290
290
math .log (10 , MyFloat ())
291
291
self .assertRaises (ValueError , math .log , 0 )
292
292
293
+ def testLog1p (self ):
294
+ self .assertRaises (TypeError , math .log1p )
295
+ for n in [2 , 2 ** 90 , 2 ** 300 ]:
296
+ self .assertAlmostEqual (math .log1p (n ), math .log1p (float (n )))
297
+ self .assertRaises (ValueError , math .log1p , - 1 )
298
+ self .assertEqual (math .log1p (INF ), INF )
299
+
300
+ # test of specializations
301
+ self .ftest ('log1p(MyFloat())' , math .log1p (MyFloat ()), 0.4700036292457356 )
302
+ self .assertRaises (TypeError , math .log1p , 'ahoj' )
303
+ self .ftest ('log1p(BIG_INT)' , math .log1p (BIG_INT ), 71.38013712610532 )
304
+
305
+ #@requires_IEEE_754
306
+ def testLog2 (self ):
307
+ self .assertRaises (TypeError , math .log2 )
308
+
309
+ # Check some integer values
310
+ self .assertEqual (math .log2 (1 ), 0.0 )
311
+ self .assertEqual (math .log2 (2 ), 1.0 )
312
+ self .assertEqual (math .log2 (4 ), 2.0 )
313
+
314
+ # Large integer values
315
+ self .assertEqual (math .log2 (2 ** 1023 ), 1023.0 )
316
+ self .assertEqual (math .log2 (2 ** 1024 ), 1024.0 )
317
+ self .assertEqual (math .log2 (2 ** 2000 ), 2000.0 )
318
+
319
+ self .assertRaises (ValueError , math .log2 , - 1.5 )
320
+ self .assertRaises (ValueError , math .log2 , NINF )
321
+ self .assertTrue (math .isnan (math .log2 (NAN )))
322
+
323
+ # test of specializations
324
+ self .ftest ('log2(MyFloat())' , math .log2 (MyFloat ()), - 0.7369655941662062 )
325
+ self .assertRaises (TypeError , math .log2 , 'ahoj' )
326
+ self .ftest ('log2(BIG_INT)' , math .log2 (BIG_INT ), 102.97976984980635 )
327
+
328
+ def testLog2Exact (self ):
329
+ # Check that we get exact equality for log2 of powers of 2.
330
+ actual = [math .log2 (math .ldexp (1.0 , n )) for n in range (- 1074 , 1024 )]
331
+ expected = [float (n ) for n in range (- 1074 , 1024 )]
332
+ self .assertEqual (actual , expected )
333
+
334
+ def testLog10 (self ):
335
+ self .assertRaises (TypeError , math .log10 )
336
+ self .ftest ('log10(0.1)' , math .log10 (0.1 ), - 1 )
337
+ self .ftest ('log10(1)' , math .log10 (1 ), 0 )
338
+ self .ftest ('log10(10)' , math .log10 (10 ), 1 )
339
+ self .ftest ('log10(10**1000)' , math .log10 (10 ** 1000 ), 1000.0 )
340
+ self .assertRaises (ValueError , math .log10 , - 1.5 )
341
+ self .assertRaises (ValueError , math .log10 , - 10 ** 1000 )
342
+ self .assertRaises (ValueError , math .log10 , NINF )
343
+ self .assertEqual (math .log (INF ), INF )
344
+ self .assertTrue (math .isnan (math .log10 (NAN )))
345
+
346
+ # test of specializations
347
+ # TODO uncomment when GR-10346 will be fixed
348
+ #self.ftest('log10(MyFloat())', math.log10(MyFloat()), -0.22184874961635637)
349
+ self .assertRaises (TypeError , math .log10 , 'ahoj' )
350
+ # TODO uncomment when GR-10346 will be fixed
351
+ #self.ftest('log10(BIG_INT)', math.log10(BIG_INT), 30.999999671364986)
352
+
293
353
def testIsfinite (self ):
294
354
self .assertTrue (math .isfinite (0.0 ))
295
355
self .assertTrue (math .isfinite (- 0.0 ))
@@ -384,6 +444,19 @@ def __ceil__(self):
384
444
self .assertEqual (math .ceil (O ()), 'cau' )
385
445
self .assertEqual (math .ceil (999.1 ), 1000 )
386
446
447
+ self .assertEqual (math .ceil (MyFloat ()),1 )
448
+
449
+ class F1 ():
450
+ def __float__ (self ):
451
+ return 1.1
452
+ def __ceil__ (self ):
453
+ return 44
454
+ self .assertEqual (math .ceil (F1 ()), 44 )
455
+
456
+ class F2 ():
457
+ def __float__ (self ):
458
+ return 1.1
459
+ self .assertEqual (math .ceil (F2 ()), 2 )
387
460
388
461
def test_basic_copysign (self ):
389
462
self .assertEqual (math .copysign (3 , - 0 ), 3.0 )
@@ -952,6 +1025,36 @@ def test_fmod(self):
952
1025
self .assertEqual (math .fmod (2432902008176640000999 , 12.12 ), 10.396369527944033 )
953
1026
self .assertEqual (math .fmod (- 1e-100 , 1e100 ), - 1e-100 )
954
1027
1028
+ def testExp (self ):
1029
+ self .assertRaises (TypeError , math .exp )
1030
+ self .ftest ('exp(-1)' , math .exp (- 1 ), 1 / math .e )
1031
+ self .ftest ('exp(0)' , math .exp (0 ), 1 )
1032
+ self .ftest ('exp(1)' , math .exp (1 ), math .e )
1033
+ self .assertEqual (math .exp (INF ), INF )
1034
+ self .assertEqual (math .exp (NINF ), 0. )
1035
+ self .assertTrue (math .isnan (math .exp (NAN )))
1036
+ self .assertRaises (OverflowError , math .exp , 1000000 )
1037
+
1038
+ # test of specializations
1039
+ self .ftest ('exp(MyFloat())' , math .exp (MyFloat ()), 1.8221188003905089 )
1040
+ self .assertRaises (TypeError , math .exp , 'ahoj' )
1041
+ self .assertRaises (OverflowError , math .exp , BIG_INT )
1042
+
1043
+ def testExpm1 (self ):
1044
+ self .assertRaises (TypeError , math .exp )
1045
+ self .ftest ('expm1(-1)' , math .expm1 (- 1 ), 1 / math .e - 1 )
1046
+ self .ftest ('expm1(0)' , math .expm1 (0 ), 0 )
1047
+ self .ftest ('expm1(1)' , math .expm1 (1 ), math .e - 1 )
1048
+ self .assertEqual (math .expm1 (INF ), INF )
1049
+ self .assertEqual (math .expm1 (NINF ), - 1. )
1050
+ self .assertTrue (math .isnan (math .expm1 (NAN )))
1051
+ self .assertRaises (OverflowError , math .expm1 , 1000000 )
1052
+
1053
+ # test of specializations
1054
+ self .ftest ('expm1(MyFloat())' , math .expm1 (MyFloat ()), 0.8221188003905089 )
1055
+ self .assertRaises (TypeError , math .expm1 , 'ahoj' )
1056
+ self .assertRaises (OverflowError , math .expm1 , BIG_INT )
1057
+
955
1058
def test_frexp (self ):
956
1059
self .assertRaises (TypeError , math .frexp )
957
1060
@@ -970,6 +1073,11 @@ def testfrexp(name, result, expected):
970
1073
self .assertEqual (math .frexp (NINF )[0 ], NINF )
971
1074
self .assertTrue (math .isnan (math .frexp (NAN )[0 ]))
972
1075
1076
+ # test of specializations
1077
+ testfrexp ('frexp(MyFloat())' , math .frexp (MyFloat ()), (0.6 , 0 ))
1078
+ self .assertRaises (TypeError , math .log1p , 'ahoj' )
1079
+ testfrexp ('log1p(BIG_INT)' , math .frexp (BIG_INT ), (0.9860753853527933 , 103 ))
1080
+
973
1081
testfrexp ('frexp(True)' , math .frexp (True ), (0.5 , 1 ))
974
1082
testfrexp ('frexp(False)' , math .frexp (False ), (0.0 , 0 ))
975
1083
testfrexp ('frexp(6227020800)' , math .frexp (6227020800 ), (0.7249206304550171 , 33 ))
@@ -986,6 +1094,8 @@ def getY():
986
1094
987
1095
testfrexp ('frexp(X(10))' , math .frexp (X (10 )), (0.625 , 4 ))
988
1096
testfrexp ('frexp(Y(11.11))' , math .frexp (Y (11.11 )), (0.694375 , 4 ))
1097
+ testfrexp ('frexp(2**1023)' , math .frexp (2 ** 1023 ), (0.5 , 1024 ))
1098
+ self .assertRaises (OverflowError , math .frexp , 2 ** 1024 )
989
1099
990
1100
def test_ldexp (self ):
991
1101
self .assertRaises (TypeError , math .ldexp )
0 commit comments