Fix buglet. If the input was an iterator, the fallback would occur after

part of the iterator had been consumed.   Also, fix argument names which
did not match the docs and were a bit misleading.
This commit is contained in:
Raymond Hettinger 2010-12-23 21:54:02 +00:00
parent 4a62e89728
commit d65a901aed
1 changed files with 7 additions and 8 deletions

View File

@ -1003,27 +1003,26 @@ class TestCase(object):
self.fail(self._formatMessage(msg, standardMsg)) self.fail(self._formatMessage(msg, standardMsg))
def assertCountEqual(self, actual_seq, expected_seq, msg=None): def assertCountEqual(self, actual, expected, msg=None):
"""An unordered sequence specific comparison. It asserts that """An unordered sequence specific comparison. It asserts that
actual_seq and expected_seq have the same element counts. actual_seq and expected_seq have the same element counts.
Equivalent to:: Equivalent to::
self.assertEqual(Counter(iter(actual_seq)), self.assertEqual(Counter(actual_seq),
Counter(iter(expected_seq))) Counter(expected_seq))
Asserts that each element has the same count in both sequences. Asserts that each element has the same count in both sequences.
Example: Example:
- [0, 1, 1] and [1, 0, 1] compare equal. - [0, 1, 1] and [1, 0, 1] compare equal.
- [0, 0, 1] and [0, 1] compare unequal. - [0, 0, 1] and [0, 1] compare unequal.
""" """
actual_seq, expected_seq = list(actual), list(expected)
try: try:
actual = collections.Counter(iter(actual_seq)) actual = collections.Counter(actual_seq)
expected = collections.Counter(iter(expected_seq)) expected = collections.Counter(expected_seq)
except TypeError: except TypeError:
# Unsortable items (example: set(), complex(), ...) # Unsortable items (example: set(), complex(), ...)
actual = list(actual_seq) missing, unexpected = unorderable_list_difference(expected_seq, actual_seq)
expected = list(expected_seq)
missing, unexpected = unorderable_list_difference(expected, actual)
else: else:
if actual == expected: if actual == expected:
return return