mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +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
							 |