Skip to content

Commit 208d8e1

Browse files
authored
Fix assertAlmostEqual regression on mixed numeric types (#8137)
1 parent 7c3b13b commit 208d8e1

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

Diff for: stdlib/_typeshed/__init__.pyi

+3
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ class SupportsRAdd(Protocol[_T_contra, _T_co]):
8080
class SupportsSub(Protocol[_T_contra, _T_co]):
8181
def __sub__(self, __x: _T_contra) -> _T_co: ...
8282

83+
class SupportsRSub(Protocol[_T_contra, _T_co]):
84+
def __rsub__(self, __x: _T_contra) -> _T_co: ...
85+
8386
class SupportsDivMod(Protocol[_T_contra, _T_co]):
8487
def __divmod__(self, __other: _T_contra) -> _T_co: ...
8588

Diff for: stdlib/unittest/case.pyi

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22
import sys
33
import unittest.result
4-
from _typeshed import Self, SupportsDunderGE, SupportsDunderGT, SupportsDunderLE, SupportsDunderLT, SupportsSub
4+
from _typeshed import Self, SupportsDunderGE, SupportsDunderGT, SupportsDunderLE, SupportsDunderLT, SupportsRSub, SupportsSub
55
from collections.abc import Callable, Container, Iterable, Mapping, Sequence, Set as AbstractSet
66
from contextlib import AbstractContextManager
77
from types import TracebackType
@@ -217,6 +217,15 @@ class TestCase:
217217
delta: None = ...,
218218
) -> None: ...
219219
@overload
220+
def assertAlmostEqual(
221+
self,
222+
first: _T,
223+
second: SupportsRSub[_T, SupportsAbs[SupportsRound[object]]],
224+
places: int | None = ...,
225+
msg: Any = ...,
226+
delta: None = ...,
227+
) -> None: ...
228+
@overload
220229
def assertNotAlmostEqual(self, first: _S, second: _S, places: None, msg: Any, delta: _SupportsAbsAndDunderGE) -> None: ...
221230
@overload
222231
def assertNotAlmostEqual(
@@ -231,6 +240,15 @@ class TestCase:
231240
msg: Any = ...,
232241
delta: None = ...,
233242
) -> None: ...
243+
@overload
244+
def assertNotAlmostEqual(
245+
self,
246+
first: _T,
247+
second: SupportsRSub[_T, SupportsAbs[SupportsRound[object]]],
248+
places: int | None = ...,
249+
msg: Any = ...,
250+
delta: None = ...,
251+
) -> None: ...
234252
def assertRegex(self, text: AnyStr, expected_regex: AnyStr | Pattern[AnyStr], msg: Any = ...) -> None: ...
235253
def assertNotRegex(self, text: AnyStr, unexpected_regex: AnyStr | Pattern[AnyStr], msg: Any = ...) -> None: ...
236254
def assertCountEqual(self, first: Iterable[Any], second: Iterable[Any], msg: Any = ...) -> None: ...

Diff for: test_cases/stdlib/test_unittest.py

+8
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
# Tests for assertAlmostEqual
1212
###
1313

14+
case.assertAlmostEqual(1, 2.4)
1415
case.assertAlmostEqual(2.4, 2.41)
1516
case.assertAlmostEqual(Fraction(49, 50), Fraction(48, 50))
17+
case.assertAlmostEqual(3.14, complex(5, 6))
1618
case.assertAlmostEqual(datetime(1999, 1, 2), datetime(1999, 1, 2, microsecond=1), delta=timedelta(hours=1))
1719
case.assertAlmostEqual(datetime(1999, 1, 2), datetime(1999, 1, 2, microsecond=1), None, "foo", timedelta(hours=1))
1820
case.assertAlmostEqual(Decimal("1.1"), Decimal("1.11"))
@@ -23,18 +25,24 @@
2325
case.assertAlmostEqual(2.4, 2.41, places=9, delta=0.02) # type: ignore
2426
case.assertAlmostEqual("foo", "bar") # type: ignore
2527
case.assertAlmostEqual(datetime(1999, 1, 2), datetime(1999, 1, 2, microsecond=1)) # type: ignore
28+
case.assertAlmostEqual(Decimal("0.4"), Fraction(1, 2)) # type: ignore
29+
case.assertAlmostEqual(complex(2, 3), Decimal("0.9")) # type: ignore
2630

2731
###
2832
# Tests for assertNotAlmostEqual
2933
###
3034

35+
case.assertAlmostEqual(1, 2.4)
3136
case.assertNotAlmostEqual(Fraction(49, 50), Fraction(48, 50))
37+
case.assertAlmostEqual(3.14, complex(5, 6))
3238
case.assertNotAlmostEqual(datetime(1999, 1, 2), datetime(1999, 1, 2, microsecond=1), delta=timedelta(hours=1))
3339
case.assertNotAlmostEqual(datetime(1999, 1, 2), datetime(1999, 1, 2, microsecond=1), None, "foo", timedelta(hours=1))
3440

3541
case.assertNotAlmostEqual(2.4, 2.41, places=9, delta=0.02) # type: ignore
3642
case.assertNotAlmostEqual("foo", "bar") # type: ignore
3743
case.assertNotAlmostEqual(datetime(1999, 1, 2), datetime(1999, 1, 2, microsecond=1)) # type: ignore
44+
case.assertNotAlmostEqual(Decimal("0.4"), Fraction(1, 2)) # type: ignore
45+
case.assertNotAlmostEqual(complex(2, 3), Decimal("0.9")) # type: ignore
3846

3947
###
4048
# Tests for assertGreater

0 commit comments

Comments
 (0)