mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			131 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 | 
