Skip to content

Commit 9d668da

Browse files
committed
Put diff output in useful order (when the elements were first seen).
1 parent f954217 commit 9d668da

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

Lib/unittest/case.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,18 +1023,15 @@ def assertCountEqual(self, actual, expected, msg=None):
10231023
expected = collections.Counter(expected_seq)
10241024
except TypeError:
10251025
# Handle case with unhashable elements
1026-
differences = _count_diff_all_purpose(expected_seq, actual_seq)
1026+
differences = _count_diff_all_purpose(actual_seq, expected_seq)
10271027
else:
10281028
if actual == expected:
10291029
return
1030-
differences = _count_diff_hashable(expected_seq, actual_seq)
1030+
differences = _count_diff_hashable(actual_seq, expected_seq)
10311031

10321032
if differences:
10331033
standardMsg = 'Element counts were not equal:\n'
1034-
lines = []
1035-
for act, exp, elem in differences:
1036-
line = 'Expected %d, got %d: %r' % (exp, act, elem)
1037-
lines.append(line)
1034+
lines = ['Got %d, expected %d: %r' % diff for diff in differences]
10381035
diffMsg = '\n'.join(lines)
10391036
standardMsg = self._truncateMessage(standardMsg, diffMsg)
10401037
msg = self._formatMessage(msg, standardMsg)

Lib/unittest/util.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Various utility functions."""
22

3-
from collections import namedtuple, Counter
3+
from collections import namedtuple, OrderedDict
44

55
__unittest = True
66

@@ -116,15 +116,20 @@ def _count_diff_all_purpose(actual, expected):
116116
result.append(diff)
117117
return result
118118

119+
def ordered_count(iterable):
120+
'Return dict of element counts, in the order they were first seen'
121+
c = OrderedDict()
122+
for elem in iterable:
123+
c[elem] = c.get(elem, 0) + 1
124+
return c
125+
119126
def _count_diff_hashable(actual, expected):
120127
'Returns list of (cnt_act, cnt_exp, elem) triples where the counts differ'
121128
# elements must be hashable
122-
s, t = Counter(actual), Counter(expected)
123-
if s == t:
124-
return []
129+
s, t = ordered_count(actual), ordered_count(expected)
125130
result = []
126131
for elem, cnt_s in s.items():
127-
cnt_t = t[elem]
132+
cnt_t = t.get(elem, 0)
128133
if cnt_s != cnt_t:
129134
diff = _Mismatch(cnt_s, cnt_t, elem)
130135
result.append(diff)

0 commit comments

Comments
 (0)