// 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 A runtime list literal <E>[e1... en] is evaluated as follows:
/// • First, the expressions e1... en are evaluated in order, they appear in the
///   program, yielding objects o1... on.
/// • A fresh instance a, of size n, whose class implements the built-in class
///   List<E> is allocated.
/// • The operator []= is invoked on a with first argument i and second argument
///   oi+1, 0 <= i < n.
/// • The result of the evaluation is a.
/// @description Checks that ith element is set to o(i+1), o <= i < n.
/// @author msyabro

import '../../../Utils/expect.dart';

main() {
  List l = [0, 1, 2, 3, 4, 5, 5 + 1, 5 + 2, 9 - 1, 9, 2 * 5];
  for (int i = 0; i <= 10; i++) {
    Expect.equals(i, l[i]);
  }

  l = <bool>[false, true];
  Expect.equals(false, l[0]);
  Expect.equals(true, l[1]);

  l = [];
  Expect.isTrue(l.isEmpty);

  l = ["a", "b", "c"];
  Expect.equals("a", l[0]);
  Expect.equals("b", l[1]);
  Expect.equals("c", l[2]);
}
