diff options
-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) |