Commit 19f7ca25 authored by Ezio Melotti's avatar Ezio Melotti

#11910: merge with 3.1.

parents fd69abb3 8269a44d
"""Unittests for heapq.""" """Unittests for heapq."""
import sys
import random import random
import unittest
from test import support from test import support
import sys from unittest import TestCase, skipUnless
# We do a bit of trickery here to be able to test both the C implementation
# and the Python implementation of the module.
import heapq as c_heapq
py_heapq = support.import_fresh_module('heapq', blocked=['_heapq']) py_heapq = support.import_fresh_module('heapq', blocked=['_heapq'])
c_heapq = support.import_fresh_module('heapq', fresh=['_heapq'])
# _heapq.nlargest/nsmallest are saved in heapq._nlargest/_smallest when
# _heapq is imported, so check them there
func_names = ['heapify', 'heappop', 'heappush', 'heappushpop',
'heapreplace', '_nlargest', '_nsmallest']
class TestModules(TestCase):
def test_py_functions(self):
for fname in func_names:
self.assertEqual(getattr(py_heapq, fname).__module__, 'heapq')
@skipUnless(c_heapq, 'requires _heapq')
def test_c_functions(self):
for fname in func_names:
self.assertEqual(getattr(c_heapq, fname).__module__, '_heapq')
class TestHeap(unittest.TestCase):
class TestHeap(TestCase):
module = None module = None
def test_push_pop(self): def test_push_pop(self):
...@@ -176,16 +191,12 @@ class TestHeap(unittest.TestCase): ...@@ -176,16 +191,12 @@ class TestHeap(unittest.TestCase):
self.assertEqual(list(self.module.nlargest(n, data, key=f)), self.assertEqual(list(self.module.nlargest(n, data, key=f)),
sorted(data, key=f, reverse=True)[:n]) sorted(data, key=f, reverse=True)[:n])
class TestHeapPython(TestHeap): class TestHeapPython(TestHeap):
module = py_heapq module = py_heapq
# As an early adopter, we sanity check the
# test.support.import_fresh_module utility function
def test_pure_python(self):
self.assertFalse(sys.modules['heapq'] is self.module)
self.assertTrue(hasattr(self.module.heapify, '__code__'))
@skipUnless(c_heapq, 'requires _heapq')
class TestHeapC(TestHeap): class TestHeapC(TestHeap):
module = c_heapq module = c_heapq
...@@ -307,7 +318,8 @@ def L(seqn): ...@@ -307,7 +318,8 @@ def L(seqn):
'Test multiple tiers of iterators' 'Test multiple tiers of iterators'
return chain(map(lambda x:x, R(Ig(G(seqn))))) return chain(map(lambda x:x, R(Ig(G(seqn)))))
class TestErrorHandling(unittest.TestCase):
class TestErrorHandling(TestCase):
module = None module = None
def test_non_sequence(self): def test_non_sequence(self):
...@@ -358,9 +370,11 @@ class TestErrorHandling(unittest.TestCase): ...@@ -358,9 +370,11 @@ class TestErrorHandling(unittest.TestCase):
self.assertRaises(TypeError, f, 2, N(s)) self.assertRaises(TypeError, f, 2, N(s))
self.assertRaises(ZeroDivisionError, f, 2, E(s)) self.assertRaises(ZeroDivisionError, f, 2, E(s))
class TestErrorHandlingPython(TestErrorHandling): class TestErrorHandlingPython(TestErrorHandling):
module = py_heapq module = py_heapq
@skipUnless(c_heapq, 'requires _heapq')
class TestErrorHandlingC(TestErrorHandling): class TestErrorHandlingC(TestErrorHandling):
module = c_heapq module = c_heapq
...@@ -369,8 +383,8 @@ class TestErrorHandlingC(TestErrorHandling): ...@@ -369,8 +383,8 @@ class TestErrorHandlingC(TestErrorHandling):
def test_main(verbose=None): def test_main(verbose=None):
test_classes = [TestHeapPython, TestHeapC, TestErrorHandlingPython, test_classes = [TestModules, TestHeapPython, TestHeapC,
TestErrorHandlingC] TestErrorHandlingPython, TestErrorHandlingC]
support.run_unittest(*test_classes) support.run_unittest(*test_classes)
# verify reference counting # verify reference counting
......
...@@ -826,6 +826,8 @@ Tools/Demos ...@@ -826,6 +826,8 @@ Tools/Demos
Tests Tests
----- -----
- Issue #11910: Fix test_heapq to skip the C tests when _heapq is missing.
- Fix test_startfile to wait for child process to terminate before finishing. - Fix test_startfile to wait for child process to terminate before finishing.
- Issue #10822: Fix test_posix:test_getgroups failure under Solaris. Patch - Issue #10822: Fix test_posix:test_getgroups failure under Solaris. Patch
......
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