Issue 7832: renaming unittest.TestCase.assertSameElements to assertItemsEqual and changing behaviour
diff --git a/Lib/unittest/util.py b/Lib/unittest/util.py
index 9fce625..9ddf879 100644
--- a/Lib/unittest/util.py
+++ b/Lib/unittest/util.py
@@ -48,3 +48,40 @@
unexpected.extend(actual[j:])
break
return missing, unexpected
+
+
+def unorderable_list_difference(expected, actual, ignore_duplicate=False):
+ """Same behavior as sorted_list_difference but
+ for lists of unorderable items (like dicts).
+
+ As it does a linear search per item (remove) it
+ has O(n*n) performance.
+ """
+ missing = []
+ unexpected = []
+ while expected:
+ item = expected.pop()
+ try:
+ actual.remove(item)
+ except ValueError:
+ missing.append(item)
+ if ignore_duplicate:
+ for lst in expected, actual:
+ try:
+ while True:
+ lst.remove(item)
+ except ValueError:
+ pass
+ if ignore_duplicate:
+ while actual:
+ item = actual.pop()
+ unexpected.append(item)
+ try:
+ while True:
+ actual.remove(item)
+ except ValueError:
+ pass
+ return missing, unexpected
+
+ # anything left in actual is unexpected
+ return missing, actual