@@ -240,6 +240,13 @@ def result_check(expected, got, ulp_tol=5, abs_tol=0.0):
240
240
else :
241
241
return None
242
242
243
+ class FloatLike :
244
+ def __init__ (self , value ):
245
+ self .value = value
246
+
247
+ def __float__ (self ):
248
+ return self .value
249
+
243
250
class IntSubclass (int ):
244
251
pass
245
252
@@ -397,22 +404,29 @@ def testAtan2(self):
397
404
def testCeil (self ):
398
405
self .assertRaises (TypeError , math .ceil )
399
406
self .assertEqual (int , type (math .ceil (0.5 )))
400
- self .ftest ('ceil(0.5)' , math .ceil (0.5 ), 1 )
401
- self .ftest ('ceil(1.0)' , math .ceil (1.0 ), 1 )
402
- self .ftest ('ceil(1.5)' , math .ceil (1.5 ), 2 )
403
- self .ftest ('ceil(-0.5)' , math .ceil (- 0.5 ), 0 )
404
- self .ftest ('ceil(-1.0)' , math .ceil (- 1.0 ), - 1 )
405
- self .ftest ('ceil(-1.5)' , math .ceil (- 1.5 ), - 1 )
407
+ self .assertEqual (math .ceil (0.5 ), 1 )
408
+ self .assertEqual (math .ceil (1.0 ), 1 )
409
+ self .assertEqual (math .ceil (1.5 ), 2 )
410
+ self .assertEqual (math .ceil (- 0.5 ), 0 )
411
+ self .assertEqual (math .ceil (- 1.0 ), - 1 )
412
+ self .assertEqual (math .ceil (- 1.5 ), - 1 )
413
+ self .assertEqual (math .ceil (0.0 ), 0 )
414
+ self .assertEqual (math .ceil (- 0.0 ), 0 )
406
415
#self.assertEqual(math.ceil(INF), INF)
407
416
#self.assertEqual(math.ceil(NINF), NINF)
408
417
#self.assertTrue(math.isnan(math.ceil(NAN)))
409
418
410
419
class TestCeil :
411
420
def __ceil__ (self ):
412
421
return 42
422
+ class FloatCeil (float ):
423
+ def __ceil__ (self ):
424
+ return 42
413
425
class TestNoCeil :
414
426
pass
415
- self .ftest ('ceil(TestCeil())' , math .ceil (TestCeil ()), 42 )
427
+ self .assertEqual (math .ceil (TestCeil ()), 42 )
428
+ self .assertEqual (math .ceil (FloatCeil ()), 42 )
429
+ self .assertEqual (math .ceil (FloatLike (42.5 )), 43 )
416
430
self .assertRaises (TypeError , math .ceil , TestNoCeil ())
417
431
418
432
t = TestNoCeil ()
@@ -536,26 +550,27 @@ def testFactorialHugeInputs(self):
536
550
def testFloor (self ):
537
551
self .assertRaises (TypeError , math .floor )
538
552
self .assertEqual (int , type (math .floor (0.5 )))
539
- self .ftest ('floor(0.5)' , math .floor (0.5 ), 0 )
540
- self .ftest ('floor(1.0)' , math .floor (1.0 ), 1 )
541
- self .ftest ('floor(1.5)' , math .floor (1.5 ), 1 )
542
- self .ftest ('floor(-0.5)' , math .floor (- 0.5 ), - 1 )
543
- self .ftest ('floor(-1.0)' , math .floor (- 1.0 ), - 1 )
544
- self .ftest ('floor(-1.5)' , math .floor (- 1.5 ), - 2 )
545
- # pow() relies on floor() to check for integers
546
- # This fails on some platforms - so check it here
547
- self .ftest ('floor(1.23e167)' , math .floor (1.23e167 ), 1.23e167 )
548
- self .ftest ('floor(-1.23e167)' , math .floor (- 1.23e167 ), - 1.23e167 )
553
+ self .assertEqual (math .floor (0.5 ), 0 )
554
+ self .assertEqual (math .floor (1.0 ), 1 )
555
+ self .assertEqual (math .floor (1.5 ), 1 )
556
+ self .assertEqual (math .floor (- 0.5 ), - 1 )
557
+ self .assertEqual (math .floor (- 1.0 ), - 1 )
558
+ self .assertEqual (math .floor (- 1.5 ), - 2 )
549
559
#self.assertEqual(math.ceil(INF), INF)
550
560
#self.assertEqual(math.ceil(NINF), NINF)
551
561
#self.assertTrue(math.isnan(math.floor(NAN)))
552
562
553
563
class TestFloor :
554
564
def __floor__ (self ):
555
565
return 42
566
+ class FloatFloor (float ):
567
+ def __floor__ (self ):
568
+ return 42
556
569
class TestNoFloor :
557
570
pass
558
- self .ftest ('floor(TestFloor())' , math .floor (TestFloor ()), 42 )
571
+ self .assertEqual (math .floor (TestFloor ()), 42 )
572
+ self .assertEqual (math .floor (FloatFloor ()), 42 )
573
+ self .assertEqual (math .floor (FloatLike (41.9 )), 41 )
559
574
self .assertRaises (TypeError , math .floor , TestNoFloor ())
560
575
561
576
t = TestNoFloor ()
@@ -1448,17 +1463,21 @@ def test_trunc(self):
1448
1463
self .assertEqual (math .trunc (- 0.999999 ), - 0 )
1449
1464
self .assertEqual (math .trunc (- 100.999 ), - 100 )
1450
1465
1451
- class TestTrunc ( object ) :
1466
+ class TestTrunc :
1452
1467
def __trunc__ (self ):
1453
1468
return 23
1454
-
1455
- class TestNoTrunc (object ):
1469
+ class FloatTrunc (float ):
1470
+ def __trunc__ (self ):
1471
+ return 23
1472
+ class TestNoTrunc :
1456
1473
pass
1457
1474
1458
1475
self .assertEqual (math .trunc (TestTrunc ()), 23 )
1476
+ self .assertEqual (math .trunc (FloatTrunc ()), 23 )
1459
1477
1460
1478
self .assertRaises (TypeError , math .trunc )
1461
1479
self .assertRaises (TypeError , math .trunc , 1 , 2 )
1480
+ self .assertRaises (TypeError , math .trunc , FloatLike (23.5 ))
1462
1481
self .assertRaises (TypeError , math .trunc , TestNoTrunc ())
1463
1482
1464
1483
def testIsfinite (self ):
0 commit comments