// Copyright (c) 2018, 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 Let the element type of a list literal be the static type of the
/// type argument used to create the list. So <int>[] has an element type of int.
/// It may be explicit or filled in by type inference. So [1, 2.0] has an element
/// type of num.
///
/// @description Checks that element type of the list literals is the static type
/// of the type argument used to create the list
/// @author sgrekhov@unipro.ru

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

main() {
  bool b = true;
  var collection = [3, 1, 4, 1, 5];

  List<int> list1 = [
    if (b) 1,
    if (!b) 2,
    if (b) for (var v in collection) if (v.isOdd) v,
    for (int i = 5; i < 10; i++) i
  ];
  Expect.isTrue(list1 is List<int>);
  Expect.runtimeIsType<List<int>>(list1);

  var list2 = <int>[
    if (b) 1,
    if (!b) 2,
    if (b) for (var v in collection) if (v.isOdd) v,
    for (int i = 5; i < 10; i++) i
  ];
  Expect.isTrue(list2 is List<int>);
  Expect.runtimeIsType<List<int>>(list2);

  var list3 = [
    if (b) 1.1,
    if (!b) 2,
    if (b) for (var v in collection) if (v.isOdd) v,
    for (int i = 5; i < 10; i++) i
  ];
  Expect.isTrue(list3 is List<num>);
  Expect.isFalse(list3 is List<int>);
  Expect.runtimeIsType<List<num>>(list3);
  Expect.runtimeIsNotType<List<int>>(list3);

  const list4 = [
    if (2 > 1) 1.1,
    if (1 > 2) 2,
    3
  ];
  Expect.isTrue(list4 is List<num>);
  Expect.isFalse(list4 is List<int>);
  Expect.runtimeIsType<List<num>>(list4);
  Expect.runtimeIsNotType<List<int>>(list4);

  var list5 = const [
    if (2 > 1) 1.1,
    if (1 > 2) "2",
    3
  ];
  Expect.isTrue(list5 is List<Object>);
  Expect.isFalse(list5 is List<num>);
  Expect.runtimeIsType<List<Object>>(list5);
  Expect.runtimeIsNotType<List<num>>(list5);
}
