diff options
Diffstat (limited to 'Lib/test/test_bisect.py')
-rw-r--r-- | Lib/test/test_bisect.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py new file mode 100644 index 0000000..1292915 --- /dev/null +++ b/Lib/test/test_bisect.py @@ -0,0 +1,127 @@ +from 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) |