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

/// @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 in the reversed order.
/// @author iarkh@unipro.ru

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

void check(List a) {
  List b = new UnmodifiableListView(a);
  Iterator it = b.reversed.iterator;
  int i = a.length - 1;
  while (it.moveNext()) {
    Expect.isTrue(it.current == a[i--]);
  }
  Expect.equals(-1, i);
}

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