Commit 8a9c4d98 authored by Raymond Hettinger's avatar Raymond Hettinger

Issue 3051: make pure python code pass the same tests as the C version.

parent 5864c9f2
...@@ -212,11 +212,10 @@ def nsmallest(n, iterable): ...@@ -212,11 +212,10 @@ def nsmallest(n, iterable):
pop = result.pop pop = result.pop
los = result[-1] # los --> Largest of the nsmallest los = result[-1] # los --> Largest of the nsmallest
for elem in it: for elem in it:
if los <= elem: if elem < los:
continue insort(result, elem)
insort(result, elem) pop()
pop() los = result[-1]
los = result[-1]
return result return result
# An alternative approach manifests the whole iterable in memory but # An alternative approach manifests the whole iterable in memory but
# saves comparisons by heapifying all at once. Also, saves time # saves comparisons by heapifying all at once. Also, saves time
......
...@@ -211,12 +211,6 @@ class TestHeapC(TestHeap): ...@@ -211,12 +211,6 @@ class TestHeapC(TestHeap):
self.assertEqual(hsort(data, LT), target) self.assertEqual(hsort(data, LT), target)
self.assertRaises(TypeError, data, LE) self.assertRaises(TypeError, data, LE)
# As an early adopter, we sanity check the
# test.support.import_fresh_module utility function
def test_accelerated(self):
self.assertTrue(sys.modules['heapq'] is self.module)
self.assertFalse(hasattr(self.module.heapify, '__code__'))
#============================================================================== #==============================================================================
...@@ -319,16 +313,16 @@ class TestErrorHandling(unittest.TestCase): ...@@ -319,16 +313,16 @@ class TestErrorHandling(unittest.TestCase):
def test_non_sequence(self): def test_non_sequence(self):
for f in (self.module.heapify, self.module.heappop): for f in (self.module.heapify, self.module.heappop):
self.assertRaises(TypeError, f, 10) self.assertRaises((TypeError, AttributeError), f, 10)
for f in (self.module.heappush, self.module.heapreplace, for f in (self.module.heappush, self.module.heapreplace,
self.module.nlargest, self.module.nsmallest): self.module.nlargest, self.module.nsmallest):
self.assertRaises(TypeError, f, 10, 10) self.assertRaises((TypeError, AttributeError), f, 10, 10)
def test_len_only(self): def test_len_only(self):
for f in (self.module.heapify, self.module.heappop): for f in (self.module.heapify, self.module.heappop):
self.assertRaises(TypeError, f, LenOnly()) self.assertRaises((TypeError, AttributeError), f, LenOnly())
for f in (self.module.heappush, self.module.heapreplace): for f in (self.module.heappush, self.module.heapreplace):
self.assertRaises(TypeError, f, LenOnly(), 10) self.assertRaises((TypeError, AttributeError), f, LenOnly(), 10)
for f in (self.module.nlargest, self.module.nsmallest): for f in (self.module.nlargest, self.module.nsmallest):
self.assertRaises(TypeError, f, 2, LenOnly()) self.assertRaises(TypeError, f, 2, LenOnly())
...@@ -353,7 +347,7 @@ class TestErrorHandling(unittest.TestCase): ...@@ -353,7 +347,7 @@ class TestErrorHandling(unittest.TestCase):
for f in (self.module.heapify, self.module.heappop, for f in (self.module.heapify, self.module.heappop,
self.module.heappush, self.module.heapreplace, self.module.heappush, self.module.heapreplace,
self.module.nlargest, self.module.nsmallest): self.module.nlargest, self.module.nsmallest):
self.assertRaises(TypeError, f, 10) self.assertRaises((TypeError, AttributeError), f, 10)
def test_iterable_args(self): def test_iterable_args(self):
for f in (self.module.nlargest, self.module.nsmallest): for f in (self.module.nlargest, self.module.nsmallest):
......
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