// 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 abstract Iterable map(f(E element))
/// Returns a new lazy Iterable with elements that are created by calling f on
/// each element of this Iterable in iteration order.
/// @description Checks that the resulting [Iterable] contains all the results of
/// [f(e)].
/// @author kaigorodov

import "dart:collection";
import "../../../Utils/expect.dart";

f(var element) {
  return [element];
}
    
void checkResult(DoubleLinkedQueue queue) {
  int count = 0;
  Iterable mapIter = queue.map(f);
  for (var el in mapIter) {
    Expect.listEquals(f(queue.elementAt(count)), el);
    count++;
  }
  Expect.equals(queue.length, count);
}

main() {
  DoubleLinkedQueue queue = new DoubleLinkedQueue();
  checkResult(queue);
  queue.add(22);
  checkResult(queue);
  queue.add(11);
  checkResult(queue);
  queue.add(11);
  checkResult(queue);
  for (int k = -100; k < 200; k++) {
    queue.add(k);
  }
  checkResult(queue);
}
