// Copyright (c) 2011, 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

import "package:expect/expect.dart";

main() {
  var map1 = {"foo": 42, "bar": 499};
  var map2 = {};
  var map3 = const {"foo": 42, "bar": 499};
  var map4 = const {};
  var map5 = new Map<String, int>();
  map5["foo"] = 43;
  map5["bar"] = 500;
  var map6 = new Map<String, bool>();

  Expect.isTrue(map1.keys is Iterable<String>);
  Expect.isFalse(map1.keys is Iterable<bool>);

  Expect.isFalse(map2.keys is Iterable<String>);
  Expect.isFalse(map2.keys is Iterable<bool>);

  Expect.isTrue(map3.keys is Iterable<String>);
  Expect.isFalse(map3.keys is Iterable<bool>);

  Expect.isFalse(map4.keys is Iterable<String>);
  Expect.isFalse(map4.keys is Iterable<bool>);

  Expect.isTrue(map5.keys is Iterable<String>);
  Expect.isFalse(map5.keys is Iterable<bool>);

  Expect.isTrue(map6.keys is Iterable<String>);
  Expect.isFalse(map6.keys is Iterable<bool>);
}
