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
bd0fb14e
Commit
bd0fb14e
authored
Oct 29, 2006
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Convert test_types to unittest.
parent
850b2be6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
270 additions
and
298 deletions
+270
-298
Lib/test/output/test_types
Lib/test/output/test_types
+0
-15
Lib/test/test_types.py
Lib/test/test_types.py
+270
-283
No files found.
Lib/test/output/test_types
deleted
100644 → 0
View file @
850b2be6
test_types
6. Built-in types
6.1 Truth value testing
6.2 Boolean operations
6.3 Comparisons
6.4 Numeric types (mostly conversions)
6.4.1 32-bit integers
6.4.2 Long integers
6.4.3 Floating point numbers
6.5 Sequence types
6.5.1 Strings
6.5.2 Tuples [see test_tuple.py]
6.5.3 Lists [see test_list.py]
6.6 Mappings == Dictionaries [see test_dict.py]
Buffers
Lib/test/test_types.py
View file @
bd0fb14e
# Python test set -- part 6, built-in types
from
test.test_support
import
*
print
'6. Built-in types'
print
'6.1 Truth value testing'
if
None
:
raise
TestFailed
,
'None is true instead of false'
if
0
:
raise
TestFailed
,
'0 is true instead of false'
if
0L
:
raise
TestFailed
,
'0L is true instead of false'
if
0.0
:
raise
TestFailed
,
'0.0 is true instead of false'
if
''
:
raise
TestFailed
,
'
\
'
\
'
is true instead of false'
if
not
1
:
raise
TestFailed
,
'1 is false instead of true'
if
not
1L
:
raise
TestFailed
,
'1L is false instead of true'
if
not
1.0
:
raise
TestFailed
,
'1.0 is false instead of true'
if
not
'x'
:
raise
TestFailed
,
'
\
'
x
\
'
is false instead of true'
if
not
{
'x'
:
1
}:
raise
TestFailed
,
'{
\
'
x
\
'
: 1} is false instead of true'
def
f
():
pass
class
C
:
pass
from
test.test_support
import
run_unittest
,
have_unicode
import
unittest
import
sys
x
=
C
()
if
not
f
:
raise
TestFailed
,
'f is false instead of true'
if
not
C
:
raise
TestFailed
,
'C is false instead of true'
if
not
sys
:
raise
TestFailed
,
'sys is false instead of true'
if
not
x
:
raise
TestFailed
,
'x is false instead of true'
print
'6.2 Boolean operations'
if
0
or
0
:
raise
TestFailed
,
'0 or 0 is true instead of false'
if
1
and
1
:
pass
else
:
raise
TestFailed
,
'1 and 1 is false instead of true'
if
not
1
:
raise
TestFailed
,
'not 1 is true instead of false'
print
'6.3 Comparisons'
if
0
<
1
<=
1
==
1
>=
1
>
0
!=
1
:
pass
else
:
raise
TestFailed
,
'int comparisons failed'
if
0L
<
1L
<=
1L
==
1L
>=
1L
>
0L
!=
1L
:
pass
else
:
raise
TestFailed
,
'long int comparisons failed'
if
0.0
<
1.0
<=
1.0
==
1.0
>=
1.0
>
0.0
!=
1.0
:
pass
else
:
raise
TestFailed
,
'float comparisons failed'
if
''
<
'a'
<=
'a'
==
'a'
<
'abc'
<
'abd'
<
'b'
:
pass
else
:
raise
TestFailed
,
'string comparisons failed'
if
None
is
None
:
pass
else
:
raise
TestFailed
,
'identity test failed'
try
:
float
(
''
)
except
ValueError
:
pass
else
:
raise
TestFailed
,
"float('') didn't raise ValueError"
try
:
float
(
'5
\
0
'
)
except
ValueError
:
pass
else
:
raise
TestFailed
,
"float('5
\
0
') didn't raise ValueError"
try
:
5.0
/
0.0
except
ZeroDivisionError
:
pass
else
:
raise
TestFailed
,
"5.0 / 0.0 didn't raise ZeroDivisionError"
try
:
5.0
//
0.0
except
ZeroDivisionError
:
pass
else
:
raise
TestFailed
,
"5.0 // 0.0 didn't raise ZeroDivisionError"
try
:
5.0
%
0.0
except
ZeroDivisionError
:
pass
else
:
raise
TestFailed
,
"5.0 % 0.0 didn't raise ZeroDivisionError"
try
:
5
/
0L
except
ZeroDivisionError
:
pass
else
:
raise
TestFailed
,
"5 / 0L didn't raise ZeroDivisionError"
try
:
5
//
0L
except
ZeroDivisionError
:
pass
else
:
raise
TestFailed
,
"5 // 0L didn't raise ZeroDivisionError"
try
:
5
%
0L
except
ZeroDivisionError
:
pass
else
:
raise
TestFailed
,
"5 % 0L didn't raise ZeroDivisionError"
print
'6.4 Numeric types (mostly conversions)'
if
0
!=
0L
or
0
!=
0.0
or
0L
!=
0.0
:
raise
TestFailed
,
'mixed comparisons'
if
1
!=
1L
or
1
!=
1.0
or
1L
!=
1.0
:
raise
TestFailed
,
'mixed comparisons'
if
-
1
!=
-
1L
or
-
1
!=
-
1.0
or
-
1L
!=
-
1.0
:
raise
TestFailed
,
'int/long/float value not equal'
# calling built-in types without argument must return 0
if
int
()
!=
0
:
raise
TestFailed
,
'int() does not return 0'
if
long
()
!=
0L
:
raise
TestFailed
,
'long() does not return 0L'
if
float
()
!=
0.0
:
raise
TestFailed
,
'float() does not return 0.0'
if
int
(
1.9
)
==
1
==
int
(
1.1
)
and
int
(
-
1.1
)
==
-
1
==
int
(
-
1.9
):
pass
else
:
raise
TestFailed
,
'int() does not round properly'
if
long
(
1.9
)
==
1L
==
long
(
1.1
)
and
long
(
-
1.1
)
==
-
1L
==
long
(
-
1.9
):
pass
else
:
raise
TestFailed
,
'long() does not round properly'
if
float
(
1
)
==
1.0
and
float
(
-
1
)
==
-
1.0
and
float
(
0
)
==
0.0
:
pass
else
:
raise
TestFailed
,
'float() does not work properly'
print
'6.4.1 32-bit integers'
# Ensure the first 256 integers are shared
a
=
256
b
=
128
*
2
if
a
is
not
b
:
raise
TestFailed
,
'256 is not shared'
if
12
+
24
!=
36
:
raise
TestFailed
,
'int op'
if
12
+
(
-
24
)
!=
-
12
:
raise
TestFailed
,
'int op'
if
(
-
12
)
+
24
!=
12
:
raise
TestFailed
,
'int op'
if
(
-
12
)
+
(
-
24
)
!=
-
36
:
raise
TestFailed
,
'int op'
if
not
12
<
24
:
raise
TestFailed
,
'int op'
if
not
-
24
<
-
12
:
raise
TestFailed
,
'int op'
# Test for a particular bug in integer multiply
xsize
,
ysize
,
zsize
=
238
,
356
,
4
if
not
(
xsize
*
ysize
*
zsize
==
zsize
*
xsize
*
ysize
==
338912
):
raise
TestFailed
,
'int mul commutativity'
# And another.
m
=
-
sys
.
maxint
-
1
for
divisor
in
1
,
2
,
4
,
8
,
16
,
32
:
j
=
m
//
divisor
prod
=
divisor
*
j
if
prod
!=
m
:
raise
TestFailed
,
"%r * %r == %r != %r"
%
(
divisor
,
j
,
prod
,
m
)
if
type
(
prod
)
is
not
int
:
raise
TestFailed
,
(
"expected type(prod) to be int, not %r"
%
type
(
prod
))
# Check for expected * overflow to long.
for
divisor
in
1
,
2
,
4
,
8
,
16
,
32
:
j
=
m
//
divisor
-
1
prod
=
divisor
*
j
if
type
(
prod
)
is
not
long
:
raise
TestFailed
,
(
"expected type(%r) to be long, not %r"
%
(
prod
,
type
(
prod
)))
# Check for expected * overflow to long.
m
=
sys
.
maxint
for
divisor
in
1
,
2
,
4
,
8
,
16
,
32
:
j
=
m
//
divisor
+
1
prod
=
divisor
*
j
if
type
(
prod
)
is
not
long
:
raise
TestFailed
,
(
"expected type(%r) to be long, not %r"
%
(
prod
,
type
(
prod
)))
print
'6.4.2 Long integers'
if
12L
+
24L
!=
36L
:
raise
TestFailed
,
'long op'
if
12L
+
(
-
24L
)
!=
-
12L
:
raise
TestFailed
,
'long op'
if
(
-
12L
)
+
24L
!=
12L
:
raise
TestFailed
,
'long op'
if
(
-
12L
)
+
(
-
24L
)
!=
-
36L
:
raise
TestFailed
,
'long op'
if
not
12L
<
24L
:
raise
TestFailed
,
'long op'
if
not
-
24L
<
-
12L
:
raise
TestFailed
,
'long op'
x
=
sys
.
maxint
if
int
(
long
(
x
))
!=
x
:
raise
TestFailed
,
'long op'
try
:
y
=
int
(
long
(
x
)
+
1L
)
except
OverflowError
:
raise
TestFailed
,
'long op'
if
not
isinstance
(
y
,
long
):
raise
TestFailed
,
'long op'
x
=
-
x
if
int
(
long
(
x
))
!=
x
:
raise
TestFailed
,
'long op'
x
=
x
-
1
if
int
(
long
(
x
))
!=
x
:
raise
TestFailed
,
'long op'
try
:
y
=
int
(
long
(
x
)
-
1L
)
except
OverflowError
:
raise
TestFailed
,
'long op'
if
not
isinstance
(
y
,
long
):
raise
TestFailed
,
'long op'
try
:
5
<<
-
5
except
ValueError
:
pass
else
:
raise
TestFailed
,
'int negative shift <<'
try
:
5L
<<
-
5L
except
ValueError
:
pass
else
:
raise
TestFailed
,
'long negative shift <<'
try
:
5
>>
-
5
except
ValueError
:
pass
else
:
raise
TestFailed
,
'int negative shift >>'
try
:
5L
>>
-
5L
except
ValueError
:
pass
else
:
raise
TestFailed
,
'long negative shift >>'
print
'6.4.3 Floating point numbers'
if
12.0
+
24.0
!=
36.0
:
raise
TestFailed
,
'float op'
if
12.0
+
(
-
24.0
)
!=
-
12.0
:
raise
TestFailed
,
'float op'
if
(
-
12.0
)
+
24.0
!=
12.0
:
raise
TestFailed
,
'float op'
if
(
-
12.0
)
+
(
-
24.0
)
!=
-
36.0
:
raise
TestFailed
,
'float op'
if
not
12.0
<
24.0
:
raise
TestFailed
,
'float op'
if
not
-
24.0
<
-
12.0
:
raise
TestFailed
,
'float op'
print
'6.5 Sequence types'
print
'6.5.1 Strings'
if
len
(
''
)
!=
0
:
raise
TestFailed
,
'len(
\
'
\
'
)'
if
len
(
'a'
)
!=
1
:
raise
TestFailed
,
'len(
\
'
a
\
'
)'
if
len
(
'abcdef'
)
!=
6
:
raise
TestFailed
,
'len(
\
'
abcdef
\
'
)'
if
'xyz'
+
'abcde'
!=
'xyzabcde'
:
raise
TestFailed
,
'string concatenation'
if
'xyz'
*
3
!=
'xyzxyzxyz'
:
raise
TestFailed
,
'string repetition *3'
if
0
*
'abcde'
!=
''
:
raise
TestFailed
,
'string repetition 0*'
if
min
(
'abc'
)
!=
'a'
or
max
(
'abc'
)
!=
'c'
:
raise
TestFailed
,
'min/max string'
if
'a'
in
'abc'
and
'b'
in
'abc'
and
'c'
in
'abc'
and
'd'
not
in
'abc'
:
pass
else
:
raise
TestFailed
,
'in/not in string'
x
=
'x'
*
103
if
'%s!'
%
x
!=
x
+
'!'
:
raise
TestFailed
,
'nasty string formatting bug'
#extended slices for strings
a
=
'0123456789'
vereq
(
a
[::],
a
)
vereq
(
a
[::
2
],
'02468'
)
vereq
(
a
[
1
::
2
],
'13579'
)
vereq
(
a
[::
-
1
],
'9876543210'
)
vereq
(
a
[::
-
2
],
'97531'
)
vereq
(
a
[
3
::
-
2
],
'31'
)
vereq
(
a
[
-
100
:
100
:],
a
)
vereq
(
a
[
100
:
-
100
:
-
1
],
a
[::
-
1
])
vereq
(
a
[
-
100L
:
100L
:
2L
],
'02468'
)
if
have_unicode
:
a
=
unicode
(
'0123456789'
,
'ascii'
)
vereq
(
a
[::],
a
)
vereq
(
a
[::
2
],
unicode
(
'02468'
,
'ascii'
))
vereq
(
a
[
1
::
2
],
unicode
(
'13579'
,
'ascii'
))
vereq
(
a
[::
-
1
],
unicode
(
'9876543210'
,
'ascii'
))
vereq
(
a
[::
-
2
],
unicode
(
'97531'
,
'ascii'
))
vereq
(
a
[
3
::
-
2
],
unicode
(
'31'
,
'ascii'
))
vereq
(
a
[
-
100
:
100
:],
a
)
vereq
(
a
[
100
:
-
100
:
-
1
],
a
[::
-
1
])
vereq
(
a
[
-
100L
:
100L
:
2L
],
unicode
(
'02468'
,
'ascii'
))
print
'6.5.2 Tuples [see test_tuple.py]'
print
'6.5.3 Lists [see test_list.py]'
print
'6.6 Mappings == Dictionaries [see test_dict.py]'
try
:
type
(
1
,
2
)
except
TypeError
:
pass
else
:
raise
TestFailed
,
'type(), w/2 args expected TypeError'
try
:
type
(
1
,
2
,
3
,
4
)
except
TypeError
:
pass
else
:
raise
TestFailed
,
'type(), w/4 args expected TypeError'
print
'Buffers'
try
:
buffer
(
'asdf'
,
-
1
)
except
ValueError
:
pass
else
:
raise
TestFailed
,
"buffer('asdf', -1) should raise ValueError"
cmp
(
buffer
(
"abc"
),
buffer
(
"def"
))
# used to raise a warning: tp_compare didn't return -1, 0, or 1
try
:
buffer
(
None
)
except
TypeError
:
pass
else
:
raise
TestFailed
,
"buffer(None) should raise TypeError"
a
=
buffer
(
'asdf'
)
hash
(
a
)
b
=
a
*
5
if
a
==
b
:
raise
TestFailed
,
'buffers should not be equal'
if
str
(
b
)
!=
(
'asdf'
*
5
):
raise
TestFailed
,
'repeated buffer has wrong content'
if
str
(
a
*
0
)
!=
''
:
raise
TestFailed
,
'repeated buffer zero times has wrong content'
if
str
(
a
+
buffer
(
'def'
))
!=
'asdfdef'
:
raise
TestFailed
,
'concatenation of buffers yields wrong content'
if
str
(
buffer
(
a
))
!=
'asdf'
:
raise
TestFailed
,
'composing buffers failed'
if
str
(
buffer
(
a
,
2
))
!=
'df'
:
raise
TestFailed
,
'specifying buffer offset failed'
if
str
(
buffer
(
a
,
0
,
2
))
!=
'as'
:
raise
TestFailed
,
'specifying buffer size failed'
if
str
(
buffer
(
a
,
1
,
2
))
!=
'sd'
:
raise
TestFailed
,
'specifying buffer offset and size failed'
try
:
buffer
(
buffer
(
'asdf'
,
1
),
-
1
)
except
ValueError
:
pass
else
:
raise
TestFailed
,
"buffer(buffer('asdf', 1), -1) should raise ValueError"
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
0
))
!=
'as'
:
raise
TestFailed
,
'composing length-specified buffer failed'
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
0
,
5000
))
!=
'as'
:
raise
TestFailed
,
'composing length-specified buffer failed'
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
0
,
-
1
))
!=
'as'
:
raise
TestFailed
,
'composing length-specified buffer failed'
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
1
,
2
))
!=
's'
:
raise
TestFailed
,
'composing length-specified buffer failed'
try
:
a
[
1
]
=
'g'
except
TypeError
:
pass
else
:
raise
TestFailed
,
"buffer assignment should raise TypeError"
try
:
a
[
0
:
1
]
=
'g'
except
TypeError
:
pass
else
:
raise
TestFailed
,
"buffer slice assignment should raise TypeError"
# array.array() returns an object that does not implement a char buffer,
# something which int() uses for conversion.
import
array
try
:
int
(
buffer
(
array
.
array
(
'c'
)))
except
TypeError
:
pass
else
:
raise
TestFailed
,
"char buffer (at C level) not working"
class
TypesTests
(
unittest
.
TestCase
):
def
test_truth_values
(
self
):
if
None
:
self
.
fail
(
'None is true instead of false'
)
if
0
:
self
.
fail
(
'0 is true instead of false'
)
if
0L
:
self
.
fail
(
'0L is true instead of false'
)
if
0.0
:
self
.
fail
(
'0.0 is true instead of false'
)
if
''
:
self
.
fail
(
'
\
'
\
'
is true instead of false'
)
if
not
1
:
self
.
fail
(
'1 is false instead of true'
)
if
not
1L
:
self
.
fail
(
'1L is false instead of true'
)
if
not
1.0
:
self
.
fail
(
'1.0 is false instead of true'
)
if
not
'x'
:
self
.
fail
(
'
\
'
x
\
'
is false instead of true'
)
if
not
{
'x'
:
1
}:
self
.
fail
(
'{
\
'
x
\
'
: 1} is false instead of true'
)
def
f
():
pass
class
C
:
pass
import
sys
x
=
C
()
if
not
f
:
self
.
fail
(
'f is false instead of true'
)
if
not
C
:
self
.
fail
(
'C is false instead of true'
)
if
not
sys
:
self
.
fail
(
'sys is false instead of true'
)
if
not
x
:
self
.
fail
(
'x is false instead of true'
)
def
test_boolean_ops
(
self
):
if
0
or
0
:
self
.
fail
(
'0 or 0 is true instead of false'
)
if
1
and
1
:
pass
else
:
self
.
fail
(
'1 and 1 is false instead of true'
)
if
not
1
:
self
.
fail
(
'not 1 is true instead of false'
)
def
test_comparisons
(
self
):
if
0
<
1
<=
1
==
1
>=
1
>
0
!=
1
:
pass
else
:
self
.
fail
(
'int comparisons failed'
)
if
0L
<
1L
<=
1L
==
1L
>=
1L
>
0L
!=
1L
:
pass
else
:
self
.
fail
(
'long int comparisons failed'
)
if
0.0
<
1.0
<=
1.0
==
1.0
>=
1.0
>
0.0
!=
1.0
:
pass
else
:
self
.
fail
(
'float comparisons failed'
)
if
''
<
'a'
<=
'a'
==
'a'
<
'abc'
<
'abd'
<
'b'
:
pass
else
:
self
.
fail
(
'string comparisons failed'
)
if
None
is
None
:
pass
else
:
self
.
fail
(
'identity test failed'
)
def
test_float_constructor
(
self
):
self
.
assertRaises
(
ValueError
,
float
,
''
)
self
.
assertRaises
(
ValueError
,
float
,
'5
\
0
'
)
def
test_zero_division
(
self
):
try
:
5.0
/
0.0
except
ZeroDivisionError
:
pass
else
:
self
.
fail
(
"5.0 / 0.0 didn't raise ZeroDivisionError"
)
try
:
5.0
//
0.0
except
ZeroDivisionError
:
pass
else
:
self
.
fail
(
"5.0 // 0.0 didn't raise ZeroDivisionError"
)
try
:
5.0
%
0.0
except
ZeroDivisionError
:
pass
else
:
self
.
fail
(
"5.0 % 0.0 didn't raise ZeroDivisionError"
)
try
:
5
/
0L
except
ZeroDivisionError
:
pass
else
:
self
.
fail
(
"5 / 0L didn't raise ZeroDivisionError"
)
try
:
5
//
0L
except
ZeroDivisionError
:
pass
else
:
self
.
fail
(
"5 // 0L didn't raise ZeroDivisionError"
)
try
:
5
%
0L
except
ZeroDivisionError
:
pass
else
:
self
.
fail
(
"5 % 0L didn't raise ZeroDivisionError"
)
def
test_numeric_types
(
self
):
if
0
!=
0L
or
0
!=
0.0
or
0L
!=
0.0
:
self
.
fail
(
'mixed comparisons'
)
if
1
!=
1L
or
1
!=
1.0
or
1L
!=
1.0
:
self
.
fail
(
'mixed comparisons'
)
if
-
1
!=
-
1L
or
-
1
!=
-
1.0
or
-
1L
!=
-
1.0
:
self
.
fail
(
'int/long/float value not equal'
)
# calling built-in types without argument must return 0
if
int
()
!=
0
:
self
.
fail
(
'int() does not return 0'
)
if
long
()
!=
0L
:
self
.
fail
(
'long() does not return 0L'
)
if
float
()
!=
0.0
:
self
.
fail
(
'float() does not return 0.0'
)
if
int
(
1.9
)
==
1
==
int
(
1.1
)
and
int
(
-
1.1
)
==
-
1
==
int
(
-
1.9
):
pass
else
:
self
.
fail
(
'int() does not round properly'
)
if
long
(
1.9
)
==
1L
==
long
(
1.1
)
and
long
(
-
1.1
)
==
-
1L
==
long
(
-
1.9
):
pass
else
:
self
.
fail
(
'long() does not round properly'
)
if
float
(
1
)
==
1.0
and
float
(
-
1
)
==
-
1.0
and
float
(
0
)
==
0.0
:
pass
else
:
self
.
fail
(
'float() does not work properly'
)
def
test_normal_integers
(
self
):
# Ensure the first 256 integers are shared
a
=
256
b
=
128
*
2
if
a
is
not
b
:
self
.
fail
(
'256 is not shared'
)
if
12
+
24
!=
36
:
self
.
fail
(
'int op'
)
if
12
+
(
-
24
)
!=
-
12
:
self
.
fail
(
'int op'
)
if
(
-
12
)
+
24
!=
12
:
self
.
fail
(
'int op'
)
if
(
-
12
)
+
(
-
24
)
!=
-
36
:
self
.
fail
(
'int op'
)
if
not
12
<
24
:
self
.
fail
(
'int op'
)
if
not
-
24
<
-
12
:
self
.
fail
(
'int op'
)
# Test for a particular bug in integer multiply
xsize
,
ysize
,
zsize
=
238
,
356
,
4
if
not
(
xsize
*
ysize
*
zsize
==
zsize
*
xsize
*
ysize
==
338912
):
self
.
fail
(
'int mul commutativity'
)
# And another.
m
=
-
sys
.
maxint
-
1
for
divisor
in
1
,
2
,
4
,
8
,
16
,
32
:
j
=
m
//
divisor
prod
=
divisor
*
j
if
prod
!=
m
:
self
.
fail
(
"%r * %r == %r != %r"
%
(
divisor
,
j
,
prod
,
m
))
if
type
(
prod
)
is
not
int
:
self
.
fail
(
"expected type(prod) to be int, not %r"
%
type
(
prod
))
# Check for expected * overflow to long.
for
divisor
in
1
,
2
,
4
,
8
,
16
,
32
:
j
=
m
//
divisor
-
1
prod
=
divisor
*
j
if
type
(
prod
)
is
not
long
:
self
.
fail
(
"expected type(%r) to be long, not %r"
%
(
prod
,
type
(
prod
)))
# Check for expected * overflow to long.
m
=
sys
.
maxint
for
divisor
in
1
,
2
,
4
,
8
,
16
,
32
:
j
=
m
//
divisor
+
1
prod
=
divisor
*
j
if
type
(
prod
)
is
not
long
:
self
.
fail
(
"expected type(%r) to be long, not %r"
%
(
prod
,
type
(
prod
)))
def
test_long_integers
(
self
):
if
12L
+
24L
!=
36L
:
self
.
fail
(
'long op'
)
if
12L
+
(
-
24L
)
!=
-
12L
:
self
.
fail
(
'long op'
)
if
(
-
12L
)
+
24L
!=
12L
:
self
.
fail
(
'long op'
)
if
(
-
12L
)
+
(
-
24L
)
!=
-
36L
:
self
.
fail
(
'long op'
)
if
not
12L
<
24L
:
self
.
fail
(
'long op'
)
if
not
-
24L
<
-
12L
:
self
.
fail
(
'long op'
)
x
=
sys
.
maxint
if
int
(
long
(
x
))
!=
x
:
self
.
fail
(
'long op'
)
try
:
y
=
int
(
long
(
x
)
+
1L
)
except
OverflowError
:
self
.
fail
(
'long op'
)
if
not
isinstance
(
y
,
long
):
self
.
fail
(
'long op'
)
x
=
-
x
if
int
(
long
(
x
))
!=
x
:
self
.
fail
(
'long op'
)
x
=
x
-
1
if
int
(
long
(
x
))
!=
x
:
self
.
fail
(
'long op'
)
try
:
y
=
int
(
long
(
x
)
-
1L
)
except
OverflowError
:
self
.
fail
(
'long op'
)
if
not
isinstance
(
y
,
long
):
self
.
fail
(
'long op'
)
try
:
5
<<
-
5
except
ValueError
:
pass
else
:
self
.
fail
(
'int negative shift <<'
)
try
:
5L
<<
-
5L
except
ValueError
:
pass
else
:
self
.
fail
(
'long negative shift <<'
)
try
:
5
>>
-
5
except
ValueError
:
pass
else
:
self
.
fail
(
'int negative shift >>'
)
try
:
5L
>>
-
5L
except
ValueError
:
pass
else
:
self
.
fail
(
'long negative shift >>'
)
def
test_floats
(
self
):
if
12.0
+
24.0
!=
36.0
:
self
.
fail
(
'float op'
)
if
12.0
+
(
-
24.0
)
!=
-
12.0
:
self
.
fail
(
'float op'
)
if
(
-
12.0
)
+
24.0
!=
12.0
:
self
.
fail
(
'float op'
)
if
(
-
12.0
)
+
(
-
24.0
)
!=
-
36.0
:
self
.
fail
(
'float op'
)
if
not
12.0
<
24.0
:
self
.
fail
(
'float op'
)
if
not
-
24.0
<
-
12.0
:
self
.
fail
(
'float op'
)
def
test_strings
(
self
):
if
len
(
''
)
!=
0
:
self
.
fail
(
'len(
\
'
\
'
)'
)
if
len
(
'a'
)
!=
1
:
self
.
fail
(
'len(
\
'
a
\
'
)'
)
if
len
(
'abcdef'
)
!=
6
:
self
.
fail
(
'len(
\
'
abcdef
\
'
)'
)
if
'xyz'
+
'abcde'
!=
'xyzabcde'
:
self
.
fail
(
'string concatenation'
)
if
'xyz'
*
3
!=
'xyzxyzxyz'
:
self
.
fail
(
'string repetition *3'
)
if
0
*
'abcde'
!=
''
:
self
.
fail
(
'string repetition 0*'
)
if
min
(
'abc'
)
!=
'a'
or
max
(
'abc'
)
!=
'c'
:
self
.
fail
(
'min/max string'
)
if
'a'
in
'abc'
and
'b'
in
'abc'
and
'c'
in
'abc'
and
'd'
not
in
'abc'
:
pass
else
:
self
.
fail
(
'in/not in string'
)
x
=
'x'
*
103
if
'%s!'
%
x
!=
x
+
'!'
:
self
.
fail
(
'nasty string formatting bug'
)
#extended slices for strings
a
=
'0123456789'
self
.
assertEqual
(
a
[::],
a
)
self
.
assertEqual
(
a
[::
2
],
'02468'
)
self
.
assertEqual
(
a
[
1
::
2
],
'13579'
)
self
.
assertEqual
(
a
[::
-
1
],
'9876543210'
)
self
.
assertEqual
(
a
[::
-
2
],
'97531'
)
self
.
assertEqual
(
a
[
3
::
-
2
],
'31'
)
self
.
assertEqual
(
a
[
-
100
:
100
:],
a
)
self
.
assertEqual
(
a
[
100
:
-
100
:
-
1
],
a
[::
-
1
])
self
.
assertEqual
(
a
[
-
100L
:
100L
:
2L
],
'02468'
)
if
have_unicode
:
a
=
unicode
(
'0123456789'
,
'ascii'
)
self
.
assertEqual
(
a
[::],
a
)
self
.
assertEqual
(
a
[::
2
],
unicode
(
'02468'
,
'ascii'
))
self
.
assertEqual
(
a
[
1
::
2
],
unicode
(
'13579'
,
'ascii'
))
self
.
assertEqual
(
a
[::
-
1
],
unicode
(
'9876543210'
,
'ascii'
))
self
.
assertEqual
(
a
[::
-
2
],
unicode
(
'97531'
,
'ascii'
))
self
.
assertEqual
(
a
[
3
::
-
2
],
unicode
(
'31'
,
'ascii'
))
self
.
assertEqual
(
a
[
-
100
:
100
:],
a
)
self
.
assertEqual
(
a
[
100
:
-
100
:
-
1
],
a
[::
-
1
])
self
.
assertEqual
(
a
[
-
100L
:
100L
:
2L
],
unicode
(
'02468'
,
'ascii'
))
def
test_type_function
(
self
):
self
.
assertRaises
(
TypeError
,
type
,
1
,
2
)
self
.
assertRaises
(
TypeError
,
type
,
1
,
2
,
3
,
4
)
def
test_buffers
(
self
):
self
.
assertRaises
(
ValueError
,
buffer
,
'asdf'
,
-
1
)
cmp
(
buffer
(
"abc"
),
buffer
(
"def"
))
# used to raise a warning: tp_compare didn't return -1, 0, or 1
self
.
assertRaises
(
TypeError
,
buffer
,
None
)
a
=
buffer
(
'asdf'
)
hash
(
a
)
b
=
a
*
5
if
a
==
b
:
self
.
fail
(
'buffers should not be equal'
)
if
str
(
b
)
!=
(
'asdf'
*
5
):
self
.
fail
(
'repeated buffer has wrong content'
)
if
str
(
a
*
0
)
!=
''
:
self
.
fail
(
'repeated buffer zero times has wrong content'
)
if
str
(
a
+
buffer
(
'def'
))
!=
'asdfdef'
:
self
.
fail
(
'concatenation of buffers yields wrong content'
)
if
str
(
buffer
(
a
))
!=
'asdf'
:
self
.
fail
(
'composing buffers failed'
)
if
str
(
buffer
(
a
,
2
))
!=
'df'
:
self
.
fail
(
'specifying buffer offset failed'
)
if
str
(
buffer
(
a
,
0
,
2
))
!=
'as'
:
self
.
fail
(
'specifying buffer size failed'
)
if
str
(
buffer
(
a
,
1
,
2
))
!=
'sd'
:
self
.
fail
(
'specifying buffer offset and size failed'
)
self
.
assertRaises
(
ValueError
,
buffer
,
buffer
(
'asdf'
,
1
),
-
1
)
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
0
))
!=
'as'
:
self
.
fail
(
'composing length-specified buffer failed'
)
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
0
,
5000
))
!=
'as'
:
self
.
fail
(
'composing length-specified buffer failed'
)
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
0
,
-
1
))
!=
'as'
:
self
.
fail
(
'composing length-specified buffer failed'
)
if
str
(
buffer
(
buffer
(
'asdf'
,
0
,
2
),
1
,
2
))
!=
's'
:
self
.
fail
(
'composing length-specified buffer failed'
)
try
:
a
[
1
]
=
'g'
except
TypeError
:
pass
else
:
self
.
fail
(
"buffer assignment should raise TypeError"
)
try
:
a
[
0
:
1
]
=
'g'
except
TypeError
:
pass
else
:
self
.
fail
(
"buffer slice assignment should raise TypeError"
)
# array.array() returns an object that does not implement a char buffer,
# something which int() uses for conversion.
import
array
try
:
int
(
buffer
(
array
.
array
(
'c'
)))
except
TypeError
:
pass
else
:
self
.
fail
(
"char buffer (at C level) not working"
)
def
test_main
():
run_unittest
(
TypesTests
)
if
__name__
==
'__main__'
:
test_main
()
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