Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d7a8d0

Browse files
authored
bpo-30190: improved error msg for assertAlmostEqual(delta=...) (#1331)
* #30190 / unittest / assertAlmostEqual(delta=...) / error msg: show the difference between the 2 numbers in case of failure * safe_repr() diff * also show difference when passing 'places' argument * refactoring * update Misc/NEWS
1 parent 1374dbb commit 5d7a8d0

3 files changed

Lines changed: 31 additions & 18 deletions

File tree

Lib/unittest/case.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -856,23 +856,28 @@ def assertAlmostEqual(self, first, second, places=None, msg=None,
856856
if delta is not None and places is not None:
857857
raise TypeError("specify delta or places not both")
858858

859+
diff = abs(first - second)
859860
if delta is not None:
860-
if abs(first - second) <= delta:
861+
if diff <= delta:
861862
return
862863

863-
standardMsg = '%s != %s within %s delta' % (safe_repr(first),
864-
safe_repr(second),
865-
safe_repr(delta))
864+
standardMsg = '%s != %s within %s delta (%s difference)' % (
865+
safe_repr(first),
866+
safe_repr(second),
867+
safe_repr(delta),
868+
safe_repr(diff))
866869
else:
867870
if places is None:
868871
places = 7
869872

870-
if round(abs(second-first), places) == 0:
873+
if round(diff, places) == 0:
871874
return
872875

873-
standardMsg = '%s != %s within %r places' % (safe_repr(first),
874-
safe_repr(second),
875-
places)
876+
standardMsg = '%s != %s within %r places (%s difference)' % (
877+
safe_repr(first),
878+
safe_repr(second),
879+
places,
880+
safe_repr(diff))
876881
msg = self._formatMessage(msg, standardMsg)
877882
raise self.failureException(msg)
878883

@@ -890,16 +895,19 @@ def assertNotAlmostEqual(self, first, second, places=None, msg=None,
890895
"""
891896
if delta is not None and places is not None:
892897
raise TypeError("specify delta or places not both")
898+
diff = abs(first - second)
893899
if delta is not None:
894-
if not (first == second) and abs(first - second) > delta:
900+
if not (first == second) and diff > delta:
895901
return
896-
standardMsg = '%s == %s within %s delta' % (safe_repr(first),
897-
safe_repr(second),
898-
safe_repr(delta))
902+
standardMsg = '%s == %s within %s delta (%s difference)' % (
903+
safe_repr(first),
904+
safe_repr(second),
905+
safe_repr(delta),
906+
safe_repr(diff))
899907
else:
900908
if places is None:
901909
places = 7
902-
if not (first == second) and round(abs(second-first), places) != 0:
910+
if not (first == second) and round(diff, places) != 0:
903911
return
904912
standardMsg = '%s == %s within %r places' % (safe_repr(first),
905913
safe_repr(second),
@@ -908,7 +916,6 @@ def assertNotAlmostEqual(self, first, second, places=None, msg=None,
908916
msg = self._formatMessage(msg, standardMsg)
909917
raise self.failureException(msg)
910918

911-
912919
def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
913920
"""An equality assertion for ordered sequences (like lists and tuples).
914921

Lib/unittest/test/test_assertions.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,11 @@ def testNotEqual(self):
223223
"^1 == 1 : oops$"])
224224

225225
def testAlmostEqual(self):
226-
self.assertMessages('assertAlmostEqual', (1, 2),
227-
["^1 != 2 within 7 places$", "^oops$",
228-
"^1 != 2 within 7 places$", "^1 != 2 within 7 places : oops$"])
226+
self.assertMessages(
227+
'assertAlmostEqual', (1, 2),
228+
["^1 != 2 within 7 places \(1 difference\)$", "^oops$",
229+
"^1 != 2 within 7 places \(1 difference\)$",
230+
"^1 != 2 within 7 places \(1 difference\) : oops$"])
229231

230232
def testNotAlmostEqual(self):
231233
self.assertMessages('assertNotAlmostEqual', (1, 1),

Misc/NEWS

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ What's New in Python 3.7.0 alpha 1?
1010
Core and Builtins
1111
-----------------
1212

13-
- bpo-12414: sys.getsizeof() on a code object now returns the sizes
13+
- bpo-12414: sys.getsizeof() on a code object now returns the sizes
1414
which includes the code struct and sizes of objects which it references.
1515
Patch by Dong-hee Na.
1616

@@ -317,6 +317,10 @@ Extension Modules
317317
Library
318318
-------
319319

320+
- bpo-30190: unittest's assertAlmostEqual and assertNotAlmostEqual provide a
321+
better message in case of failure which includes the difference between
322+
left and right arguments. (patch by Giampaolo Rodola')
323+
320324
- bpo-30101: Add support for curses.A_ITALIC.
321325

322326
- bpo-29822: inspect.isabstract() now works during __init_subclass__. Patch

0 commit comments

Comments
 (0)