[Python-checkins] python/dist/src/Lib/test test_heapq.py,1.8,1.9

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Thu Jun 10 01:07:20 EDT 2004


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19278
Modified Files:
	test_heapq.py 
Log Message:
Convert test_heapq.py to unittests.
Index: test_heapq.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_heapq.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** test_heapq.py	10 Jun 2004 05:03:17 -0000	1.8
--- test_heapq.py	10 Jun 2004 05:07:18 -0000	1.9
***************
*** 1,101 ****
 """Unittests for heapq."""
 
- from test.test_support import verify, vereq, verbose, TestFailed
- 
 from heapq import heappush, heappop, heapify, heapreplace, nlargest, nsmallest
 import random
 
- def check_invariant(heap):
- # Check the heap invariant.
- for pos, item in enumerate(heap):
- if pos: # pos 0 has no parent
- parentpos = (pos-1) >> 1
- verify(heap[parentpos] <= item)
 
! # An iterator returning a heap's elements, smallest-first.
! class heapiter(object):
! def __init__(self, heap):
! self.heap = heap
 
! def next(self):
! try:
! return heappop(self.heap)
! except IndexError:
! raise StopIteration
 
! def __iter__(self):
! return self
 
! def test_main():
! # 1) Push 100 random numbers and pop them off, verifying all's OK.
! heap = []
! data = []
! check_invariant(heap)
! for i in range(256):
! item = random.random()
! data.append(item)
! heappush(heap, item)
! check_invariant(heap)
! results = []
! while heap:
! item = heappop(heap)
! check_invariant(heap)
! results.append(item)
! data_sorted = data[:]
! data_sorted.sort()
! vereq(data_sorted, results)
! # 2) Check that the invariant holds for a sorted array
! check_invariant(results)
! # 3) Naive "N-best" algorithm
! heap = []
! for item in data:
! heappush(heap, item)
! if len(heap) > 10:
! heappop(heap)
! heap.sort()
! vereq(heap, data_sorted[-10:])
! # 4) Test heapify.
! for size in range(30):
! heap = [random.random() for dummy in range(size)]
! heapify(heap)
! check_invariant(heap)
! # 5) Less-naive "N-best" algorithm, much faster (if len(data) is big
! # enough <wink>) than sorting all of data. However, if we had a max
! # heap instead of a min heap, it could go faster still via
! # heapify'ing all of data (linear time), then doing 10 heappops
! # (10 log-time steps).
! heap = data[:10]
! heapify(heap)
! for item in data[10:]:
! if item > heap[0]: # this gets rarer the longer we run
! heapreplace(heap, item)
! vereq(list(heapiter(heap)), data_sorted[-10:])
! # 6) Exercise everything with repeated heapsort checks
! for trial in xrange(100):
! size = random.randrange(50)
! data = [random.randrange(25) for i in range(size)]
! if trial & 1: # Half of the time, use heapify
! heap = data[:]
 heapify(heap)
! else: # The rest of the time, use heappush
! heap = []
! for item in data:
! heappush(heap,item)
! data.sort()
! sorted = [heappop(heap) for i in range(size)]
! vereq(data, sorted)
 
! # 7) Check nlargest() and nsmallest()
! data = [random.randrange(2000) for i in range(1000)]
! copy = data[:]
! copy.sort(reverse=True)
! vereq(nlargest(data, 400), copy[:400])
! copy.sort()
! vereq(nsmallest(data, 400), copy[:400])
 
! # Make user happy
! if verbose:
! print "All OK"
 
 if __name__ == "__main__":
 test_main()
--- 1,105 ----
 """Unittests for heapq."""
 
 from heapq import heappush, heappop, heapify, heapreplace, nlargest, nsmallest
 import random
+ import unittest
+ from test import test_support
 
 
! def heapiter(heap):
! # An iterator returning a heap's elements, smallest-first.
! try:
! while 1:
! yield heappop(heap)
! except IndexError:
! pass
 
! class TestHeap(unittest.TestCase):
 
! def test_push_pop(self):
! # 1) Push 256 random numbers and pop them off, verifying all's OK.
! heap = []
! data = []
! self.check_invariant(heap)
! for i in range(256):
! item = random.random()
! data.append(item)
! heappush(heap, item)
! self.check_invariant(heap)
! results = []
! while heap:
! item = heappop(heap)
! self.check_invariant(heap)
! results.append(item)
! data_sorted = data[:]
! data_sorted.sort()
! self.assertEqual(data_sorted, results)
! # 2) Check that the invariant holds for a sorted array
! self.check_invariant(results)
 
! def check_invariant(self, heap):
! # Check the heap invariant.
! for pos, item in enumerate(heap):
! if pos: # pos 0 has no parent
! parentpos = (pos-1) >> 1
! self.assert_(heap[parentpos] <= item)
! 
! def test_heapify(self):
! for size in range(30):
! heap = [random.random() for dummy in range(size)]
 heapify(heap)
! self.check_invariant(heap)
 
! def test_naive_nbest(self):
! data = [random.randrange(2000) for i in range(1000)]
! heap = []
! for item in data:
! heappush(heap, item)
! if len(heap) > 10:
! heappop(heap)
! heap.sort()
! self.assertEqual(heap, sorted(data)[-10:])
 
! def test_nbest(self):
! # Less-naive "N-best" algorithm, much faster (if len(data) is big
! # enough <wink>) than sorting all of data. However, if we had a max
! # heap instead of a min heap, it could go faster still via
! # heapify'ing all of data (linear time), then doing 10 heappops
! # (10 log-time steps).
! data = [random.randrange(2000) for i in range(1000)]
! heap = data[:10]
! heapify(heap)
! for item in data[10:]:
! if item > heap[0]: # this gets rarer the longer we run
! heapreplace(heap, item)
! self.assertEqual(list(heapiter(heap)), sorted(data)[-10:])
! 
! def test_heapsort(self):
! # Exercise everything with repeated heapsort checks
! for trial in xrange(100):
! size = random.randrange(50)
! data = [random.randrange(25) for i in range(size)]
! if trial & 1: # Half of the time, use heapify
! heap = data[:]
! heapify(heap)
! else: # The rest of the time, use heappush
! heap = []
! for item in data:
! heappush(heap, item)
! heap_sorted = [heappop(heap) for i in range(size)]
! self.assertEqual(heap_sorted, sorted(data))
! 
! def test_nsmallest(self):
! data = [random.randrange(2000) for i in range(1000)]
! self.assertEqual(nsmallest(data, 400), sorted(data)[:400])
! 
! def test_largest(self):
! data = [random.randrange(2000) for i in range(1000)]
! self.assertEqual(nlargest(data, 400), sorted(data, reverse=True)[:400])
! 
! def test_main():
! test_support.run_unittest(TestHeap)
 
 if __name__ == "__main__":
 test_main()
+ 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /