 // Copyright (c) 2020, 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-weak

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();
}
