mirror of
				https://github.com/pocketpy/pocketpy
				synced 2025-10-26 22:40:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| try:
 | |
|     a = [1, 2, 3]
 | |
|     a.index(999)
 | |
|     exit(1)
 | |
| except ValueError:
 | |
|     pass
 | |
| 
 | |
| # test some python magics
 | |
| class TestMagics:
 | |
|     def __init__(self):
 | |
|         self.d = {}
 | |
| 
 | |
|     def __getitem__(self, index):
 | |
|         return self.d[index]
 | |
|     
 | |
|     def __setitem__(self, index, value):
 | |
|         self.d[index] = value
 | |
| 
 | |
|     def __contains__(self, index):
 | |
|         return index in self.d
 | |
|     
 | |
|     def __delitem__(self, index):
 | |
|         del self.d[index]
 | |
| 
 | |
| a = TestMagics()
 | |
| a['1'] = 3
 | |
| assert '1' in a
 | |
| assert '2' not in a
 | |
| assert a['1'] == 3
 | |
| del a['1']
 | |
| assert '1' not in a
 | |
| 
 | |
| # slice extras
 | |
| class A:
 | |
|     def __getitem__(self, index):
 | |
|         return index
 | |
| 
 | |
| assert slice(1, 2, None) == slice(1, 2, None)
 | |
| assert slice(1, 3, None) != slice(1, 2, None)
 | |
| 
 | |
| assert A()[1] == 1
 | |
| assert A()[1:2, 3] == (slice(1, 2, None), 3)
 | |
| assert A()[1:2, 3:4] == (slice(1, 2, None), slice(3, 4, None))
 | |
| assert A()[1:2, 3:4, 5] == (slice(1, 2, None), slice(3, 4, None), 5)
 | |
| assert A()[:, :] == (slice(None, None, None), slice(None, None, None))
 | |
| assert A()[::, :] == (slice(None, None, None), slice(None, None, None))
 | |
| assert A()[::, :2] == (slice(None, None, None), slice(None, 2, None))
 | |
| assert A()['b':'c':1, :] == (slice('b', 'c', 1), slice(None, None, None))
 | |
| assert A()[1:2, :A()[3:4, ::-1]] == (slice(1, 2, None), slice(None, (slice(3, 4, None), slice(None, None, -1)), None))
 | |
| 
 | |
| # test right associative
 | |
| assert 2**2**3 == 256
 | |
| assert (2**2**3)**2 == 65536
 | |
| 
 | |
| class Number:
 | |
|     def __float__(self):
 | |
|         return 1.0
 | |
|     
 | |
|     def __int__(self):
 | |
|         return 2
 | |
|     
 | |
|     def __divmod__(self, other):
 | |
|         return 3, 4
 | |
|     
 | |
|     def __round__(self, *args):
 | |
|         return args
 | |
| 
 | |
| assert divmod(Number(), 0) == (3, 4)
 | |
| assert float(Number()) == 1.0
 | |
| assert int(Number()) == 2
 | |
| 
 | |
| assert round(Number()) == tuple()
 | |
| assert round(Number(), 1) == (1,)
 | |
| 
 | |
| class Z:
 | |
|     def __new__(cls, x):
 | |
|         return cls, x
 | |
| 
 | |
| class B(Z):
 | |
|     def __new__(cls, x):
 | |
|         return super().__new__(cls, x)
 | |
| 
 | |
| assert Z(1) == (Z, 1)
 | |
| assert B(1) == (B, 1)
 | |
| 
 | |
| from pkpy import TValue
 | |
| 
 | |
| class fixed(TValue[int]):
 | |
|     def __new__(cls, value: str):
 | |
|         return super().__new__(cls, int(value))
 | |
|     
 | |
| assert fixed('123').value == 123
 |