| /* |
| * Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file |
| * for details. All rights reserved. Use of this source code is governed by a |
| * BSD-style license that can be found in the LICENSE file. |
| */ |
| /** |
| * @assertion A list literal <E>[elem_1 ... elem_n] is evaluated as follows: |
| * |
| * 2. For each entry in the map literal: |
| * i. If entry is a spread element: |
| * a. Evaluate the entry's expression to a value value. |
| * b. If entry is null-aware and value is [null], continue to the next |
| * entry in the literal. |
| * c. Evaluate [value.entries.iterator] to a value iterator. |
| * d. Loop: |
| * a. If [iterator.moveNext()] returns [false], exit the loop. |
| * b. Evaluate [iterator.current] to a value [newEntry]. |
| * c. Call map[newEntry.key] = newEntry.value. |
| * ii. Else, entry has form [e1: e2]: |
| * a. Evaluate [e1] to a value key. |
| * b. Evaluate [e2] to a value value. |
| * c. Call map[key] = value. |
| * @description Checks that elements in the spread element are added to the |
| * result map |
| * @author iarkh@unipro.ru |
| */ |
| // SharedOptions=--enable-experiment=constant-update-2018 |
| |
| import "dart:collection"; |
| import "../../Utils/expect.dart"; |
| |
| class MapBaseImpl<K, V> extends MapBase<K, V> { |
| ListQueue put_order = new ListQueue(); |
| LinkedHashMap<K, V> _map; |
| MapBaseImpl(): _map = new LinkedHashMap<K, V>(); |
| MapBaseImpl.from(Map content): _map = new LinkedHashMap<K, V>.from(content); |
| Iterable<K> get keys => _map.keys; |
| V operator [](Object key) => _map[key]; |
| void operator []=(K key, V value) { _map[key] = value; } |
| void clear() { _map.clear(); } |
| V remove(Object key) => _map.remove(key); |
| } |
| |
| List myMaps = <Map>[{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}, |
| {10: "a", 9: "14", 8: 1, 7: 2, 6: null, 5: 143, 4: [11]}, |
| {1: 1, 2: 2, 3: {}, 4: [123,4], 5: 14}, |
| {6: [], 5: [], 4: 12345}, |
| {}]; |
| |
| main() { |
| myMaps.forEach((var m) { |
| Map map = new MapBaseImpl.from(m); |
| Expect.mapEquals(m, {...map}); |
| }); |
| } |