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

# 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
