Commit 8269a44d authored by Ezio Melotti's avatar Ezio Melotti

#11910: Fix test_heapq to skip the C tests when _heapq is missing.

parent 199e0857
"""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
...@@ -211,12 +222,6 @@ class TestHeapC(TestHeap): ...@@ -211,12 +222,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__'))
#============================================================================== #==============================================================================
...@@ -313,7 +318,9 @@ def L(seqn): ...@@ -313,7 +318,9 @@ 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):
@skipUnless(c_heapq, 'requires _heapq')
class TestErrorHandling(TestCase):
# only for C implementation # only for C implementation
module = c_heapq module = c_heapq
...@@ -372,7 +379,7 @@ class TestErrorHandling(unittest.TestCase): ...@@ -372,7 +379,7 @@ class TestErrorHandling(unittest.TestCase):
def test_main(verbose=None): def test_main(verbose=None):
from types import BuiltinFunctionType from types import BuiltinFunctionType
test_classes = [TestHeapPython, TestHeapC, TestErrorHandling] test_classes = [TestModules, TestHeapPython, TestHeapC, TestErrorHandling]
support.run_unittest(*test_classes) support.run_unittest(*test_classes)
# verify reference counting # verify reference counting
......
...@@ -353,6 +353,8 @@ Build ...@@ -353,6 +353,8 @@ Build
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 #11719: Fix message about unexpected test_msilib skip on non-Windows - Issue #11719: Fix message about unexpected test_msilib skip on non-Windows
......
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