 /*
 * Copyright (c) 2019, 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.
 */
/**
 * @assertion The default bound of generic type parameters is treated as
 * [Object?].
 * @description Check that default function type alias parameter is treated as
 * [Object?] dynamically.
 * @author iarkh@unipro.ru
 */
// SharedOptions=--enable-experiment=non-nullable
 // Requirements=nnbd-strong

import "../../Utils/expect.dart";

typedef T Function1<T>();
typedef void Function2<T>(T);
typedef T Function3<T>(T);
typedef T1 Function4<T1, T2, T3>(T2, T3);
typedef void Function5<T>();

void main() {
  Expect.equals(typeOf<Function1<Object?>>(), typeOf<Function1>());
  Expect.equals(typeOf<Function2<Object?>>(), typeOf<Function2>());
  Expect.equals(typeOf<Function3<Object?>>(), typeOf<Function3>());
  Expect.equals(typeOf<Function4<Object?, Object?, Object?>>(), typeOf<Function4>());
  Expect.equals(typeOf<Function5<Object?>>(), typeOf<Function5>());
}
