Kaydet (Commit) 4422375c authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Added doctest for examples in the library reference.

Added random test from bisect to augment the finite precomputed checks.
üst d230550a
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment