mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #26015: Added new tests for pickling iterators of mutable sequences.
This commit is contained in:
		
						commit
						de128e19e2
					
				
					 6 changed files with 212 additions and 46 deletions
				
			
		|  | @ -640,18 +640,45 @@ def test_pickle_recursive(self): | |||
|                 self.assertEqual(e.maxlen, d.maxlen) | ||||
| 
 | ||||
|     def test_iterator_pickle(self): | ||||
|         data = deque(range(200)) | ||||
|         orig = deque(range(200)) | ||||
|         data = [i*1.01 for i in orig] | ||||
|         for proto in range(pickle.HIGHEST_PROTOCOL + 1): | ||||
|             it = itorg = iter(data) | ||||
|             d = pickle.dumps(it, proto) | ||||
|             it = pickle.loads(d) | ||||
|             self.assertEqual(type(itorg), type(it)) | ||||
|             self.assertEqual(list(it), list(data)) | ||||
|             # initial iterator | ||||
|             itorg = iter(orig) | ||||
|             dump = pickle.dumps((itorg, orig), proto) | ||||
|             it, d = pickle.loads(dump) | ||||
|             for i, x in enumerate(data): | ||||
|                 d[i] = x | ||||
|             self.assertEqual(type(it), type(itorg)) | ||||
|             self.assertEqual(list(it), data) | ||||
| 
 | ||||
|             it = pickle.loads(d) | ||||
|             next(it) | ||||
|             d = pickle.dumps(it, proto) | ||||
|             self.assertEqual(list(it), list(data)[1:]) | ||||
|             # running iterator | ||||
|             next(itorg) | ||||
|             dump = pickle.dumps((itorg, orig), proto) | ||||
|             it, d = pickle.loads(dump) | ||||
|             for i, x in enumerate(data): | ||||
|                 d[i] = x | ||||
|             self.assertEqual(type(it), type(itorg)) | ||||
|             self.assertEqual(list(it), data[1:]) | ||||
| 
 | ||||
|             # empty iterator | ||||
|             for i in range(1, len(data)): | ||||
|                 next(itorg) | ||||
|             dump = pickle.dumps((itorg, orig), proto) | ||||
|             it, d = pickle.loads(dump) | ||||
|             for i, x in enumerate(data): | ||||
|                 d[i] = x | ||||
|             self.assertEqual(type(it), type(itorg)) | ||||
|             self.assertEqual(list(it), []) | ||||
| 
 | ||||
|             # exhausted iterator | ||||
|             self.assertRaises(StopIteration, next, itorg) | ||||
|             dump = pickle.dumps((itorg, orig), proto) | ||||
|             it, d = pickle.loads(dump) | ||||
|             for i, x in enumerate(data): | ||||
|                 d[i] = x | ||||
|             self.assertEqual(type(it), type(itorg)) | ||||
|             self.assertEqual(list(it), []) | ||||
| 
 | ||||
|     def test_deepcopy(self): | ||||
|         mut = [10] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka