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

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>);
}
