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

import "org-dartlang-testcase:///multiple_augment_class.dart";
import "org-dartlang-testcase:///multiple_augment_class.dart";

class Class extends core::Object {
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  method /* from org-dartlang-testcase:///multiple_augment_class_lib1.dart */ method1() → core::int
    return 42;
  method /* from org-dartlang-testcase:///multiple_augment_class_lib2.dart */ method2() → core::int
    return 87;
  method /* from org-dartlang-testcase:///multiple_augment_class_lib2.dart */ method3() → core::int
    return 123;
}
static method main() → dynamic {
  self::Class c = new self::Class::•();
  self::expect(42, c.{self::Class::method1}(){() → core::int});
  self::expect(87, c.{self::Class::method2}(){() → core::int});
  self::expect(123, c.{self::Class::method3}(){() → core::int});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
    throw "Expected ${expected}, actual ${actual}";
  }
}
