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

// Test that generic methods with optional parameters are of correct type.

library generic_methods_optional_parameters_test;

import "package:expect/expect.dart";

typedef FunObjObj = Object Function<T>(Object, [Object]);
typedef FunTypObj = Object Function<T>(T, [Object]);
typedef FunObjTyp = Object Function<T>(Object, [T]);
typedef FunTypTyp = Object Function<T>(T, [T]);

Object funObjObj<T>(Object x, [Object y]) => x;
Object funTypObj<T>(T x, [Object y]) => y;
Object funObjTyp<T>(Object x, [T y]) => x;
Object funTypTyp<T>(T x, [T y]) => null;

main() {
  Expect.isTrue(funObjObj is FunObjObj);
  Expect.isTrue(funObjObj is FunTypObj);
  Expect.isTrue(funObjObj is FunObjTyp);
  Expect.isTrue(funObjObj is FunTypTyp);

  Expect.isTrue(funTypObj is! FunObjObj);
  Expect.isTrue(funTypObj is FunTypObj);
  Expect.isTrue(funTypObj is! FunObjTyp);
  Expect.isTrue(funTypObj is FunTypTyp);

  Expect.isTrue(funObjTyp is! FunObjObj);
  Expect.isTrue(funObjTyp is! FunTypObj);
  Expect.isTrue(funObjTyp is FunObjTyp);
  Expect.isTrue(funObjTyp is FunTypTyp);

  Expect.isTrue(funTypTyp is! FunObjObj);
  Expect.isTrue(funTypTyp is! FunTypObj);
  Expect.isTrue(funTypTyp is! FunObjTyp);
  Expect.isTrue(funTypTyp is FunTypTyp);
}
