mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 12:30:03 +00:00
[lib/collection] Test for #48282
Change-Id: I62306feab09f8dcd0335daa296b6c744bc139e62 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/231336 Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Stephen Adams <sra@google.com>
This commit is contained in:
parent
e31691b47f
commit
8d335e5e08
74
tests/lib/collection/map_iterables_consistency_test.dart
Normal file
74
tests/lib/collection/map_iterables_consistency_test.dart
Normal file
|
@ -0,0 +1,74 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:expect/expect.dart';
|
||||
|
||||
// Test that a Map's keys, values and entries iterables are consistent with
|
||||
// their map.
|
||||
//
|
||||
// While it is generally not permitted to modify a map while iterating the keys,
|
||||
// values, or entries, it is possible to iterate these collections in between
|
||||
// modifications of the map.
|
||||
//
|
||||
// See #48282
|
||||
|
||||
void check(String kind, Map m) {
|
||||
Expect.equals(0, m.length);
|
||||
|
||||
// These existing iterables
|
||||
final keys = m.keys;
|
||||
final values = m.values;
|
||||
final entries = m.entries;
|
||||
|
||||
for (int i = 0; i < 20; i++) {
|
||||
Expect.equals(i, m.length);
|
||||
|
||||
// Fresh iterables.
|
||||
Expect.equals(i, m.keys.length);
|
||||
Expect.equals(i, m.values.length);
|
||||
Expect.equals(i, m.entries.length);
|
||||
|
||||
Expect.equals(i, List.of(m.keys).length);
|
||||
Expect.equals(i, List.of(m.values).length);
|
||||
Expect.equals(i, List.of(m.entries).length);
|
||||
|
||||
Expect.equals(i, iteratedLength(m.keys));
|
||||
Expect.equals(i, iteratedLength(m.values));
|
||||
Expect.equals(i, iteratedLength(m.entries));
|
||||
|
||||
// Existing iterables.
|
||||
Expect.equals(i, keys.length);
|
||||
Expect.equals(i, values.length);
|
||||
Expect.equals(i, entries.length);
|
||||
|
||||
Expect.equals(i, List.of(keys).length);
|
||||
Expect.equals(i, List.of(values).length);
|
||||
Expect.equals(i, List.of(entries).length);
|
||||
|
||||
Expect.equals(i, iteratedLength(keys));
|
||||
Expect.equals(i, iteratedLength(values));
|
||||
Expect.equals(i, iteratedLength(entries));
|
||||
|
||||
m[i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
int iteratedLength(Iterable iterable) {
|
||||
int length = 0;
|
||||
final iterator = iterable.iterator;
|
||||
while (iterator.moveNext()) {
|
||||
length++;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
void main() {
|
||||
check('Map', {});
|
||||
check('Map.identity', Map.identity());
|
||||
check('HashMap', HashMap());
|
||||
check('HashMap.identity', HashMap.identity());
|
||||
check('SplayTreeMap', SplayTreeMap());
|
||||
}
|
76
tests/lib_2/collection/map_iterables_consistency_test.dart
Normal file
76
tests/lib_2/collection/map_iterables_consistency_test.dart
Normal file
|
@ -0,0 +1,76 @@
|
|||
// Copyright (c) 2022, 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.
|
||||
|
||||
// @dart = 2.9
|
||||
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:expect/expect.dart';
|
||||
|
||||
// Test that a Map's keys, values and entries iterables are consistent with
|
||||
// their map.
|
||||
//
|
||||
// While it is generally not permitted to modify a map while iterating the keys,
|
||||
// values, or entries, it is possible to iterate these collections in between
|
||||
// modifications of the map.
|
||||
//
|
||||
// See #48282
|
||||
|
||||
void check(String kind, Map m) {
|
||||
Expect.equals(0, m.length);
|
||||
|
||||
// These existing iterables
|
||||
final keys = m.keys;
|
||||
final values = m.values;
|
||||
final entries = m.entries;
|
||||
|
||||
for (int i = 0; i < 20; i++) {
|
||||
Expect.equals(i, m.length);
|
||||
|
||||
// Fresh iterables.
|
||||
Expect.equals(i, m.keys.length);
|
||||
Expect.equals(i, m.values.length);
|
||||
Expect.equals(i, m.entries.length);
|
||||
|
||||
Expect.equals(i, List.of(m.keys).length);
|
||||
Expect.equals(i, List.of(m.values).length);
|
||||
Expect.equals(i, List.of(m.entries).length);
|
||||
|
||||
Expect.equals(i, iteratedLength(m.keys));
|
||||
Expect.equals(i, iteratedLength(m.values));
|
||||
Expect.equals(i, iteratedLength(m.entries));
|
||||
|
||||
// Existing iterables.
|
||||
Expect.equals(i, keys.length);
|
||||
Expect.equals(i, values.length);
|
||||
Expect.equals(i, entries.length);
|
||||
|
||||
Expect.equals(i, List.of(keys).length);
|
||||
Expect.equals(i, List.of(values).length);
|
||||
Expect.equals(i, List.of(entries).length);
|
||||
|
||||
Expect.equals(i, iteratedLength(keys));
|
||||
Expect.equals(i, iteratedLength(values));
|
||||
Expect.equals(i, iteratedLength(entries));
|
||||
|
||||
m[i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
int iteratedLength(Iterable iterable) {
|
||||
int length = 0;
|
||||
final iterator = iterable.iterator;
|
||||
while (iterator.moveNext()) {
|
||||
length++;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
void main() {
|
||||
check('Map', {});
|
||||
check('Map.identity', Map.identity());
|
||||
check('HashMap', HashMap());
|
||||
check('HashMap.identity', HashMap.identity());
|
||||
check('SplayTreeMap', SplayTreeMap());
|
||||
}
|
Loading…
Reference in a new issue