// 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() {}
