// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*element: Class1a.:static=[Object.(0)]*/
class Class1a<T> {
  /*element: Class1a.==:
   dynamic=[Class1a.runtimeType,Type.==,runtimeType],
   runtimeType=[equals:Class1a<Class1a.T>/dynamic]
  */
  bool operator ==(other) {
    return runtimeType == other.runtimeType;
  }
}

/*element: Class1b.:static=[Class1a.(0)]*/
class Class1b<T> extends Class1a<T> {
  /*element: Class1b.==:
   dynamic=[Class1b.runtimeType,Type.==,runtimeType],
   runtimeType=[equals:dynamic/Class1b<Class1b.T>]
  */
  bool operator ==(other) {
    return other.runtimeType == runtimeType;
  }
}

/*element: Class1c.:static=[Object.(0)]*/
class Class1c<T> implements Class1a<T> {
  /*element: Class1c.==:
   dynamic=[==,Class1c.runtimeType,Type.==,runtimeType],
   runtimeType=[equals:Class1c<Class1c.T>/dynamic],
   type=[inst:JSNull]
  */
  bool operator ==(other) {
    return runtimeType == other?.runtimeType;
  }
}

/*element: Class1d.:static=[Object.(0)]*/
class Class1d<T> implements Class1a<T> {
  /*element: Class1d.==:
   dynamic=[==,Class1d.runtimeType,Type.==,runtimeType],
   runtimeType=[equals:dynamic/Class1d<Class1d.T>],
   type=[inst:JSNull]
  */
  bool operator ==(other) {
    return other?.runtimeType == runtimeType;
  }
}

/*element: Class2.:static=[Object.(0)]*/
class Class2<T> {}

/*element: Class3.:static=[Object.(0)]*/
class Class3 {
  /*element: Class3.field:type=[inst:JSNull]*/
  var field;
}

/*element: Class4.:static=[Object.(0)]*/
class Class4 {}

/*element: toString1:
 dynamic=[Class2.runtimeType,toString(0)],
 runtimeType=[string:Class2<int>],
 static=[
  S,
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSString,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
toString1(Class2<int> c) => '${c.runtimeType}';

/*element: toString2:
 dynamic=[==,Class2.runtimeType,toString(0)],
 runtimeType=[string:Class2<int>],
 static=[
  S,
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSNull,
  inst:JSString,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
toString2(Class2<int> c) => '${c?.runtimeType}';

/*element: toString3:
 dynamic=[Class2.runtimeType,Type.toString(0)],
 runtimeType=[string:Class2<int>],
 static=[
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
toString3(Class2<int> c) => c.runtimeType.toString();

/*element: toString4:
 dynamic=[==,Class2.runtimeType,Type.toString(0)],
 runtimeType=[string:Class2<int>],
 static=[
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSNull,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
toString4(Class2<int> c) => c.runtimeType?.toString();

/*element: toString5:
 dynamic=[==,Class2.runtimeType,Type.toString(0)],
 runtimeType=[string:Class2<int>],
 static=[
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSNull,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
toString5(Class2<int> c) => c?.runtimeType?.toString();

/*element: toString6:
 dynamic=[==,Class2.runtimeType,Type.toString(0)],
 runtimeType=[string:Class2<int>],
 static=[
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSNull,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
toString6(Class2<int> c) => c?.runtimeType.toString();

/*element: unknown:
 dynamic=[Class2.runtimeType],
 runtimeType=[unknown:Class2<int>],
 static=[
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class2<int>]
*/
unknown(Class2<int> c) => c.runtimeType;

/*element: equals1:
 dynamic=[==,Class1a.runtimeType,Class1d.runtimeType,Type.==],
 runtimeType=[equals:Class1a<int>/Class1d<int>],
 static=[
  checkSubtype,
  getRuntimeTypeArgument,
  getRuntimeTypeArgumentIntercepted,
  getRuntimeTypeInfo,
  getTypeArgumentByIndex,
  setRuntimeTypeInfo],
 type=[
  inst:JSArray<dynamic>,
  inst:JSBool,
  inst:JSExtendableArray<dynamic>,
  inst:JSFixedArray<dynamic>,
  inst:JSMutableArray<dynamic>,
  inst:JSNull,
  inst:JSUnmodifiableArray<dynamic>,
  param:Class1a<int>,
  param:Class1d<int>]
*/
equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType;

/*element: almostEquals1:
 dynamic=[Class3.runtimeType,Type.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals1(Class3 a) => a.runtimeType == null;

/*element: almostEquals2:
 dynamic=[==,Class3.runtimeType,Type.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals2(Class3 a) => a?.runtimeType == null;

/*element: almostEquals3:
 dynamic=[Class3.runtimeType,Null.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals3(Class3 a) => null == a.runtimeType;

/*element: almostEquals4:
 dynamic=[==,Class3.runtimeType,Null.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals4(Class3 a) => null == a?.runtimeType;

/*element: almostEquals5:
 dynamic=[Class3.field,Class3.runtimeType,Type.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,param:Class3]
*/
almostEquals5(Class3 a) => a.runtimeType == a.field;

/*element: almostEquals6:
 dynamic=[==,Class3.field,Class3.runtimeType,Type.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals6(Class3 a) => a?.runtimeType == a.field;

/*element: almostEquals7:
 dynamic=[==,Class3.field,Class3.runtimeType,Type.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals7(Class3 a) => a.runtimeType == a?.field;

/*element: almostEquals8:
 dynamic=[==,Class3.field,Class3.runtimeType,Type.==],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals8(Class3 a) => a?.runtimeType == a?.field;

/*element: almostEquals9:
 dynamic=[==,Class3.field,Class3.runtimeType],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,param:Class3]
*/
almostEquals9(Class3 a) => a.field == a.runtimeType;

/*element: almostEquals10:
 dynamic=[==,Class3.field,Class3.runtimeType],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals10(Class3 a) => a?.field == a.runtimeType;

/*element: almostEquals11:
 dynamic=[==,Class3.field,Class3.runtimeType],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals11(Class3 a) => a.field == a?.runtimeType;

/*element: almostEquals12:
 dynamic=[==,Class3.field,Class3.runtimeType],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostEquals12(Class3 a) => a?.field == a?.runtimeType;

/*element: almostToString1:
 dynamic=[Class3.runtimeType,Type.toString],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,param:Class3]
*/
almostToString1(Class3 a) => a.runtimeType.toString;

/*element: almostToString2:
 dynamic=[==,Class3.runtimeType,Type.toString],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostToString2(Class3 a) => a?.runtimeType?.toString;

/*element: almostToString3:
 dynamic=[Class3.runtimeType,Type.noSuchMethod(1)],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostToString3(Class3 a) => a.runtimeType.noSuchMethod(null);

/*element: almostToString4:
 dynamic=[==,Class3.runtimeType,Type.noSuchMethod(1)],
 runtimeType=[unknown:Class3],
 type=[inst:JSBool,inst:JSNull,param:Class3]
*/
almostToString4(Class3 a) => a?.runtimeType.noSuchMethod(null);

/*element: notEquals1:
 dynamic=[Class3.runtimeType,Class4.runtimeType,Type.==],
 runtimeType=[equals:Class3/Class4],
 type=[inst:JSBool,param:Class3,param:Class4]
*/
notEquals1(Class3 a, Class4 b) => a.runtimeType != b.runtimeType;

/*element: notEquals2:
 dynamic=[==,Class3.runtimeType,Class4.runtimeType,Type.==],
 runtimeType=[equals:Class3/Class4],
 type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
*/
notEquals2(Class3 a, Class4 b) => a?.runtimeType != b.runtimeType;

/*element: notEquals3:
 dynamic=[==,Class3.runtimeType,Class4.runtimeType,Type.==],
 runtimeType=[equals:Class3/Class4],
 type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
*/
notEquals3(Class3 a, Class4 b) => a.runtimeType != b?.runtimeType;

/*element: notEquals4:
 dynamic=[==,Class3.runtimeType,Class4.runtimeType,Type.==],
 runtimeType=[equals:Class3/Class4],
 type=[inst:JSBool,inst:JSNull,param:Class3,param:Class4]
*/
notEquals4(Class3 a, Class4 b) => a?.runtimeType != b?.runtimeType;

/*element: main:
 dynamic=[Class1a.==],
 static=[
  Class1a.(0),
  Class1b.(0),
  Class1c.(0),
  Class1d.(0),
  Class2.(0),
  Class3.(0),
  Class4.(0),
  almostEquals1(1),
  almostEquals10(1),
  almostEquals11(1),
  almostEquals12(1),
  almostEquals2(1),
  almostEquals3(1),
  almostEquals4(1),
  almostEquals5(1),
  almostEquals6(1),
  almostEquals7(1),
  almostEquals8(1),
  almostEquals9(1),
  almostToString1(1),
  almostToString2(1),
  almostToString3(1),
  almostToString4(1),
  assertIsSubtype,
  equals1(2),
  notEquals1(2),
  notEquals2(2),
  notEquals3(2),
  notEquals4(2),
  print(1),
  throwTypeError,
  toString1(1),
  toString2(1),
  toString3(1),
  toString4(1),
  toString5(1),
  toString6(1),
  unknown(1)]
*/
main() {
  Class1a<int> c1a = new Class1a<int>();
  Class1b<int> c1b = new Class1b<int>();
  Class1c<int> c1c = new Class1c<int>();
  Class1d<int> c1d = new Class1d<int>();
  Class2<int> c2 = new Class2<int>();
  Class3 c3 = new Class3();
  Class4 c4 = new Class4();
  print(c1a == c1b);
  print(c1a == c1c);
  print(c1a == c1d);
  print(c1a == c2);
  toString1(c2);
  toString2(c2);
  toString3(c2);
  toString4(c2);
  toString5(c2);
  toString6(c2);
  unknown(c2);
  equals1(c1a, c1d);
  almostEquals1(c3);
  almostEquals2(c3);
  almostEquals3(c3);
  almostEquals4(c3);
  almostEquals5(c3);
  almostEquals6(c3);
  almostEquals7(c3);
  almostEquals8(c3);
  almostEquals9(c3);
  almostEquals10(c3);
  almostEquals11(c3);
  almostEquals12(c3);
  almostToString1(c3);
  almostToString2(c3);
  almostToString3(c3);
  almostToString4(c3);
  notEquals1(c3, c4);
  notEquals2(c3, c4);
  notEquals3(c3, c4);
  notEquals4(c3, c4);
}
