mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			45 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | """Various utility functions.""" | ||
|  | 
 | ||
|  | def strclass(cls): | ||
|  |     return "%s.%s" % (cls.__module__, cls.__name__) | ||
|  | 
 | ||
|  | def sorted_list_difference(expected, actual): | ||
|  |     """Finds elements in only one or the other of two, sorted input lists.
 | ||
|  | 
 | ||
|  |     Returns a two-element tuple of lists.    The first list contains those | ||
|  |     elements in the "expected" list but not in the "actual" list, and the | ||
|  |     second contains those elements in the "actual" list but not in the | ||
|  |     "expected" list.    Duplicate elements in either input list are ignored. | ||
|  |     """
 | ||
|  |     i = j = 0 | ||
|  |     missing = [] | ||
|  |     unexpected = [] | ||
|  |     while True: | ||
|  |         try: | ||
|  |             e = expected[i] | ||
|  |             a = actual[j] | ||
|  |             if e < a: | ||
|  |                 missing.append(e) | ||
|  |                 i += 1 | ||
|  |                 while expected[i] == e: | ||
|  |                     i += 1 | ||
|  |             elif e > a: | ||
|  |                 unexpected.append(a) | ||
|  |                 j += 1 | ||
|  |                 while actual[j] == a: | ||
|  |                     j += 1 | ||
|  |             else: | ||
|  |                 i += 1 | ||
|  |                 try: | ||
|  |                     while expected[i] == e: | ||
|  |                         i += 1 | ||
|  |                 finally: | ||
|  |                     j += 1 | ||
|  |                     while actual[j] == a: | ||
|  |                         j += 1 | ||
|  |         except IndexError: | ||
|  |             missing.extend(expected[i:]) | ||
|  |             unexpected.extend(actual[j:]) | ||
|  |             break | ||
|  |     return missing, unexpected |