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

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 main() {
  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]
  ]);
}
