mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Trent Mick <trentm@activestate.com>:
Testing: test_array.py was also extended to check that one can set the full range of values for each of the integral signed and unsigned array types. This closes SourceForge patch #100506.
This commit is contained in:
parent
541dc3b7b2
commit
7833447f8f
1 changed files with 54 additions and 2 deletions
|
@ -15,6 +15,44 @@ def main():
|
|||
unlink(TESTFN)
|
||||
|
||||
|
||||
def testoverflow(type, lowerLimit, upperLimit):
|
||||
# should not overflow assigning lower limit
|
||||
if verbose:
|
||||
print "overflow test: array(%s, [%s])" % (`type`, `lowerLimit`)
|
||||
try:
|
||||
a = array.array(type, [lowerLimit])
|
||||
except:
|
||||
raise TestFailed, "array(%s) overflowed assigning %s" %\
|
||||
(`type`, `lowerLimit`)
|
||||
# should overflow assigning less than lower limit
|
||||
if verbose:
|
||||
print "overflow test: array(%s, [%s])" % (`type`, `lowerLimit-1`)
|
||||
try:
|
||||
a = array.array(type, [lowerLimit-1])
|
||||
raise TestFailed, "array(%s) did not overflow assigning %s" %\
|
||||
(`type`, `lowerLimit-1`)
|
||||
except OverflowError:
|
||||
pass
|
||||
# should not overflow assigning upper limit
|
||||
if verbose:
|
||||
print "overflow test: array(%s, [%s])" % (`type`, `upperLimit`)
|
||||
try:
|
||||
a = array.array(type, [upperLimit])
|
||||
except:
|
||||
raise TestFailed, "array(%s) overflowed assigning %s" %\
|
||||
(`type`, `upperLimit`)
|
||||
# should overflow assigning more than upper limit
|
||||
if verbose:
|
||||
print "overflow test: array(%s, [%s])" % (`type`, `upperLimit+1`)
|
||||
try:
|
||||
a = array.array(type, [upperLimit+1])
|
||||
raise TestFailed, "array(%s) did not overflow assigning %s" %\
|
||||
(`type`, `upperLimit+1`)
|
||||
except OverflowError:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def testtype(type, example):
|
||||
|
||||
a = array.array(type)
|
||||
|
@ -81,6 +119,20 @@ def testtype(type, example):
|
|||
if a != array.array(type, [1, 1, 2, 3, 4, 5, 5]):
|
||||
raise TestFailed, "array(%s) self-slice-assign (cntr)" % `type`
|
||||
|
||||
|
||||
# test that overflow exceptions are raised as expected for assignment
|
||||
# to array of specific integral types
|
||||
from math import pow
|
||||
if type in ('b', 'h', 'i', 'l'):
|
||||
# check signed and unsigned versions
|
||||
a = array.array(type)
|
||||
signedLowerLimit = -1 * long(pow(2, a.itemsize * 8 - 1))
|
||||
signedUpperLimit = long(pow(2, a.itemsize * 8 - 1)) - 1L
|
||||
unsignedLowerLimit = 0
|
||||
unsignedUpperLimit = long(pow(2, a.itemsize * 8)) - 1L
|
||||
testoverflow(type, signedLowerLimit, signedUpperLimit)
|
||||
testoverflow(type.upper(), unsignedLowerLimit, unsignedUpperLimit)
|
||||
|
||||
|
||||
|
||||
main()
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue