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

abstract class Base<T extends core::Object = dynamic, U extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    ;
  operator [](core::String s) → self::Base::T
    ;
  operator []=(core::String s, self::Base::U v) → void
    ;
  abstract method getValue(core::String s) → self::Base::T;
  abstract method setValue(core::String s, self::Base::U v) → void;
}
abstract class Test1 extends self::Base<core::int, core::int> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test2 extends self::Base<core::int, core::num> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test3 extends self::Base<core::int, core::double> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test4 extends self::Base<core::num, core::int> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test5 extends self::Base<core::num, core::num> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test6 extends self::Base<core::num, core::double> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test7 extends self::Base<core::double, core::int> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test8 extends self::Base<core::double, core::num> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
abstract class Test9 extends self::Base<core::double, core::double> {
  synthetic constructor •() → void
    ;
  method test() → void
    ;
}
static method getInt() → core::int
  ;
static method getNum() → core::num
  ;
static method getDouble() → core::double
  ;
static method main() → dynamic
  ;
