// 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 E last
/// Returns the last element.
/// Throws a StateError if this is empty. Otherwise may iterate through the
/// elements and returns the last one seen. Some iterables may have more
/// efficient ways to find the last element (for example a list can directly
/// access the last element, without iterating through the previous ones).
/// @description Checks that the last element of the list is returned.
/// @author kaigorodov

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

test(Iterable create([Iterable content]), {bool isSet:false}) {

  check(Iterable source) {
    if (isSet) {
      //  for Sets, we can only check that returned element belongs to the set
      Expect.isTrue(source.contains(create(source).last));
    } else {
      Expect.equals(source.last, create(source).last);
    }
  }

  List a = new List.empty(growable: true);
  a.add(0);
  check(a);

  a.add(1);
  check(a);

  a.add(1);
  check(a);

  List b = new List.filled(1000, null);
  b[999] = 999;
  a.addAll(b);
  check(b);

  a.length = 2001;
  a[2000] = 2001;
  check(a);

  a = new List.filled(10, null);
  a[9] = 9;
  check(a);

  a = [null, 0, 0, false, -1];
  check(a);

  a = const [null, 0, 0, false, 100];
  check(a);
}
