Exemple #1
0
def test_stable_sort():
    def check_stable(indexed):
        for k, g in groupby(indexed, key=lambda x: x[1]):   # group by key
            indexes = list(x[0] for x in g)
            assert sorted(indexes) == indexes

    # for func, desc in stable_sort_funcs:
    for entry in sort_funcs:
        if not entry.get('stable', False):
            continue
        func = entry['func']
        desc = entry.get('name', get_func_name(func))

        def gen_spec_case(size):
            spec_cases = gen_special_sort_case(size)
            for case in ('rand', 'dup', 'dup99'):
                yield spec_cases[case]

        if entry.get('skip_large', False):
            print(desc, 'skipping large testcase.')
            case_size = 500
        else:
            case_size = 5000

        with timed_test(desc, 'stable sort'):
            for arr in chain(gen_sort_case(7), gen_spec_case(case_size)):
                indexed = list(enumerate(arr))      # index, key
                func(indexed, key=lambda x: x[1])   # sort by key
                check_stable(indexed)
Exemple #2
0
def test_nth_small():
    for entry in all_select_funcs:
        func = entry['func']
        desc = entry.get('name', get_func_name(func))
        if entry.get('skip_large', False):
            print(desc, 'skipping large testcase.')
            case_size = 500
        else:
            case_size = 5000

        with timed_test(desc):
            for seq in chain(gen_sort_case(7), gen_special_sort_case(case_size).values()):
                copy = seq.copy()
                if len(copy) == 0:
                    continue

                sorted_input = sorted(copy)

                if len(copy) > 20:
                    ranger = range(0, len(copy), len(copy) // 10)
                else:
                    ranger = range(len(copy))

                for i in ranger:
                    n = i + 1
                    selected = func(copy.copy(), n)
                    assert selected == sorted_input[i], \
                        '{desc}({copy}, {n}) -> {selected}'.format_map(vars())

    for large_func in (nth_large, nth_large_mm):
        with timed_test(get_func_name(large_func)):
            assert large_func(list(range(100)), 5) == 95
Exemple #3
0
def test_topk():
    for topk in (topk_by_bigheap, topk_by_smallheap):
        with timed_test(get_func_name(topk)):
            for seq in gen_sort_case(7):
                sorted_input = sorted(seq)
                for k in range(len(seq)):
                    copy = seq.copy()
                    kseq = topk(copy, k)
                    assert sorted(kseq) == sorted_input[len(seq) - k:], \
                        'topk({copy}, {k}) -> {kseq}'.format_map(vars())
Exemple #4
0
def test_heap_pop():
    for seq in gen_sort_case(7):
        if len(seq) == 0:
            continue

        heap = seq.copy()
        heap_make(heap)
        heap_pop(heap)
        heap.pop()
        assert heap_verify(heap)
Exemple #5
0
def test_heap_push():
    for seq in gen_sort_case(7):
        if len(seq) == 0:
            continue

        heap = seq.copy()
        heap_make(heap)

        to_push = list(range(heap[0] + 1))
        to_push.extend([(n + 0.5) for n in to_push])
        to_push.append(-1)

        for n in to_push:
            testbed = heap.copy()
            heap_push(testbed, n)
            assert heap_verify(testbed)

    arr = [2, 1, 0]
    heap_push(arr, 3, end=1)
    assert arr == [3, 2, 0]
Exemple #6
0
def test_heap_make():
    for seq in gen_sort_case(7):
        copy = seq.copy()
        heap_make(copy)
        assert heap_verify(copy)
Exemple #7
0
    def perm_test(func, desc, maxlen=7):
        kwargs = getattr(func, 'keywords', {})

        with timed_test(desc, 'permutation'):
            for seq in gen_sort_case(maxlen):
                check_sorted(seq, func=func, **kwargs)