// 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 final Iterable<E> reversed
 * Returns an Iterable of the elements of this List in reverse order.
 * @description Checks that the returned [Iterator] iterates all elements of the
 * list.
 * @author kaigorodov
 */
library reversed_A01_t01;

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

test(List<E> create<E>([int length, E fill])) {

  void checkReversedIterator(List a) {
    List b = create();
    b.addAll(a);
    Iterator it = b.reversed.iterator;
    int i = a.length-1;
    while (it.moveNext()) {
      Expect.isTrue(it.current == a[i--]);
    }
    Expect.equals(-1, i);
  }
  
  checkReversedIterator([]);
  checkReversedIterator(const [null, 0, "1", false, const []]);
  checkReversedIterator(new List.filled(300, 0));

  List a = new List.filled(365, 0);
  for (var i = 0; i < a.length; i++) {
    a[i] = i;
  }
  checkReversedIterator(a);
  checkReversedIterator(["0", "1", "2", "3", "4", "5"]);
}
