diff options
author | Raymond Hettinger <python@rcn.com> | 2003-01-16 12:31:36 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2003-01-16 12:31:36 (GMT) |
commit | 4422375c72968173a4a22d1443903d4a0f19f269 (patch) | |
tree | 71241ac11fae79e885d9f3e6e52fb7c7b9bf3b7f /Lib/test/test_bisect.py | |
parent | d230550a6b5fc6bf2b59d18f5a40c921ea75f57d (diff) | |
download | cpython-4422375c72968173a4a22d1443903d4a0f19f269.zip cpython-4422375c72968173a4a22d1443903d4a0f19f269.tar.gz cpython-4422375c72968173a4a22d1443903d4a0f19f269.tar.bz2 |
Added doctest for examples in the library reference.
Added random test from bisect to augment the finite precomputed checks.
Diffstat (limited to 'Lib/test/test_bisect.py')
-rw-r--r-- | Lib/test/test_bisect.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py index 0104abf..1a8b0ee 100644 --- a/Lib/test/test_bisect.py +++ b/Lib/test/test_bisect.py @@ -93,6 +93,23 @@ class TestBisect(unittest.TestCase): for func, list, elt, expected in self.precomputedCases: self.assertEqual(func(list, elt), expected) + def test_random(self, n=20): + from random import randrange + for i in xrange(n): + data = [randrange(0, n, 2) for j in xrange(i)] + data.sort() + elem = randrange(n) + ip = bisect_left(data, elem) + if ip < len(data): + self.failUnless(elem <= data[ip]) + if ip > 0: + self.failUnless(data[ip-1] < elem) + ip = bisect_right(data, elem) + if ip < len(data): + self.failUnless(elem < data[ip]) + if ip > 0: + self.failUnless(data[ip-1] <= elem) + #============================================================================== class TestInsort(unittest.TestCase): @@ -116,6 +133,46 @@ class TestInsort(unittest.TestCase): #============================================================================== +libreftest = """ +Example from the Library Reference: Doc/lib/libbisect.tex + +The bisect() function is generally useful for categorizing numeric data. +This example uses bisect() to look up a letter grade for an exam total +(say) based on a set of ordered numeric breakpoints: 85 and up is an `A', +75..84 is a `B', etc. + + >>> grades = "FEDCBA" + >>> breakpoints = [30, 44, 66, 75, 85] + >>> from bisect import bisect + >>> def grade(total): + ... return grades[bisect(breakpoints, total)] + ... + >>> grade(66) + 'C' + >>> map(grade, [33, 99, 77, 44, 12, 88]) + ['E', 'A', 'B', 'D', 'F', 'A'] + +The bisect module can be used with the Queue module to implement +a priority queue (example courtesy of Fredrik Lundh): + +>>> import Queue, bisect +>>> class PriorityQueue(Queue.Queue): +... def _put(self, item): +... bisect.insort(self.queue, item) +... +>>> queue = PriorityQueue(0) +>>> queue.put((2, "second")) +>>> queue.put((1, "first")) +>>> queue.put((3, "third")) +>>> queue.get() +(1, 'first') +>>> queue.get() +(2, 'second') + +""" + +#============================================================================== + def makeAllTests(): suite = unittest.TestSuite() for klass in (TestBisect, @@ -126,10 +183,13 @@ def makeAllTests(): #------------------------------------------------------------------------------ +__test__ = {'libreftest' : libreftest} + def test_main(verbose=None): from test import test_bisect suite = makeAllTests() test_support.run_suite(suite) + test_support.run_doctest(test_bisect, verbose) if __name__ == "__main__": test_main(verbose=True) |