Staging
v0.5.1
https://github.com/python/cpython
Revision ff2d7a7f093675f74600167ae7983f9b0d99b86e authored by R. David Murray on 07 January 2010, 03:09:08 UTC, committed by R. David Murray on 07 January 2010, 03:09:08 UTC
1 parent 705a358
Raw File
Tip revision: ff2d7a7f093675f74600167ae7983f9b0d99b86e authored by R. David Murray on 07 January 2010, 03:09:08 UTC
Add -W to the 'basics', 'opt', and 'all' test runs so that we get verbose
Tip revision: ff2d7a7
util.py
"""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
back to top