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

import "dart: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 {}
