| // Copyright (c) 2017, 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 Iterator<E> iterator |
| /// ... |
| /// Modifying the collection may cause new iterators to produce different |
| /// elements, and may change the order of existing elements. A List specifies its |
| /// iteration order precisely, so modifying the list changes the iteration |
| /// order predictably. |
| /// @description Checks that the iterators of the same iterable can return the |
| /// different values for the same element if the underlying collection is |
| /// changed. |
| /// @author ngl@unipro.ru |
| |
| |
| import "dart:typed_data"; |
| import "../../../Utils/expect.dart"; |
| |
| Int32x4 i32x4p(n) => new Int32x4(n, n + 1, n + 2, n + 3); |
| |
| equal(o1, o2) => o1.x == o2.x && o1.y == o2.y && o1.z == o2.z && o1.w == o2.w; |
| |
| main() { |
| var l = new Int32x4List.fromList( |
| [i32x4p(1), i32x4p(5), i32x4p(9), i32x4p(13)]); |
| var it1 = l.iterator; |
| var it2 = l.iterator; |
| var it3 = l.iterator; |
| it1.moveNext(); |
| Expect.isTrue(equal(i32x4p(1), it1.current)); |
| |
| l[0] = i32x4p(11); |
| it2.moveNext(); |
| l[0] = i32x4p(21); |
| Expect.isTrue(equal(i32x4p(11), it2.current)); |
| Expect.isTrue(equal(i32x4p(1), it1.current)); |
| |
| it3.moveNext(); |
| Expect.isTrue(equal(i32x4p(21), it3.current)); |
| Expect.isTrue(equal(i32x4p(11), it2.current)); |
| Expect.isTrue(equal(i32x4p(1), it1.current)); |
| |
| it1.moveNext(); |
| it2.moveNext(); |
| it3.moveNext(); |
| Expect.isTrue(equal(it1.current, it2.current)); |
| Expect.isTrue(equal(it1.current, it3.current)); |
| } |