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

/*@testedFeatures=inference*/
library test;

class F0 {
  F0(List<int> a) {}
}

class F1 {
  F1({List<int> a}) {}
}

class F2 {
  F2(Iterable<int> a) {}
}

class F3 {
  F3(Iterable<Iterable<int>> a) {}
}

class F4 {
  F4({Iterable<Iterable<int>> a}) {}
}

void test() {
  new F0(/*@typeArgs=int*/ []);
  new F0(/*@typeArgs=int*/ [3]);
  new F0(
      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
  new F0(/*@typeArgs=int*/ [
    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
    3
  ]);

  new F1(a: /*@typeArgs=int*/ []);
  new F1(a: /*@typeArgs=int*/ [3]);
  new F1(a: /*@typeArgs=int*/ [
    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"
  ]);
  new F1(a: /*@typeArgs=int*/ [
    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
    3
  ]);

  new F2(/*@typeArgs=int*/ []);
  new F2(/*@typeArgs=int*/ [3]);
  new F2(
      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
  new F2(/*@typeArgs=int*/ [
    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello",
    3
  ]);

  new F3(/*@typeArgs=Iterable<int>*/ []);
  new F3(/*@typeArgs=Iterable<int>*/ [
    /*@typeArgs=int*/ [3]
  ]);
  new F3(/*@typeArgs=Iterable<int>*/ [
    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
  ]);
  new F3(/*@typeArgs=Iterable<int>*/ [
    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
    /*@typeArgs=int*/ [3]
  ]);

  new F4(a: /*@typeArgs=Iterable<int>*/ []);
  new F4(a: /*@typeArgs=Iterable<int>*/ [
    /*@typeArgs=int*/ [3]
  ]);
  new F4(a: /*@typeArgs=Iterable<int>*/ [
    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]
  ]);
  new F4(a: /*@typeArgs=Iterable<int>*/ [
    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"],
    /*@typeArgs=int*/ [3]
  ]);
}

main() {}
