blob: eed2574c2eb137db2c01e253da17361373d95c46 [file] [log] [blame]
// 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.
// @dart = 2.9
/// @assertion Iterable<E> where(bool f(E element))
/// Iterating will not cache results, and thus iterating multiple times over the
/// returned [Iterable] may invoke the supplied function [test] multiple times on
/// the same element.
/// @description Checks that iterating multiple time over the returned [Iterable]
/// can invoke the [test] function several times.
/// @author iarkh@unipro.ru
import "dart:collection";
import "../../../Utils/expect.dart";
import "LinkedList.lib.dart";
void check(LinkedList<MyLinkedListEntry<int>> list, List expected) {
bool test(MyLinkedListEntry<int> entry) => test0(entry.value);
Iterator<MyLinkedListEntry<int>> it0 = list.iterator;
Iterator<MyLinkedListEntry<int>> it = list.where(test).iterator;
while (it0.moveNext()) {
if (test(it0.current)) {
Expect.isTrue(it.moveNext());
Expect.identical(it0.current, it.current);
}
}
Expect.isFalse(it.moveNext());
}
List res = new List();
bool test0(int element) {
res.add(element);
return element > 3;
}
main() {
MyLinkedListEntry<int> entry1 = new MyLinkedListEntry(1);
MyLinkedListEntry<int> entry3 = new MyLinkedListEntry(3);
MyLinkedListEntry<int> entry7 = new MyLinkedListEntry(7);
MyLinkedListEntry<int> entry4 = new MyLinkedListEntry(4);
MyLinkedListEntry<int> entry5 = new MyLinkedListEntry(5);
MyLinkedListEntry<int> entry6 = new MyLinkedListEntry(6);
LinkedList<MyLinkedListEntry<int>> list =
new LinkedList<MyLinkedListEntry<int>>();
list.addAll([entry1, entry3, entry7, entry4, entry5, entry6]);
check(list, [entry1, entry3, entry7, entry4, entry5, entry6]);
check(list, [entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6]);
check(list, [entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6]);
check(list, [entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6]);
check(list, [entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6,
entry1, entry3, entry7, entry4, entry5, entry6]);
}