from test.test_support import TestFailed import bisect import sys nerrors = 0 def check_bisect(func, list, elt, expected): global nerrors got = func(list, elt) if got != expected: print >> sys.stderr, \ "expected %s(%s, %s) -> %s, but got %s" % (func.__name__, list, elt, expected, got) nerrors += 1 # XXX optional slice arguments need tests. check_bisect(bisect.bisect_right, [], 1, 0) check_bisect(bisect.bisect_right, [1], 0, 0) check_bisect(bisect.bisect_right, [1], 1, 1) check_bisect(bisect.bisect_right, [1], 2, 1) check_bisect(bisect.bisect_right, [1, 1], 0, 0) check_bisect(bisect.bisect_right, [1, 1], 1, 2) check_bisect(bisect.bisect_right, [1, 1], 2, 2) check_bisect(bisect.bisect_right, [1, 1, 1], 0, 0) check_bisect(bisect.bisect_right, [1, 1, 1], 1, 3) check_bisect(bisect.bisect_right, [1, 1, 1], 2, 3) check_bisect(bisect.bisect_right, [1, 1, 1, 1], 0, 0) check_bisect(bisect.bisect_right, [1, 1, 1, 1], 1, 4) check_bisect(bisect.bisect_right, [1, 1, 1, 1], 2, 4) check_bisect(bisect.bisect_right, [1, 2], 0, 0) check_bisect(bisect.bisect_right, [1, 2], 1, 1) check_bisect(bisect.bisect_right, [1, 2], 1.5, 1) check_bisect(bisect.bisect_right, [1, 2], 2, 2) check_bisect(bisect.bisect_right, [1, 2], 3, 2) check_bisect(bisect.bisect_right, [1, 1, 2, 2], 0, 0) check_bisect(bisect.bisect_right, [1, 1, 2, 2], 1, 2) check_bisect(bisect.bisect_right, [1, 1, 2, 2], 1.5, 2) check_bisect(bisect.bisect_right, [1, 1, 2, 2], 2, 4) check_bisect(bisect.bisect_right, [1, 1, 2, 2], 3, 4) check_bisect(bisect.bisect_right, [1, 2, 3], 0, 0) check_bisect(bisect.bisect_right, [1, 2, 3], 1, 1) check_bisect(bisect.bisect_right, [1, 2, 3], 1.5, 1) check_bisect(bisect.bisect_right, [1, 2, 3], 2, 2) check_bisect(bisect.bisect_right, [1, 2, 3], 2.5, 2) check_bisect(bisect.bisect_right, [1, 2, 3], 3, 3) check_bisect(bisect.bisect_right, [1, 2, 3], 4, 3) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 0, 0) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1, 1) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1.5, 1) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2, 3) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2.5, 3) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3, 6) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3.5, 6) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 4, 10) check_bisect(bisect.bisect_right, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 5, 10) check_bisect(bisect.bisect_left, [], 1, 0) check_bisect(bisect.bisect_left, [1], 0, 0) check_bisect(bisect.bisect_left, [1], 1, 0) check_bisect(bisect.bisect_left, [1], 2, 1) check_bisect(bisect.bisect_left, [1, 1], 0, 0) check_bisect(bisect.bisect_left, [1, 1], 1, 0) check_bisect(bisect.bisect_left, [1, 1], 2, 2) check_bisect(bisect.bisect_left, [1, 1, 1], 0, 0) check_bisect(bisect.bisect_left, [1, 1, 1], 1, 0) check_bisect(bisect.bisect_left, [1, 1, 1], 2, 3) check_bisect(bisect.bisect_left, [1, 1, 1, 1], 0, 0) check_bisect(bisect.bisect_left, [1, 1, 1, 1], 1, 0) check_bisect(bisect.bisect_left, [1, 1, 1, 1], 2, 4) check_bisect(bisect.bisect_left, [1, 2], 0, 0) check_bisect(bisect.bisect_left, [1, 2], 1, 0) check_bisect(bisect.bisect_left, [1, 2], 1.5, 1) check_bisect(bisect.bisect_left, [1, 2], 2, 1) check_bisect(bisect.bisect_left, [1, 2], 3, 2) check_bisect(bisect.bisect_left, [1, 1, 2, 2], 0, 0) check_bisect(bisect.bisect_left, [1, 1, 2, 2], 1, 0) check_bisect(bisect.bisect_left, [1, 1, 2, 2], 1.5, 2) check_bisect(bisect.bisect_left, [1, 1, 2, 2], 2, 2) check_bisect(bisect.bisect_left, [1, 1, 2, 2], 3, 4) check_bisect(bisect.bisect_left, [1, 2, 3], 0, 0) check_bisect(bisect.bisect_left, [1, 2, 3], 1, 0) check_bisect(bisect.bisect_left, [1, 2, 3], 1.5, 1) check_bisect(bisect.bisect_left, [1, 2, 3], 2, 1) check_bisect(bisect.bisect_left, [1, 2, 3], 2.5, 2) check_bisect(bisect.bisect_left, [1, 2, 3], 3, 2) check_bisect(bisect.bisect_left, [1, 2, 3], 4, 3) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 0, 0) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1, 0) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 1.5, 1) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2, 1) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 2.5, 3) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3, 3) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 3.5, 6) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 4, 6) check_bisect(bisect.bisect_left, [1, 2, 2, 3, 3, 3, 4, 4, 4, 4], 5, 10) def check_insort(n): global nerrors from random import choice import sys digits = "0123456789" raw = [] insorted = [] for i in range(n): digit = choice(digits) raw.append(digit) if digit in "02468": f = bisect.insort_left else: f = bisect.insort_right f(insorted, digit) sorted = raw[:] sorted.sort() if sorted == insorted: return print >> sys.stderr, "insort test failed: raw %s got %s" % (raw, insorted) nerrors += 1 check_insort(500) if nerrors: raise TestFailed("%d errors in test_bisect" % nerrors)