mirror of
https://github.com/python/cpython.git
synced 2025-09-28 11:15:17 +00:00
Remove 2.6 compatibility code:
now heapqueue items must implement the "<" operator. The compatibility code could not work: all 3.0 objects have a __lt__ method (which returns NotImplemented) Twisted will have to adapt its DelayedCall class.
This commit is contained in:
parent
35c8658a74
commit
2ba198d2fb
2 changed files with 4 additions and 22 deletions
|
@ -198,7 +198,8 @@ class TestHeapC(TestHeap):
|
||||||
module = c_heapq
|
module = c_heapq
|
||||||
|
|
||||||
def test_comparison_operator(self):
|
def test_comparison_operator(self):
|
||||||
# Issue 3501: Make sure heapq works with both __lt__ and __le__
|
# Issue 3501: Make sure heapq works with both __lt__
|
||||||
|
# For python 3.0, __le__ alone is not enough
|
||||||
def hsort(data, comp):
|
def hsort(data, comp):
|
||||||
data = [comp(x) for x in data]
|
data = [comp(x) for x in data]
|
||||||
self.module.heapify(data)
|
self.module.heapify(data)
|
||||||
|
@ -215,9 +216,8 @@ class TestHeapC(TestHeap):
|
||||||
return self.x >= other.x
|
return self.x >= other.x
|
||||||
data = [random.random() for i in range(100)]
|
data = [random.random() for i in range(100)]
|
||||||
target = sorted(data, reverse=True)
|
target = sorted(data, reverse=True)
|
||||||
print("HASATTR", hasattr(LE(0), "__lt__"), LE(0).__lt__)
|
|
||||||
self.assertEqual(hsort(data, LT), target)
|
self.assertEqual(hsort(data, LT), target)
|
||||||
self.assertEqual(hsort(data, LE), target)
|
self.assertRaises(TypeError, data, LE)
|
||||||
|
|
||||||
|
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
|
|
|
@ -8,28 +8,10 @@ annotated by Fran
|
||||||
|
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
|
||||||
/* Older implementations of heapq used Py_LE for comparisons. Now, it uses
|
|
||||||
Py_LT so it will match min(), sorted(), and bisect(). Unfortunately, some
|
|
||||||
client code (Twisted for example) relied on Py_LE, so this little function
|
|
||||||
restores compatability by trying both.
|
|
||||||
*/
|
|
||||||
static int
|
static int
|
||||||
cmp_lt(PyObject *x, PyObject *y)
|
cmp_lt(PyObject *x, PyObject *y)
|
||||||
{
|
{
|
||||||
int cmp;
|
return PyObject_RichCompareBool(x, y, Py_LT);
|
||||||
static PyObject *lt = NULL;
|
|
||||||
|
|
||||||
if (lt == NULL) {
|
|
||||||
lt = PyUnicode_FromString("__lt__");
|
|
||||||
if (lt == NULL)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (PyObject_HasAttr(x, lt))
|
|
||||||
return PyObject_RichCompareBool(x, y, Py_LT);
|
|
||||||
cmp = PyObject_RichCompareBool(y, x, Py_LE);
|
|
||||||
if (cmp != -1)
|
|
||||||
cmp = 1 - cmp;
|
|
||||||
return cmp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue