mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 19:50:30 +01:00
py/objdict: Implement dictionary union (PEP 584).
Implements dictionary union according to PEP 584's specifications, minus the fact that dictionary entries are not guaranteed to be in insertion order. This feature is enabled with MICROPY_CPYTHON_COMPAT. Includes a new test. With the assistance of Fangrui Qin <qinf@purdue.edu> Signed-off-by: Rayane Chatrieux <rayane.chatrieux@gmail.com> Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
committed by
Damien George
parent
7fe7c55bb8
commit
f3e4c505d1
36
tests/basics/dict_union.py
Normal file
36
tests/basics/dict_union.py
Normal file
@@ -0,0 +1,36 @@
|
||||
# Test dictionary union.
|
||||
#
|
||||
# The tests sort the resulting dictionaries for now, since map insertion
|
||||
# order is not implemented in MicroPython.
|
||||
|
||||
try:
|
||||
{} | {}
|
||||
except TypeError:
|
||||
print("SKIP")
|
||||
raise SystemExit
|
||||
|
||||
|
||||
def print_sorted_dict(d):
|
||||
print(sorted(d.items()))
|
||||
|
||||
|
||||
def test_union(a, b):
|
||||
print_sorted_dict(a | b)
|
||||
print_sorted_dict(b | a)
|
||||
a |= a
|
||||
print_sorted_dict(a)
|
||||
a |= b
|
||||
print_sorted_dict(a)
|
||||
|
||||
|
||||
d = {}
|
||||
e = {}
|
||||
test_union(d, e)
|
||||
|
||||
d = {1: "apple"}
|
||||
e = {1: "cheese"}
|
||||
test_union(d, e)
|
||||
|
||||
d = {"spam": 1, "eggs": 2, "cheese": 3}
|
||||
e = {"cheese": "cheddar", "aardvark": "Ethel"}
|
||||
test_union(d, e)
|
||||
12
tests/basics/dict_union.py.exp
Normal file
12
tests/basics/dict_union.py.exp
Normal file
@@ -0,0 +1,12 @@
|
||||
[]
|
||||
[]
|
||||
[]
|
||||
[]
|
||||
[(1, 'cheese')]
|
||||
[(1, 'apple')]
|
||||
[(1, 'apple')]
|
||||
[(1, 'cheese')]
|
||||
[('aardvark', 'Ethel'), ('cheese', 'cheddar'), ('eggs', 2), ('spam', 1)]
|
||||
[('aardvark', 'Ethel'), ('cheese', 3), ('eggs', 2), ('spam', 1)]
|
||||
[('cheese', 3), ('eggs', 2), ('spam', 1)]
|
||||
[('aardvark', 'Ethel'), ('cheese', 'cheddar'), ('eggs', 2), ('spam', 1)]
|
||||
Reference in New Issue
Block a user