// Copyright (c) 2013, 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 test program for constructors and initializers.

// @dart = 2.9

// Check function subtyping for local functions against generic typedefs.

import 'package:expect/expect.dart';

typedef int Foo<T>(T a, [String b]);
typedef int Bar<T>(T a, [String b]);
typedef int Baz<T>(T a, {String b});
typedef int Boz<T>(T a);

main() {
  int foo(bool a, [String b]) => null;
  int baz(bool a, {String b}) => null;

  Expect.isTrue(foo is Foo<bool>, 'foo is Foo<bool>');
  Expect.isTrue(foo is Bar<bool>, 'foo is Bar<bool>');
  Expect.isFalse(foo is Baz<bool>, 'foo is Baz<bool>');
  Expect.isTrue(foo is Boz<bool>, 'foo is Boz<bool>');

  Expect.isFalse(foo is Foo<int>, 'foo is Foo<int>');
  Expect.isFalse(foo is Bar<int>, 'foo is Bar<int>');
  Expect.isFalse(foo is Baz<int>, 'foo is Baz<int>');
  Expect.isFalse(foo is Boz<int>, 'foo is Boz<int>');

  Expect.isFalse(foo is Foo, 'foo is Foo');
  Expect.isFalse(foo is Bar, 'foo is Bar');
  Expect.isFalse(foo is Baz, 'foo is Baz');
  Expect.isFalse(foo is Boz, 'foo is Boz');

  Expect.isFalse(baz is Foo<bool>, 'baz is Foo<bool>');
  Expect.isFalse(baz is Bar<bool>, 'baz is Bar<bool>');
  Expect.isTrue(baz is Baz<bool>, 'baz is Baz<bool>');
  Expect.isTrue(baz is Boz<bool>, 'baz is Boz<bool>');

  Expect.isFalse(baz is Foo<int>, 'baz is Foo<int>');
  Expect.isFalse(baz is Bar<int>, 'baz is Bar<int>');
  Expect.isFalse(baz is Baz<int>, 'baz is Baz<int>');
  Expect.isFalse(baz is Boz<int>, 'baz is Boz<int>');

  Expect.isFalse(baz is Foo, 'baz is Foo');
  Expect.isFalse(baz is Bar, 'baz is Bar');
  Expect.isFalse(baz is Baz, 'baz is Baz');
  Expect.isFalse(baz is Boz, 'baz is Boz');
}
