blob: 4d63961bb72c6c0eb49e15224d794fa5b79b541e [file] [log] [blame]
// Copyright (c) 2011, 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 Iterable map(dynamic f(E e))
/// The transformed elements will not be cached. Iterating multiple times over
/// the returned Iterable will invoke the supplied function f multiple times on
/// the same element.
/// @description Checks that iterating multiple times over the returned
/// Iterable will invoke the supplied function f multiple times on the same
/// element.
/// @author kaigorodov
library map_A03_t01;
import "../../../Utils/expect.dart";
List<int> visited = new List<int>.filled(200, 0);
f(var element) {
int index;
if (element is double) {
index = element.floor();
} else {
index = element;
}
visited[index]++;
return element;
}
void checkResult(Iterable a, int expected) {
int count = 0;
Iterable mapIter = a.map(f);
for (var el in mapIter) {
count++;
}
Expect.equals(a.length, count);
for (int k = 0; k < 200; k++) {
Expect.equals(expected, visited[k]);
}
}
test(Iterable create([Iterable content])) {
List l = new List.empty(growable: true);
for (int k = 0; k < 200; k++) {
l.add(k);
visited[k] = 0;
}
Iterable a = create(l);
checkResult(a, 1);
checkResult(a, 2);
checkResult(a, 3);
}