Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
39815110
Kaydet (Commit)
39815110
authored
Eyl 24, 2004
tarafından
Johannes Gijsbers
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Port test_unpack to doctest (patch #736962).
üst
6bc937cf
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
131 additions
and
144 deletions
+131
-144
test_unpack.py
Lib/test/test_unpack.py
+131
-144
No files found.
Lib/test/test_unpack.py
Dosyayı görüntüle @
39815110
from
test.test_support
import
TestFailed
,
verbose
t
=
(
1
,
2
,
3
)
l
=
[
4
,
5
,
6
]
class
Seq
:
def
__getitem__
(
self
,
i
):
if
i
>=
0
and
i
<
3
:
return
i
raise
IndexError
a
=
-
1
b
=
-
1
c
=
-
1
# unpack tuple
if
verbose
:
print
'unpack tuple'
a
,
b
,
c
=
t
if
a
!=
1
or
b
!=
2
or
c
!=
3
:
raise
TestFailed
# unpack list
if
verbose
:
print
'unpack list'
a
,
b
,
c
=
l
if
a
!=
4
or
b
!=
5
or
c
!=
6
:
raise
TestFailed
# unpack implied tuple
if
verbose
:
print
'unpack implied tuple'
a
,
b
,
c
=
7
,
8
,
9
if
a
!=
7
or
b
!=
8
or
c
!=
9
:
raise
TestFailed
# unpack string... fun!
if
verbose
:
print
'unpack string'
a
,
b
,
c
=
'one'
if
a
!=
'o'
or
b
!=
'n'
or
c
!=
'e'
:
raise
TestFailed
# unpack generic sequence
if
verbose
:
print
'unpack sequence'
a
,
b
,
c
=
Seq
()
if
a
!=
0
or
b
!=
1
or
c
!=
2
:
raise
TestFailed
# single element unpacking, with extra syntax
if
verbose
:
print
'unpack single tuple/list'
st
=
(
99
,)
sl
=
[
100
]
a
,
=
st
if
a
!=
99
:
raise
TestFailed
b
,
=
sl
if
b
!=
100
:
raise
TestFailed
# now for some failures
# unpacking non-sequence
if
verbose
:
print
'unpack non-sequence'
try
:
a
,
b
,
c
=
7
raise
TestFailed
except
TypeError
:
pass
# unpacking tuple of wrong size
if
verbose
:
print
'unpack tuple wrong size'
try
:
a
,
b
=
t
raise
TestFailed
except
ValueError
:
pass
# unpacking list of wrong size
if
verbose
:
print
'unpack list wrong size'
try
:
a
,
b
=
l
raise
TestFailed
except
ValueError
:
pass
# unpacking sequence too short
if
verbose
:
print
'unpack sequence too short'
try
:
a
,
b
,
c
,
d
=
Seq
()
raise
TestFailed
except
ValueError
:
pass
# unpacking sequence too long
if
verbose
:
print
'unpack sequence too long'
try
:
a
,
b
=
Seq
()
raise
TestFailed
except
ValueError
:
pass
# unpacking a sequence where the test for too long raises a different
# kind of error
class
BozoError
(
Exception
):
pass
class
BadSeq
:
def
__getitem__
(
self
,
i
):
if
i
>=
0
and
i
<
3
:
return
i
elif
i
==
3
:
raise
BozoError
else
:
raise
IndexError
# trigger code while not expecting an IndexError
if
verbose
:
print
'unpack sequence too long, wrong error'
try
:
a
,
b
,
c
,
d
,
e
=
BadSeq
()
raise
TestFailed
except
BozoError
:
pass
# trigger code while expecting an IndexError
if
verbose
:
print
'unpack sequence too short, wrong error'
try
:
a
,
b
,
c
=
BadSeq
()
raise
TestFailed
except
BozoError
:
pass
doctests
=
"""
Unpack tuple
>>> t = (1, 2, 3)
>>> a, b, c = t
>>> a == 1 and b == 2 and c == 3
True
Unpack list
>>> l = [4, 5, 6]
>>> a, b, c = l
>>> a == 4 and b == 5 and c == 6
True
Unpack implied tuple
>>> a, b, c = 7, 8, 9
>>> a == 7 and b == 8 and c == 9
True
Unpack string... fun!
>>> a, b, c = 'one'
>>> a == 'o' and b == 'n' and c == 'e'
True
Unpack generic sequence
>>> class Seq:
... def __getitem__(self, i):
... if i >= 0 and i < 3: return i
... raise IndexError
...
>>> a, b, c = Seq()
>>> a == 0 and b == 1 and c == 2
True
Single element unpacking, with extra syntax
>>> st = (99,)
>>> sl = [100]
>>> a, = st
>>> a
99
>>> b, = sl
>>> b
100
Now for some failures
Unpacking non-sequence
>>> a, b, c = 7
Traceback (most recent call last):
...
TypeError: unpack non-sequence
Unpacking tuple of wrong size
>>> a, b = t
Traceback (most recent call last):
...
ValueError: too many values to unpack
Unpacking tuple of wrong size
>>> a, b = l
Traceback (most recent call last):
...
ValueError: too many values to unpack
Unpacking sequence too short
>>> a, b, c, d = Seq()
Traceback (most recent call last):
...
ValueError: need more than 3 values to unpack
Unpacking sequence too long
>>> a, b = Seq()
Traceback (most recent call last):
...
ValueError: too many values to unpack
Unpacking a sequence where the test for too long raises a different kind of
error
>>> class BozoError(Exception):
... pass
...
>>> class BadSeq:
... def __getitem__(self, i):
... if i >= 0 and i < 3:
... return i
... elif i == 3:
... raise BozoError
... else:
... raise IndexError
...
Trigger code while not expecting an IndexError (unpack sequence too long, wrong
error)
>>> a, b, c, d, e = BadSeq()
Traceback (most recent call last):
...
BozoError
Trigger code while expecting an IndexError (unpack sequence too short, wrong
error)
>>> a, b, c = BadSeq()
Traceback (most recent call last):
...
BozoError
"""
__test__
=
{
'doctests'
:
doctests
}
def
test_main
(
verbose
=
False
):
import
sys
from
test
import
test_support
from
test
import
test_unpack
test_support
.
run_doctest
(
test_unpack
,
verbose
)
if
__name__
==
"__main__"
:
test_main
(
verbose
=
True
)
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