// Copyright (c) 2016, 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";

class C<E> {
  E e;
  C(this.e);
}

C<T> f1<T>(T t) => new C<T>(t);

List<T> f2<T>(T t) => <T>[t];

Map<T, String> f3<T>(T t) => <T, String>{t: 'hi'};

main() {
  C c = f1<int>(42);
  List i = f2<String>("Hello!");
  Expect.isTrue(c is C<int>);
  Expect.isFalse(c is C<String>);
  Expect.isTrue(i is List<String>);
  Expect.isFalse(i is List<int>);
  Expect.equals(c.e, 42);
  Expect.equals(i[0], "Hello!");

  Map m1 = f3<int>(1);
  Expect.isTrue(m1 is Map<int, String>);
  Expect.isFalse(m1 is Map<String, String>);
  Expect.isFalse(m1 is Map<int, int>);
  Expect.equals('hi', m1[1]);
}
