]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40116: dict: Add regression test for iteration order. (GH-31550)
authorInada Naoki <songofacandy@gmail.com>
Thu, 3 Mar 2022 04:06:29 +0000 (13:06 +0900)
committerGitHub <noreply@github.com>
Thu, 3 Mar 2022 04:06:29 +0000 (13:06 +0900)
Lib/test/test_dict.py
Misc/NEWS.d/next/Core and Builtins/2022-02-24-16-34-17.bpo-40116.AeVGG2.rst [new file with mode: 0644]
Misc/NEWS.d/next/Library/2022-02-09-22-40-11.bpo-46643.aBlIx1.rst

index 66f5d56deeaaf8b412639ccad4c64baab5ef6661..e60ae4309cbc18314e3a9426be7399ff75e33687 100644 (file)
@@ -1077,6 +1077,23 @@ class DictTest(unittest.TestCase):
         self.assertEqual(list(a), ['x', 'y'])
         self.assertEqual(list(b), ['x', 'y', 'z'])
 
+    @support.cpython_only
+    def test_splittable_update(self):
+        """dict.update(other) must preserve order in other."""
+        class C:
+            def __init__(self, order):
+                if order:
+                    self.a, self.b, self.c = 1, 2, 3
+                else:
+                    self.c, self.b, self.a = 1, 2, 3
+        o = C(True)
+        o = C(False)  # o.__dict__ has reversed order.
+        self.assertEqual(list(o.__dict__), ["c", "b", "a"])
+
+        d = {}
+        d.update(o.__dict__)
+        self.assertEqual(list(d), ["c", "b", "a"])
+
     def test_iterator_pickling(self):
         for proto in range(pickle.HIGHEST_PROTOCOL + 1):
             data = {1:"a", 2:"b", 3:"c"}
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-02-24-16-34-17.bpo-40116.AeVGG2.rst b/Misc/NEWS.d/next/Core and Builtins/2022-02-24-16-34-17.bpo-40116.AeVGG2.rst
new file mode 100644 (file)
index 0000000..fb3f82e
--- /dev/null
@@ -0,0 +1,2 @@
+Fix regression that dict.update(other) may don't respect iterate order of
+other when other is key sharing dict.
index e8b4d66e943f68dee7e2fd9f2fcb236fa28ac2ad..82ff831e3887df5c1b49d7cc43f4ac7a8fb74b5b 100644 (file)
@@ -1 +1 @@
-In :func:`typing.get_type_hints`, support evaluating stringified ``ParamSpecArgs`` and ``ParamSpecKwargs`` annotations. Patch by Gregory Beauregard.
\ No newline at end of file
+In :func:`typing.get_type_hints`, support evaluating stringified ``ParamSpecArgs`` and ``ParamSpecKwargs`` annotations. Patch by Gregory Beauregard.