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
