bpo-36060: Document how collections.ChainMap() determines iteration order (GH-11969) (GH-11978)
(cherry picked from commit 86f093f71a594dcaf21b67ba13dda72863e9bde9)
Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 2099d23..2e7c199 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -114,6 +114,20 @@
self.assertEqual(f['b'], 5) # find first in chain
self.assertEqual(f.parents['b'], 2) # look beyond maps[0]
+ def test_ordering(self):
+ # Combined order matches a series of dict updates from last to first.
+ # This test relies on the ordering of the underlying dicts.
+
+ baseline = {'music': 'bach', 'art': 'rembrandt'}
+ adjustments = {'art': 'van gogh', 'opera': 'carmen'}
+
+ cm = ChainMap(adjustments, baseline)
+
+ combined = baseline.copy()
+ combined.update(adjustments)
+
+ self.assertEqual(list(combined.items()), list(cm.items()))
+
def test_constructor(self):
self.assertEqual(ChainMap().maps, [{}]) # no-args --> one new dict
self.assertEqual(ChainMap({1:2}).maps, [{1:2}]) # 1 arg --> list