// 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.
// @dart=2.9
/*@testedFeatures=inference*/
library test;

void f0(List<int> a) {}
void f1({List<int> a}) {}
void f2(Iterable<int> a) {}
void f3(Iterable<Iterable<int>> a) {}
void f4({Iterable<Iterable<int>> a}) {}
void test() {
  f0(/*@ typeArgs=int* */ []);
  f0(/*@ typeArgs=int* */ [3]);
  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello"]);
  f0(/*@ typeArgs=int* */ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ "hello", 3]);

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

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

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

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

main() {}
