library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class Class1 extends core::Object {
  final field core::int field;
  constructor _(core::int field) → self::Class1
    ;
  static method _#_#tearOff(core::int field) → self::Class1
    return new self::Class1::_(field);
  static factory •([has-declared-initializer core::int field]) → self::Class1
    ;
  static method _#new#tearOff([has-declared-initializer core::int field]) → self::Class1
    return self::Class1::•(field);
}
class Class2 extends core::Object {
  final field core::int field;
  constructor _(core::int field) → self::Class2
    ;
  static method _#_#tearOff(core::int field) → self::Class2
    return new self::Class2::_(field);
  static factory •({has-declared-initializer core::int field}) → self::Class2
    ;
  static method _#new#tearOff({has-declared-initializer core::int field}) → self::Class2
    return self::Class2::•(field: field);
}
static final field core::bool inSoundMode;
static method main() → dynamic
  ;
static method testDefaultValues() → void
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f, {has-declared-initializer core::bool inSoundModeOnly}) → dynamic
  ;
