// 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 The static type of a list literal of the form
 * const <E>[e1... en] or the form <E>[e1... en] is List<E>.
 * @description Checks that the static type of a list literal is List<E> by
 * ensuring there're no static warnings when assigning such list to an
 * appropriately typed variable.
 * @static-clean
 * @author msyabro
 */

class C {
  const C();
}

main() {
  List<int> lInt = <int>[];
  lInt = const <int>[1, 2];

  List<num> lNum = <int>[];
  lNum = const <int>[1, 2];

  List<bool> lBool = <bool>[true];
  lBool = const <bool>[false, 1 < 1];

  List<C> lC = <C>[new C()];
  lC = const <C>[const C()];

  List<String> lString = <String> ["a", "b", "c"];
  lString = const <String>["A", "B", "C"];
}
