Skip to content

Commit 7d44e7a

Browse files
bpo-37685: Use singletons ALWAYS_EQ and NEVER_EQ in more tests. (GH-15167)
1 parent 662db12 commit 7d44e7a

9 files changed

+30
-57
lines changed

Lib/test/support/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -3123,6 +3123,8 @@ def __eq__(self, other):
31233123
return False
31243124
def __ne__(self, other):
31253125
return True
3126+
def __hash__(self):
3127+
return 1
31263128

31273129
NEVER_EQ = _NEVER_EQ()
31283130

Lib/test/test_collections.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -1472,9 +1472,6 @@ def __lt__(self, x):
14721472

14731473
def test_issue26915(self):
14741474
# Container membership test should check identity first
1475-
class CustomEqualObject:
1476-
def __eq__(self, other):
1477-
return False
14781475
class CustomSequence(Sequence):
14791476
def __init__(self, seq):
14801477
self._seq = seq
@@ -1484,7 +1481,7 @@ def __len__(self):
14841481
return len(self._seq)
14851482

14861483
nan = float('nan')
1487-
obj = CustomEqualObject()
1484+
obj = support.NEVER_EQ
14881485
seq = CustomSequence([nan, obj, nan])
14891486
containers = [
14901487
seq,

Lib/test/test_compare.py

+5-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import unittest
2+
from test.support import ALWAYS_EQ
23

34
class Empty:
45
def __repr__(self):
@@ -14,13 +15,6 @@ def __repr__(self):
1415
def __eq__(self, other):
1516
return self.arg == other
1617

17-
class Anything:
18-
def __eq__(self, other):
19-
return True
20-
21-
def __ne__(self, other):
22-
return False
23-
2418
class ComparisonTest(unittest.TestCase):
2519
set1 = [2, 2.0, 2, 2+0j, Cmp(2.0)]
2620
set2 = [[1], (3,), None, Empty()]
@@ -113,11 +107,11 @@ class C:
113107

114108
def test_issue_1393(self):
115109
x = lambda: None
116-
self.assertEqual(x, Anything())
117-
self.assertEqual(Anything(), x)
110+
self.assertEqual(x, ALWAYS_EQ)
111+
self.assertEqual(ALWAYS_EQ, x)
118112
y = object()
119-
self.assertEqual(y, Anything())
120-
self.assertEqual(Anything(), y)
113+
self.assertEqual(y, ALWAYS_EQ)
114+
self.assertEqual(ALWAYS_EQ, y)
121115

122116

123117
if __name__ == '__main__':

Lib/test/test_contains.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from collections import deque
22
import unittest
3+
from test.support import NEVER_EQ
34

45

56
class base_set:
@@ -69,13 +70,7 @@ def test_nonreflexive(self):
6970
# containment and equality tests involving elements that are
7071
# not necessarily equal to themselves
7172

72-
class MyNonReflexive(object):
73-
def __eq__(self, other):
74-
return False
75-
def __hash__(self):
76-
return 28
77-
78-
values = float('nan'), 1, None, 'abc', MyNonReflexive()
73+
values = float('nan'), 1, None, 'abc', NEVER_EQ
7974
constructors = list, tuple, dict.fromkeys, set, frozenset, deque
8075
for constructor in constructors:
8176
container = constructor(values)

Lib/test/test_dict_version.py

+5
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,25 @@ def __eq__(self, other):
9898
value2 = AlwaysEqual()
9999
self.assertTrue(value1 == value2)
100100
self.assertFalse(value1 != value2)
101+
self.assertIsNot(value1, value2)
101102

102103
d = self.new_dict()
103104
self.check_version_changed(d, d.__setitem__, 'key', value1)
105+
self.assertIs(d['key'], value1)
104106

105107
# setting a key to a value equal to the current value
106108
# with dict.__setitem__() must change the version
107109
self.check_version_changed(d, d.__setitem__, 'key', value2)
110+
self.assertIs(d['key'], value2)
108111

109112
# setting a key to a value equal to the current value
110113
# with dict.update() must change the version
111114
self.check_version_changed(d, d.update, key=value1)
115+
self.assertIs(d['key'], value1)
112116

113117
d2 = self.new_dict(key=value2)
114118
self.check_version_changed(d, d.update, d2)
119+
self.assertIs(d['key'], value2)
115120

116121
def test_setdefault(self):
117122
d = self.new_dict()

Lib/test/test_enum.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from io import StringIO
1010
from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL
1111
from test import support
12+
from test.support import ALWAYS_EQ
1213
from datetime import timedelta
1314

1415

@@ -1509,13 +1510,10 @@ class Color(AutoNumber):
15091510
self.assertEqual(list(map(int, Color)), [1, 2, 3])
15101511

15111512
def test_equality(self):
1512-
class AlwaysEqual:
1513-
def __eq__(self, other):
1514-
return True
15151513
class OrdinaryEnum(Enum):
15161514
a = 1
1517-
self.assertEqual(AlwaysEqual(), OrdinaryEnum.a)
1518-
self.assertEqual(OrdinaryEnum.a, AlwaysEqual())
1515+
self.assertEqual(ALWAYS_EQ, OrdinaryEnum.a)
1516+
self.assertEqual(OrdinaryEnum.a, ALWAYS_EQ)
15191517

15201518
def test_ordered_mixin(self):
15211519
class OrderedEnum(Enum):

Lib/test/test_inspect.py

+7-11
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
ThreadPoolExecutor = None
2626

2727
from test.support import run_unittest, TESTFN, DirsOnSysPath, cpython_only
28-
from test.support import MISSING_C_DOCSTRINGS, cpython_only
28+
from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ
2929
from test.support.script_helper import assert_python_ok, assert_python_failure
3030
from test import inspect_fodder as mod
3131
from test import inspect_fodder2 as mod2
@@ -118,10 +118,6 @@ def gen_coroutine_function_example(self):
118118
yield
119119
return 'spam'
120120

121-
class EqualsToAll:
122-
def __eq__(self, other):
123-
return True
124-
125121
class TestPredicates(IsTestBase):
126122

127123
def test_excluding_predicates(self):
@@ -2978,8 +2974,8 @@ def test_signature_equality(self):
29782974
def foo(a, *, b:int) -> float: pass
29792975
self.assertFalse(inspect.signature(foo) == 42)
29802976
self.assertTrue(inspect.signature(foo) != 42)
2981-
self.assertTrue(inspect.signature(foo) == EqualsToAll())
2982-
self.assertFalse(inspect.signature(foo) != EqualsToAll())
2977+
self.assertTrue(inspect.signature(foo) == ALWAYS_EQ)
2978+
self.assertFalse(inspect.signature(foo) != ALWAYS_EQ)
29832979

29842980
def bar(a, *, b:int) -> float: pass
29852981
self.assertTrue(inspect.signature(foo) == inspect.signature(bar))
@@ -3246,8 +3242,8 @@ def test_signature_parameter_equality(self):
32463242
self.assertFalse(p != p)
32473243
self.assertFalse(p == 42)
32483244
self.assertTrue(p != 42)
3249-
self.assertTrue(p == EqualsToAll())
3250-
self.assertFalse(p != EqualsToAll())
3245+
self.assertTrue(p == ALWAYS_EQ)
3246+
self.assertFalse(p != ALWAYS_EQ)
32513247

32523248
self.assertTrue(p == P('foo', default=42,
32533249
kind=inspect.Parameter.KEYWORD_ONLY))
@@ -3584,8 +3580,8 @@ def foo(a): pass
35843580
ba = inspect.signature(foo).bind(1)
35853581
self.assertTrue(ba == ba)
35863582
self.assertFalse(ba != ba)
3587-
self.assertTrue(ba == EqualsToAll())
3588-
self.assertFalse(ba != EqualsToAll())
3583+
self.assertTrue(ba == ALWAYS_EQ)
3584+
self.assertFalse(ba != ALWAYS_EQ)
35893585

35903586
ba2 = inspect.signature(foo).bind(1)
35913587
self.assertTrue(ba == ba2)

Lib/test/test_range.py

+4-13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import sys
55
import pickle
66
import itertools
7+
from test.support import ALWAYS_EQ
78

89
# pure Python implementations (3 args only), for comparison
910
def pyrange(start, stop, step):
@@ -289,11 +290,7 @@ def __eq__(self, other):
289290
self.assertRaises(ValueError, range(1, 2**100, 2).index, 2**87)
290291
self.assertEqual(range(1, 2**100, 2).index(2**87+1), 2**86)
291292

292-
class AlwaysEqual(object):
293-
def __eq__(self, other):
294-
return True
295-
always_equal = AlwaysEqual()
296-
self.assertEqual(range(10).index(always_equal), 0)
293+
self.assertEqual(range(10).index(ALWAYS_EQ), 0)
297294

298295
def test_user_index_method(self):
299296
bignum = 2*sys.maxsize
@@ -344,11 +341,7 @@ def test_count(self):
344341
self.assertEqual(range(1, 2**100, 2).count(2**87), 0)
345342
self.assertEqual(range(1, 2**100, 2).count(2**87+1), 1)
346343

347-
class AlwaysEqual(object):
348-
def __eq__(self, other):
349-
return True
350-
always_equal = AlwaysEqual()
351-
self.assertEqual(range(10).count(always_equal), 10)
344+
self.assertEqual(range(10).count(ALWAYS_EQ), 10)
352345

353346
self.assertEqual(len(range(sys.maxsize, sys.maxsize+10)), 10)
354347

@@ -429,9 +422,7 @@ def test_types(self):
429422
self.assertIn(True, range(3))
430423
self.assertIn(1+0j, range(3))
431424

432-
class C1:
433-
def __eq__(self, other): return True
434-
self.assertIn(C1(), range(3))
425+
self.assertIn(ALWAYS_EQ, range(3))
435426

436427
# Objects are never coerced into other types for comparison.
437428
class C2:

Lib/test/test_urllib2.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -634,17 +634,12 @@ def test_http_error(self):
634634
[("http_error_302")],
635635
]
636636
handlers = add_ordered_mock_handlers(o, meth_spec)
637-
638-
class Unknown:
639-
def __eq__(self, other):
640-
return True
641-
642637
req = Request("http://example.com/")
643638
o.open(req)
644639
assert len(o.calls) == 2
645640
calls = [(handlers[0], "http_open", (req,)),
646641
(handlers[2], "http_error_302",
647-
(req, Unknown(), 302, "", {}))]
642+
(req, support.ALWAYS_EQ, 302, "", {}))]
648643
for expected, got in zip(calls, o.calls):
649644
handler, method_name, args = expected
650645
self.assertEqual((handler, method_name), got[:2])

0 commit comments

Comments
 (0)