// 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 foo(
    [Map<int, String> m1 = /*@ typeArgs=int*, String* */ const {1: "hello"},
    Map<int, String> m2 = /*@ typeArgs=int*, String* */ const {
      // One error is from type checking and the other is from const evaluation.
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
          "world"
    }]) {}
void test() {
  {
    Map<int, String> l0 = /*@ typeArgs=int*, String* */ {};
    Map<int, String> l1 = /*@ typeArgs=int*, String* */ {3: "hello"};
    Map<int, String> l2 = /*@ typeArgs=int*, String* */ {
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
    };
    Map<int, String> l3 = /*@ typeArgs=int*, String* */ {
      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
    };
    Map<int, String> l4 = /*@ typeArgs=int*, String* */ {
      3: "hello",
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
    };
  }
  {
    Map<dynamic, dynamic> l0 = /*@ typeArgs=dynamic, dynamic */ {};
    Map<dynamic, dynamic> l1 = /*@ typeArgs=dynamic, dynamic */ {3: "hello"};
    Map<dynamic, dynamic> l2 = /*@ typeArgs=dynamic, dynamic */ {
      "hello": "hello"
    };
    Map<dynamic, dynamic> l3 = /*@ typeArgs=dynamic, dynamic */ {3: 3};
    Map<dynamic, dynamic> l4 = /*@ typeArgs=dynamic, dynamic */ {
      3: "hello",
      "hello": 3
    };
  }
  {
    Map<dynamic, String> l0 = /*@ typeArgs=dynamic, String* */ {};
    Map<dynamic, String> l1 = /*@ typeArgs=dynamic, String* */ {3: "hello"};
    Map<dynamic, String> l2 = /*@ typeArgs=dynamic, String* */ {"hello": "hello"};
    Map<dynamic, String> l3 = /*@ typeArgs=dynamic, String* */ {
      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
    };
    Map<dynamic, String> l4 = /*@ typeArgs=dynamic, String* */ {
      3: "hello",
      "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
    };
  }
  {
    Map<int, dynamic> l0 = /*@ typeArgs=int*, dynamic */ {};
    Map<int, dynamic> l1 = /*@ typeArgs=int*, dynamic */ {3: "hello"};
    Map<int, dynamic> l2 = /*@ typeArgs=int*, dynamic */ {
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": "hello"
    };
    Map<int, dynamic> l3 = /*@ typeArgs=int*, dynamic */ {3: 3};
    Map<int, dynamic> l4 = /*@ typeArgs=int*, dynamic */ {
      3: "hello",
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello": 3
    };
  }
  {
    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
      3: "hello"
    };
    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
      3: 3
    };
  }
  {
    const Map<int, String> l0 = /*@ typeArgs=int*, String* */ const {};
    const Map<int, String> l1 = /*@ typeArgs=int*, String* */ const {3: "hello"};
    const Map<int, String> l2 = /*@ typeArgs=int*, String* */ const {
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
          "hello"
    };
    const Map<int, String> l3 = /*@ typeArgs=int*, String* */ const {
      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
    };
    const Map<int, String> l4 = /*@ typeArgs=int*, String* */ const {
      3: "hello",
      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ "hello":
          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
    };
  }
}

main() {}
