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

class Foo extends core::Object {
  synthetic constructor •() → self::Foo
    : super core::Object::•()
    ;
  method foo(core::int x) → core::int
    return x;
}
static method test() → dynamic {
  dynamic d = new self::Foo::•();
  dynamic get_hashCode = d.hashCode;
  dynamic call_hashCode = d.hashCode();
  dynamic call_toString = d.toString();
  dynamic call_toStringArg = d.toString(color: "pink");
  dynamic call_foo0 = d.foo();
  dynamic call_foo1 = d.foo(1);
  dynamic call_foo2 = d.foo(1, 2);
  dynamic call_nsm0 = d.noSuchMethod();
  dynamic call_nsm1 = d.noSuchMethod(null);
  dynamic call_nsm2 = d.noSuchMethod(null, null);
  dynamic equals_self = d.==(d);
  dynamic equals_null = d.==(null);
  dynamic null_equals = null.==(d);
  dynamic not_equals_self = !d.==(d);
  dynamic not_equals_null = !d.==(null);
  dynamic null_not_equals = !null.==(d);
}
static method main() → dynamic {}
