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

static method printInt(core::int x) → void
  return core::print(x);
static method printDouble(core::double x) → void
  return core::print(x);
static method myMax(core::num x, core::num y) → core::num
  return math::max<dynamic>(x, y);
static method f() → dynamic {
  self::printInt(math::max<dynamic>(1, 2));
  self::printInt(math::min<dynamic>(1, 2));
  self::printDouble(math::max<dynamic>(1.0, 2.0));
  self::printDouble(math::min<dynamic>(1.0, 2.0));
  self::printInt(self::myMax(1, 2));
  self::printInt(self::myMax(1, 2) as core::int);
  self::printInt(math::max<dynamic>(1, 2.0));
  self::printInt(math::min<dynamic>(1, 2.0));
  self::printDouble(math::max<dynamic>(1, 2.0));
  self::printDouble(math::min<dynamic>(1, 2.0));
  self::printInt(math::min<dynamic>("hi", "there"));
}
static method main() → dynamic {}
