library test;
import self as self;
import "dart:core" as core;

import "dart:math" as math;
import "dart:math";

class C extends core::Object {
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  method m<T extends core::num* = dynamic>(self::C::m::T* x, self::C::m::T* y) → self::C::m::T*
    return null;
}
static method test() → dynamic {
  self::takeIII(#C1);
  self::takeDDD(#C1);
  self::takeNNN(#C1);
  self::takeIDN(#C1);
  self::takeDIN(#C1);
  self::takeIIN(#C1);
  self::takeDDN(#C1);
  self::takeIIO(#C1);
  self::takeDDO(#C1);
  self::takeOOI(#C1);
  self::takeIDI(#C1);
  self::takeDID(#C1);
  self::takeOON(#C1);
  self::takeOOO(#C1);
  self::takeIII(#C2);
  self::takeDDD(#C2);
  self::takeNNN(#C2);
  self::takeIDN(#C2);
  self::takeDIN(#C2);
  self::takeIIN(#C2);
  self::takeDDN(#C2);
  self::takeIIO(#C2);
  self::takeDDO(#C2);
  self::takeOOI(#C2);
  self::takeIDI(#C2);
  self::takeDID(#C2);
  self::takeOON(#C2);
  self::takeOOO(#C2);
  self::takeIII(new self::C::•().m);
  self::takeDDD(new self::C::•().m);
  self::takeNNN(new self::C::•().m);
  self::takeIDN(new self::C::•().m);
  self::takeDIN(new self::C::•().m);
  self::takeIIN(new self::C::•().m);
  self::takeDDN(new self::C::•().m);
  self::takeIIO(new self::C::•().m);
  self::takeDDO(new self::C::•().m);
  self::takeOON(new self::C::•().m);
  self::takeOOO(new self::C::•().m);
  self::takeOOI(new self::C::•().m);
  self::takeIDI(new self::C::•().m);
  self::takeDID(new self::C::•().m);
}
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 {}

constants  {
  #C1 = tearoff math::max
  #C2 = tearoff math::min
}
