from test_support import *

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

# 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
BozoError = 'BozoError'

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
