mirror of
https://github.com/python/cpython.git
synced 2025-12-04 08:34:25 +00:00
Test for math.* exceptional behavior only in verbose mode, so that the
oddball platforms (where, e.g., math.exp(+huge) still fails to raise OverflowError) don't fail the std test suite when run normally.
This commit is contained in:
parent
a8268e9457
commit
98c8184f2f
2 changed files with 37 additions and 28 deletions
|
|
@ -24,4 +24,3 @@ sinh
|
||||||
sqrt
|
sqrt
|
||||||
tan
|
tan
|
||||||
tanh
|
tanh
|
||||||
exceptions
|
|
||||||
|
|
|
||||||
|
|
@ -153,33 +153,43 @@ print 'tanh'
|
||||||
testit('tanh(0)', math.tanh(0), 0)
|
testit('tanh(0)', math.tanh(0), 0)
|
||||||
testit('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
|
testit('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
|
||||||
|
|
||||||
print 'exceptions' # oooooh, *this* is a x-platform gamble! good luck
|
# RED_FLAG 16-Oct-2000 Tim
|
||||||
|
# While 2.0 is more consistent about exceptions than previous releases, it
|
||||||
|
# still fails this part of the test on some platforms. For now, we only
|
||||||
|
# *run* test_exceptions() in verbose mode, so that this isn't normally
|
||||||
|
# tested.
|
||||||
|
|
||||||
try:
|
def test_exceptions():
|
||||||
|
print 'exceptions'
|
||||||
|
try:
|
||||||
x = math.exp(-1000000000)
|
x = math.exp(-1000000000)
|
||||||
except:
|
except:
|
||||||
# mathmodule.c is failing to weed out underflows from libm, or
|
# mathmodule.c is failing to weed out underflows from libm, or
|
||||||
# we've got an fp format with huge dynamic range
|
# we've got an fp format with huge dynamic range
|
||||||
raise TestFailed("underflowing exp() should not have rasied an exception")
|
raise TestFailed("underflowing exp() should not have raised "
|
||||||
if x != 0:
|
"an exception")
|
||||||
|
if x != 0:
|
||||||
raise TestFailed("underflowing exp() should have returned 0")
|
raise TestFailed("underflowing exp() should have returned 0")
|
||||||
|
|
||||||
# If this fails, probably using a strict IEEE-754 conforming libm, and x
|
# If this fails, probably using a strict IEEE-754 conforming libm, and x
|
||||||
# is +Inf afterwards. But Python wants overflows detected by default.
|
# is +Inf afterwards. But Python wants overflows detected by default.
|
||||||
try:
|
try:
|
||||||
x = math.exp(1000000000)
|
x = math.exp(1000000000)
|
||||||
except OverflowError:
|
except OverflowError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
raise TestFailed("overflowing exp() didn't trigger OverflowError")
|
raise TestFailed("overflowing exp() didn't trigger OverflowError")
|
||||||
|
|
||||||
# If this fails, it could be a puzzle. One odd possibility is that
|
# If this fails, it could be a puzzle. One odd possibility is that
|
||||||
# mathmodule.c's CHECK() macro is getting confused while comparing
|
# mathmodule.c's CHECK() macro is getting confused while comparing
|
||||||
# Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
|
# Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
|
||||||
# as a result (and so raising OverflowError instead).
|
# as a result (and so raising OverflowError instead).
|
||||||
try:
|
try:
|
||||||
x = math.sqrt(-1.0)
|
x = math.sqrt(-1.0)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
raise TestFailed("sqrt(-1) didn't raise ValueError")
|
raise TestFailed("sqrt(-1) didn't raise ValueError")
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
test_exceptions()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue