1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
from test_support import *
print_test("Sequence Unpacking (test_unpack.py)", 2)
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
print_test("tuple", 3)
a, b, c = t
assert a == 1 and b == 2 and c == 3
print_test("list", 3)
a, b, c = l
assert a == 4 and b == 5 and c == 6
print_test("inline tuple")
a, b, c = 7, 8, 9
assert a == 7 and b == 8 and c == 9
print_test("string")
a, b, c = 'one'
assert a == 'o' and b == 'n' and c == 'e'
print_test("generic sequence")
a, b, c = Seq()
assert a == 0 and b == 1 and c == 2
# now for some failures
print_test("failures")
print_test("non-sequence", 4)
try:
a, b, c = 7
raise TestFailed
except TypeError:
pass
print_test("wrong size tuple")
try:
a, b = t
raise TestFailed
except ValueError:
pass
print_test("wrong size list")
try:
a, b = l
raise TestFailed
except ValueError:
pass
print_test("sequence too short")
try:
a, b, c, d = Seq()
raise TestFailed
except ValueError:
pass
print_test("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
BozoError = 'BozoError'
class BadSeq:
def __getitem__(self, i):
if i >= 0 and i < 3:
return i
elif i == 3:
raise BozoError
else:
raise IndexError
print_test("sequence too long, wrong error")
try:
a, b, c, d, e = BadSeq()
raise TestFailed
except BozoError:
pass
print_test("sequence too short, wrong error")
try:
a, b, c = BadSeq()
raise TestFailed
except BozoError:
pass
|