| 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 | 
 | 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 |