// 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.

// @dart = 2.9

/// @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);
}
