// 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. // @dart = 2.9 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); } }