mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Fix math.ceil() and math.floor() to fall back to __ceil__ and __floor__
methods (respectively). With Keir Mierle.
This commit is contained in:
parent
2fa33db12b
commit
13e05de9ef
2 changed files with 70 additions and 6 deletions
|
@ -58,6 +58,19 @@ class MathTests(unittest.TestCase):
|
|||
self.ftest('ceil(-1.0)', math.ceil(-1.0), -1)
|
||||
self.ftest('ceil(-1.5)', math.ceil(-1.5), -1)
|
||||
|
||||
class TestCeil:
|
||||
def __ceil__(self):
|
||||
return 42
|
||||
class TestNoCeil:
|
||||
pass
|
||||
self.ftest('ceil(TestCeil())', math.ceil(TestCeil()), 42)
|
||||
self.assertRaises(TypeError, math.ceil, TestNoCeil())
|
||||
|
||||
t = TestNoCeil()
|
||||
t.__ceil__ = lambda *args: args
|
||||
self.assertRaises(TypeError, math.ceil, t)
|
||||
self.assertRaises(TypeError, math.ceil, t, 0)
|
||||
|
||||
def testCos(self):
|
||||
self.assertRaises(TypeError, math.cos)
|
||||
self.ftest('cos(-pi/2)', math.cos(-math.pi/2), 0)
|
||||
|
@ -101,6 +114,19 @@ class MathTests(unittest.TestCase):
|
|||
self.ftest('floor(1.23e167)', math.floor(1.23e167), 1.23e167)
|
||||
self.ftest('floor(-1.23e167)', math.floor(-1.23e167), -1.23e167)
|
||||
|
||||
class TestFloor:
|
||||
def __floor__(self):
|
||||
return 42
|
||||
class TestNoFloor:
|
||||
pass
|
||||
self.ftest('floor(TestFloor())', math.floor(TestFloor()), 42)
|
||||
self.assertRaises(TypeError, math.floor, TestNoFloor())
|
||||
|
||||
t = TestNoFloor()
|
||||
t.__floor__ = lambda *args: args
|
||||
self.assertRaises(TypeError, math.floor, t)
|
||||
self.assertRaises(TypeError, math.floor, t, 0)
|
||||
|
||||
def testFmod(self):
|
||||
self.assertRaises(TypeError, math.fmod)
|
||||
self.ftest('fmod(10,1)', math.fmod(10,1), 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue