Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
99c4830d
Commit
99c4830d
authored
Nov 04, 2010
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #3699: Fix test_bigaddrspace and extend it to test bytestrings
as well as unicode strings. Initial patch by Sandro Tosi.
parent
aeb6ceea
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
63 additions
and
23 deletions
+63
-23
Lib/test/test_bigaddrspace.py
Lib/test/test_bigaddrspace.py
+60
-23
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/test_bigaddrspace.py
View file @
99c4830d
"""
These tests are meant to exercise that requests to create objects bigger
than what the address space allows are properly met with an OverflowError
(rather than crash weirdly).
Primarily, this means 32-bit builds with at least 2 GB of available memory.
You need to pass the -M option to regrtest (e.g. "-M 2.1G") for tests to
be enabled.
"""
from
test
import
support
from
test.support
import
bigaddrspacetest
,
MAX_Py_ssize_t
...
...
@@ -6,39 +16,66 @@ import operator
import
sys
class
BytesTest
(
unittest
.
TestCase
):
@
bigaddrspacetest
def
test_concat
(
self
):
# Allocate a bytestring that's near the maximum size allowed by
# the address space, and then try to build a new, larger one through
# concatenation.
x
=
b"x"
*
(
MAX_Py_ssize_t
-
128
)
self
.
assertRaises
(
OverflowError
,
operator
.
add
,
x
,
b"x"
*
128
)
@
bigaddrspacetest
def
test_optimized_concat
(
self
):
x
=
b"x"
*
(
MAX_Py_ssize_t
-
128
)
with
self
.
assertRaises
(
OverflowError
)
as
cm
:
# this statement uses a fast path in ceval.c
x
=
x
+
b"x"
*
128
with
self
.
assertRaises
(
OverflowError
)
as
cm
:
# this statement uses a fast path in ceval.c
x
+=
b"x"
*
128
@
bigaddrspacetest
def
test_repeat
(
self
):
x
=
b"x"
*
(
MAX_Py_ssize_t
-
128
)
self
.
assertRaises
(
OverflowError
,
operator
.
mul
,
x
,
128
)
class
StrTest
(
unittest
.
TestCase
):
unicodesize
=
2
if
sys
.
maxunicode
<
65536
else
4
@
bigaddrspacetest
def
test_concat
(
self
):
s1
=
'x'
*
MAX_Py_ssize_t
self
.
assertRaises
(
OverflowError
,
operator
.
add
,
s1
,
'?'
)
# Create a string half the size that would fill the address space
x
=
"x"
*
(
MAX_Py_ssize_t
//
(
2
*
self
.
unicodesize
))
# Unicode objects trigger MemoryError in case an operation that's
# going to cause a size overflow is executed
self
.
assertRaises
(
MemoryError
,
operator
.
add
,
x
,
x
)
@
bigaddrspacetest
def
test_optimized_concat
(
self
):
x
=
'x'
*
MAX_Py_ssize_t
try
:
x
=
x
+
'?'
# this statement uses a fast path in ceval.c
except
OverflowError
:
pass
else
:
self
.
fail
(
"should have raised OverflowError"
)
try
:
x
+=
'?'
# this statement uses a fast path in ceval.c
except
OverflowError
:
pass
else
:
self
.
fail
(
"should have raised OverflowError"
)
self
.
assertEquals
(
len
(
x
),
MAX_Py_ssize_t
)
### the following test is pending a patch
# (http://mail.python.org/pipermail/python-dev/2006-July/067774.html)
#@bigaddrspacetest
#def test_repeat(self):
# self.assertRaises(OverflowError, operator.mul, 'x', MAX_Py_ssize_t + 1)
x
=
"x"
*
(
MAX_Py_ssize_t
//
(
2
*
self
.
unicodesize
))
with
self
.
assertRaises
(
MemoryError
)
as
cm
:
# this statement uses a fast path in ceval.c
x
=
x
+
x
with
self
.
assertRaises
(
MemoryError
)
as
cm
:
# this statement uses a fast path in ceval.c
x
+=
x
@
bigaddrspacetest
def
test_repeat
(
self
):
x
=
"x"
*
(
MAX_Py_ssize_t
//
(
2
*
self
.
unicodesize
))
self
.
assertRaises
(
MemoryError
,
operator
.
mul
,
x
,
2
)
def
test_main
():
support
.
run_unittest
(
StrTest
)
support
.
run_unittest
(
BytesTest
,
StrTest
)
if
__name__
==
'__main__'
:
if
len
(
sys
.
argv
)
>
1
:
...
...
Misc/NEWS
View file @
99c4830d
...
...
@@ -265,6 +265,9 @@ Tools/Demos
Tests
-----
- Issue #3699: Fix test_bigaddrspace and extend it to test bytestrings
as well as unicode strings. Initial patch by Sandro Tosi.
- Issue #10294: Remove dead code form test_unicode_file.
- Issue #10123: Don't use non-ascii filenames in test_doctest tests. Add a
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment