library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
// Try changing the type of the parameter, or casting the argument to 'int Function(double, int)'.
//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
//                                                                         ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
// Try changing the type of the parameter, or casting the argument to 'double Function(int, double)'.
//       /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
//                                                                         ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
// Try changing the type of the parameter, or casting the argument to 'int Function(double, int)'.
//   takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
//                                                                        ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
// Try changing the type of the parameter, or casting the argument to 'double Function(int, double)'.
//   takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
//                                                                        ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
// Try changing the type of the parameter, or casting the argument to 'int Function(double, int)'.
//           . /*@target=C::m*/ m);
//                              ^
//
// pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
// Try changing the type of the parameter, or casting the argument to 'double Function(int, double)'.
//           . /*@target=C::m*/ m);
//                              ^
//
import self as self;
import "dart:core" as core;
import "dart:math" as math;

class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  method m<T extends core::num = core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
    return null;
}
static method test() → dynamic {
  self::takeIII(math::max<core::int>);
  self::takeDDD(math::max<core::double>);
  self::takeNNN(math::max<core::num>);
  self::takeIDN(math::max<core::num>);
  self::takeDIN(math::max<core::num>);
  self::takeIIN(math::max<core::int>);
  self::takeDDN(math::max<core::double>);
  self::takeIIO(math::max<core::int>);
  self::takeDDO(math::max<core::double>);
  self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
  self::takeIDI(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
Try changing the type of the parameter, or casting the argument to 'int Function(double, int)'.
      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                        ^" in (math::max<core::num>) as{TypeError} (core::double, core::int) → core::int);
  self::takeDID(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
Try changing the type of the parameter, or casting the argument to 'double Function(int, double)'.
      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
                                                                        ^" in (math::max<core::num>) as{TypeError} (core::int, core::double) → core::double);
  self::takeOON((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
  self::takeOOO((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
  self::takeIII(math::min<core::int>);
  self::takeDDD(math::min<core::double>);
  self::takeNNN(math::min<core::num>);
  self::takeIDN(math::min<core::num>);
  self::takeDIN(math::min<core::num>);
  self::takeIIN(math::min<core::int>);
  self::takeDDN(math::min<core::double>);
  self::takeIIO(math::min<core::int>);
  self::takeDDO(math::min<core::double>);
  self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
  self::takeIDI(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
Try changing the type of the parameter, or casting the argument to 'int Function(double, int)'.
  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                       ^" in (math::min<core::num>) as{TypeError} (core::double, core::int) → core::int);
  self::takeDID(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
Try changing the type of the parameter, or casting the argument to 'double Function(int, double)'.
  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
                                                                       ^" in (math::min<core::num>) as{TypeError} (core::int, core::double) → core::double);
  self::takeOON((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
  self::takeOOO((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
  self::takeIII(new self::C::•().{self::C::m}<core::int>);
  self::takeDDD(new self::C::•().{self::C::m}<core::double>);
  self::takeNNN(new self::C::•().{self::C::m}<core::num>);
  self::takeIDN(new self::C::•().{self::C::m}<core::num>);
  self::takeDIN(new self::C::•().{self::C::m}<core::num>);
  self::takeIIN(new self::C::•().{self::C::m}<core::int>);
  self::takeDDN(new self::C::•().{self::C::m}<core::double>);
  self::takeIIO(new self::C::•().{self::C::m}<core::int>);
  self::takeDDO(new self::C::•().{self::C::m}<core::double>);
  self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
  self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
  self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
  self::takeIDI(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
Try changing the type of the parameter, or casting the argument to 'int Function(double, int)'.
          . /*@target=C::m*/ m);
                             ^" in (new self::C::•().{self::C::m}<core::num>) as{TypeError} (core::double, core::int) → core::int);
  self::takeDID(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
Try changing the type of the parameter, or casting the argument to 'double Function(int, double)'.
          . /*@target=C::m*/ m);
                             ^" in (new self::C::•().{self::C::m}<core::num>) as{TypeError} (core::int, core::double) → core::double);
}
static method takeIII((core::int, core::int) → core::int fn) → void {}
static method takeDDD((core::double, core::double) → core::double fn) → void {}
static method takeIDI((core::double, core::int) → core::int fn) → void {}
static method takeDID((core::int, core::double) → core::double fn) → void {}
static method takeIDN((core::double, core::int) → core::num fn) → void {}
static method takeDIN((core::int, core::double) → core::num fn) → void {}
static method takeIIN((core::int, core::int) → core::num fn) → void {}
static method takeDDN((core::double, core::double) → core::num fn) → void {}
static method takeNNN((core::num, core::num) → core::num fn) → void {}
static method takeOON((core::Object, core::Object) → core::num fn) → void {}
static method takeOOO((core::Object, core::Object) → core::num fn) → void {}
static method takeOOI((core::Object, core::Object) → core::int fn) → void {}
static method takeIIO((core::int, core::int) → core::Object fn) → void {}
static method takeDDO((core::double, core::double) → core::Object fn) → void {}
static method main() → dynamic {}
