blob: d908f32596a380f90dd68c81f0f82ecc2f249772 [file] [log] [blame]
// Copyright (c) 2013, 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 "package:expect/expect.dart";
import "dart:collection";
class MyList extends ListBase {
List list;
MyList(this.list);
get length => list.length;
set length(value) {
list.length = value;
}
operator [](index) => list[index];
operator []=(index, val) {
list[index] = val;
}
toString() => list.toString();
}
void testWithoutModification(List list) {
var seen = [];
list.forEach(seen.add);
Expect.listEquals(list, seen);
}
void testWithModification(List list) {
if (list.isEmpty) return;
Expect.throws(() => list.forEach((_) => list.add(0)),
(e) => e is ConcurrentModificationError);
}
main() {
List fixedLengthList = new List.filled(10, null);
for (int i = 0; i < 10; i++) fixedLengthList[i] = i + 1;
List growableList = [];
growableList.length = 10;
for (int i = 0; i < 10; i++) growableList[i] = i + 1;
var growableLists = [
[],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
new MyList([1, 2, 3, 4, 5]),
growableList,
];
var fixedLengthLists = [
const [],
fixedLengthList,
const [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
new MyList(const [1, 2]),
];
for (var list in growableLists) {
print(list);
testWithoutModification(list);
testWithModification(list);
}
for (var list in fixedLengthLists) {
testWithoutModification(list);
}
}