This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author mattheww
Recipients mattheww, michael.foord
Date 2010-09-28.20:15:18
SpamBayes Score 0.00038705688
Marked as misclassified No
Message-id <1285704922.32.0.659854668668.issue9977@psf.upfronthosting.co.za>
In-reply-to
Content
TestCase.assertItemsEqual uses two different techniques to describe the
differences in the inputs that it compares.

If the inputs are sortable, it sorts them and then uses
assertSequenceEqual to describe the difference between them considered
as ordered sequences.

Otherwise, it uses unittest.util.unorderable_list_difference, which
is essentially a multiset comparison.

In practice, I think the output from unorderable_list_difference is
usually more readable, so I wonder if something of that kind should be
made the default.


Example:

a = [('b', (2, 3)), ('w', (3, 4))]
b = [('x', (2, 3)), ('w', (3, 4))]
case.assertItemsEqual(a, b)


unorderable_list_difference gives

Expected, but missing:
    [('b', (2, 3))]
Unexpected, but present:
    [('x', (2, 3))]


while the current assertItemsEqual gives

Sequences differ: [('b', (2, 3)), ('w', (3, 4))] != [('w', (3, 4)), ('x', (2, 3))]

First differing element 0:
('b', (2, 3))
('w', (3, 4))

- [('b', (2, 3)), ('w', (3, 4))]
+ [('w', (3, 4)), ('x', (2, 3))]


In general, I think that the 'first differing element' paragraph that
assertSequenceEqual produces is as likely to be misleading as it is to
be helpful (when we're really comparing unordered sequences).
History
Date User Action Args
2010-09-28 20:15:22matthewwsetrecipients: + mattheww, michael.foord
2010-09-28 20:15:22matthewwsetmessageid: <1285704922.32.0.659854668668.issue9977@psf.upfronthosting.co.za>
2010-09-28 20:15:18matthewwlinkissue9977 messages
2010-09-28 20:15:18matthewwcreate