[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