// 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 It seems like it is not possible to obtain the value of the
/// default bound at runtime, we can only obtain the result of instantiation to
/// bound. So the test checks that if generic function type parameter is not
/// clearly specified, it is treated as [dynamic] at runtime.
///
/// See also co19 issue #530.
/// @Issue 40367
/// @author iarkh@unipro.ru

 // Requirements=nnbd-strong

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

dynamic i = null;

void test1<T>() {
  Expect.equals(typeOf<dynamic>(), T);
}

T test2<T>() {
  Expect.equals(typeOf<dynamic>(), T);
  return i;
}

void test3<T>(T t) {
  Expect.equals(typeOf<dynamic>(), T);
}

T test4<T>(T t) {
  Expect.equals(typeOf<int?>(), T);
  return i;
}

void test5<T1, T2, T3>() {
  Expect.equals(typeOf<dynamic>(), T1);
  Expect.equals(typeOf<dynamic>(), T2);
  Expect.equals(typeOf<dynamic>(), T3);
}

void main() {
  test1();
  test2();
  test3(1 as dynamic);
  test4(11 as int?);
  test5();
}
