// Copyright (c) 2014, 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.

library test.relation_subtype;

@MirrorsUsed(targets: "test.relation_subtype")
import "dart:mirrors";

import "package:expect/expect.dart";

class Superclass {}

class Subclass1 extends Superclass {}

class Subclass2 extends Superclass {}

typedef bool NumberPredicate(num x);
typedef bool IntegerPredicate(int x);
typedef bool DoublePredicate(double x);

typedef num NumberGenerator();
typedef int IntegerGenerator();
typedef double DoubleGenerator();

class A<T> {}

class B<T> extends A<T> {}

class C<T extends num> {}

test(MirrorSystem mirrors) {
  LibraryMirror coreLibrary = mirrors.findLibrary(#dart.core);
  LibraryMirror thisLibrary = mirrors.findLibrary(#test.relation_subtype);

  // Classes.
  TypeMirror Super = thisLibrary.declarations[#Superclass];
  TypeMirror Sub1 = thisLibrary.declarations[#Subclass1];
  TypeMirror Sub2 = thisLibrary.declarations[#Subclass2];
  TypeMirror Obj = coreLibrary.declarations[#Object];
  TypeMirror Nul = coreLibrary.declarations[#Null];

  Expect.isTrue(Obj.isSubtypeOf(Obj));
  Expect.isTrue(Super.isSubtypeOf(Super));
  Expect.isTrue(Sub1.isSubtypeOf(Sub1));
  Expect.isTrue(Sub2.isSubtypeOf(Sub2));
  Expect.isTrue(Nul.isSubtypeOf(Nul));

  Expect.isTrue(Sub1.isSubtypeOf(Super));
  Expect.isFalse(Super.isSubtypeOf(Sub1));

  Expect.isTrue(Sub2.isSubtypeOf(Super));
  Expect.isFalse(Super.isSubtypeOf(Sub2));

  Expect.isFalse(Sub2.isSubtypeOf(Sub1));
  Expect.isFalse(Sub1.isSubtypeOf(Sub2));

  Expect.isTrue(Sub1.isSubtypeOf(Obj));
  Expect.isFalse(Obj.isSubtypeOf(Sub1));

  Expect.isTrue(Sub2.isSubtypeOf(Obj));
  Expect.isFalse(Obj.isSubtypeOf(Sub2));

  Expect.isTrue(Super.isSubtypeOf(Obj));
  Expect.isFalse(Obj.isSubtypeOf(Super));

  Expect.isTrue(Nul.isSubtypeOf(Obj));
  Expect.isFalse(Obj.isSubtypeOf(Nul));
  Expect.isTrue(Nul.isSubtypeOf(Super)); // Null type is bottom type.
  Expect.isFalse(Super.isSubtypeOf(Nul));

  // Function typedef - argument type.
  TypeMirror Func = coreLibrary.declarations[#Function];
  TypedefMirror NumPred = thisLibrary.declarations[#NumberPredicate];
  TypedefMirror IntPred = thisLibrary.declarations[#IntegerPredicate];
  TypedefMirror DubPred = thisLibrary.declarations[#DoublePredicate];

  Expect.isTrue(Func.isSubtypeOf(Func));
  Expect.isTrue(NumPred.isSubtypeOf(NumPred));
  Expect.isTrue(IntPred.isSubtypeOf(IntPred));
  Expect.isTrue(DubPred.isSubtypeOf(DubPred));

  Expect.isTrue(NumPred.isSubtypeOf(Func));
  Expect.isTrue(NumPred.isSubtypeOf(IntPred));
  Expect.isTrue(NumPred.isSubtypeOf(DubPred));

  Expect.isTrue(IntPred.isSubtypeOf(Func));
  Expect.isTrue(IntPred.isSubtypeOf(NumPred));
  Expect.isFalse(IntPred.isSubtypeOf(DubPred));

  Expect.isTrue(DubPred.isSubtypeOf(Func));
  Expect.isTrue(DubPred.isSubtypeOf(NumPred));
  Expect.isFalse(DubPred.isSubtypeOf(IntPred));

  Expect.isTrue(Func.isSubtypeOf(Obj));
  Expect.isTrue(NumPred.isSubtypeOf(Obj));
  Expect.isTrue(IntPred.isSubtypeOf(Obj));
  Expect.isTrue(DubPred.isSubtypeOf(Obj));

  // Function typedef - return type.
  TypedefMirror NumGen = thisLibrary.declarations[#NumberGenerator];
  TypedefMirror IntGen = thisLibrary.declarations[#IntegerGenerator];
  TypedefMirror DubGen = thisLibrary.declarations[#DoubleGenerator];

  Expect.isTrue(NumGen.isSubtypeOf(NumGen));
  Expect.isTrue(IntGen.isSubtypeOf(IntGen));
  Expect.isTrue(DubGen.isSubtypeOf(DubGen));

  Expect.isTrue(NumGen.isSubtypeOf(Func));
  Expect.isTrue(NumGen.isSubtypeOf(IntGen));
  Expect.isTrue(NumGen.isSubtypeOf(DubGen));

  Expect.isTrue(IntGen.isSubtypeOf(Func));
  Expect.isTrue(IntGen.isSubtypeOf(NumGen));
  Expect.isFalse(IntGen.isSubtypeOf(DubGen));

  Expect.isTrue(DubGen.isSubtypeOf(Func));
  Expect.isTrue(DubGen.isSubtypeOf(NumGen));
  Expect.isFalse(DubGen.isSubtypeOf(IntGen));

  Expect.isTrue(Func.isSubtypeOf(Obj));
  Expect.isTrue(NumGen.isSubtypeOf(Obj));
  Expect.isTrue(IntGen.isSubtypeOf(Obj));
  Expect.isTrue(DubGen.isSubtypeOf(Obj));

  // Function - argument type.
  TypeMirror NumPredRef = NumPred.referent;
  TypeMirror IntPredRef = IntPred.referent;
  TypeMirror DubPredRef = DubPred.referent;

  Expect.isTrue(Func.isSubtypeOf(Func));
  Expect.isTrue(NumPredRef.isSubtypeOf(NumPredRef));
  Expect.isTrue(IntPredRef.isSubtypeOf(IntPredRef));
  Expect.isTrue(DubPredRef.isSubtypeOf(DubPredRef));

  Expect.isTrue(NumPredRef.isSubtypeOf(Func));
  Expect.isTrue(NumPredRef.isSubtypeOf(IntPredRef));
  Expect.isTrue(NumPredRef.isSubtypeOf(DubPredRef));

  Expect.isTrue(IntPredRef.isSubtypeOf(Func));
  Expect.isTrue(IntPredRef.isSubtypeOf(NumPredRef));
  Expect.isFalse(IntPredRef.isSubtypeOf(DubPredRef));

  Expect.isTrue(DubPredRef.isSubtypeOf(Func));
  Expect.isTrue(DubPredRef.isSubtypeOf(NumPredRef));
  Expect.isFalse(DubPredRef.isSubtypeOf(IntPredRef));

  Expect.isTrue(Func.isSubtypeOf(Obj));
  Expect.isTrue(NumPredRef.isSubtypeOf(Obj));
  Expect.isTrue(IntPredRef.isSubtypeOf(Obj));
  Expect.isTrue(DubPredRef.isSubtypeOf(Obj));

  // Function - return type.
  TypeMirror NumGenRef = NumGen.referent;
  TypeMirror IntGenRef = IntGen.referent;
  TypeMirror DubGenRef = DubGen.referent;

  Expect.isTrue(NumGenRef.isSubtypeOf(NumGenRef));
  Expect.isTrue(IntGenRef.isSubtypeOf(IntGenRef));
  Expect.isTrue(DubGenRef.isSubtypeOf(DubGenRef));

  Expect.isTrue(NumGenRef.isSubtypeOf(Func));
  Expect.isTrue(NumGenRef.isSubtypeOf(IntGenRef));
  Expect.isTrue(NumGenRef.isSubtypeOf(DubGenRef));

  Expect.isTrue(IntGenRef.isSubtypeOf(Func));
  Expect.isTrue(IntGenRef.isSubtypeOf(NumGenRef));
  Expect.isFalse(IntGenRef.isSubtypeOf(DubGenRef));

  Expect.isTrue(DubGenRef.isSubtypeOf(Func));
  Expect.isTrue(DubGenRef.isSubtypeOf(NumGenRef));
  Expect.isFalse(DubGenRef.isSubtypeOf(IntGenRef));

  Expect.isTrue(Func.isSubtypeOf(Obj));
  Expect.isTrue(NumGenRef.isSubtypeOf(Obj));
  Expect.isTrue(IntGenRef.isSubtypeOf(Obj));
  Expect.isTrue(DubGenRef.isSubtypeOf(Obj));

  // Function typedef / function.
  Expect.isTrue(NumPred.isSubtypeOf(NumPredRef));
  Expect.isTrue(IntPred.isSubtypeOf(IntPredRef));
  Expect.isTrue(DubPred.isSubtypeOf(DubPredRef));
  Expect.isTrue(NumPredRef.isSubtypeOf(NumPred));
  Expect.isTrue(IntPredRef.isSubtypeOf(IntPred));
  Expect.isTrue(DubPredRef.isSubtypeOf(DubPred));

  // Function typedef / function.
  Expect.isTrue(NumGen.isSubtypeOf(NumGenRef));
  Expect.isTrue(IntGen.isSubtypeOf(IntGenRef));
  Expect.isTrue(DubGen.isSubtypeOf(DubGenRef));
  Expect.isTrue(NumGenRef.isSubtypeOf(NumGen));
  Expect.isTrue(IntGenRef.isSubtypeOf(IntGen));
  Expect.isTrue(DubGenRef.isSubtypeOf(DubGen));

  // Type variable.
  TypeMirror TFromA =
      (thisLibrary.declarations[#A] as ClassMirror).typeVariables.single;
  TypeMirror TFromB =
      (thisLibrary.declarations[#B] as ClassMirror).typeVariables.single;
  TypeMirror TFromC =
      (thisLibrary.declarations[#C] as ClassMirror).typeVariables.single;

  Expect.isTrue(TFromA.isSubtypeOf(TFromA));
  Expect.isTrue(TFromB.isSubtypeOf(TFromB));
  Expect.isTrue(TFromC.isSubtypeOf(TFromC));

  Expect.isFalse(TFromA.isSubtypeOf(TFromB));
  Expect.isFalse(TFromA.isSubtypeOf(TFromC));
  Expect.isFalse(TFromB.isSubtypeOf(TFromA));
  Expect.isFalse(TFromB.isSubtypeOf(TFromC));
  Expect.isFalse(TFromC.isSubtypeOf(TFromA));
  Expect.isFalse(TFromC.isSubtypeOf(TFromB));

  TypeMirror Num = coreLibrary.declarations[#num];
  Expect.isTrue(TFromC.isSubtypeOf(Num));
  Expect.isFalse(Num.isSubtypeOf(TFromC));

  // dynamic & void.
  TypeMirror Dynamic = mirrors.dynamicType;
  Expect.isTrue(Dynamic.isSubtypeOf(Dynamic));
  Expect.isTrue(Obj.isSubtypeOf(Dynamic));
  Expect.isTrue(Super.isSubtypeOf(Dynamic));
  Expect.isTrue(Sub1.isSubtypeOf(Dynamic));
  Expect.isTrue(Sub2.isSubtypeOf(Dynamic));
  Expect.isTrue(NumPred.isSubtypeOf(Dynamic));
  Expect.isTrue(IntPred.isSubtypeOf(Dynamic));
  Expect.isTrue(DubPred.isSubtypeOf(Dynamic));
  Expect.isTrue(NumPredRef.isSubtypeOf(Dynamic));
  Expect.isTrue(IntPredRef.isSubtypeOf(Dynamic));
  Expect.isTrue(DubPredRef.isSubtypeOf(Dynamic));
  Expect.isTrue(NumGen.isSubtypeOf(Dynamic));
  Expect.isTrue(IntGen.isSubtypeOf(Dynamic));
  Expect.isTrue(DubGen.isSubtypeOf(Dynamic));
  Expect.isTrue(NumGenRef.isSubtypeOf(Dynamic));
  Expect.isTrue(IntGenRef.isSubtypeOf(Dynamic));
  Expect.isTrue(DubGenRef.isSubtypeOf(Dynamic));
  Expect.isTrue(TFromA.isSubtypeOf(Dynamic));
  Expect.isTrue(TFromB.isSubtypeOf(Dynamic));
  Expect.isTrue(TFromC.isSubtypeOf(Dynamic));
  Expect.isTrue(Dynamic.isSubtypeOf(Obj));
  Expect.isTrue(Dynamic.isSubtypeOf(Super));
  Expect.isTrue(Dynamic.isSubtypeOf(Sub1));
  Expect.isTrue(Dynamic.isSubtypeOf(Sub2));
  Expect.isTrue(Dynamic.isSubtypeOf(NumPred));
  Expect.isTrue(Dynamic.isSubtypeOf(IntPred));
  Expect.isTrue(Dynamic.isSubtypeOf(DubPred));
  Expect.isTrue(Dynamic.isSubtypeOf(NumPredRef));
  Expect.isTrue(Dynamic.isSubtypeOf(IntPredRef));
  Expect.isTrue(Dynamic.isSubtypeOf(DubPredRef));
  Expect.isTrue(Dynamic.isSubtypeOf(NumGen));
  Expect.isTrue(Dynamic.isSubtypeOf(IntGen));
  Expect.isTrue(Dynamic.isSubtypeOf(DubGen));
  Expect.isTrue(Dynamic.isSubtypeOf(NumGenRef));
  Expect.isTrue(Dynamic.isSubtypeOf(IntGenRef));
  Expect.isTrue(Dynamic.isSubtypeOf(DubGenRef));
  Expect.isTrue(Dynamic.isSubtypeOf(TFromA));
  Expect.isTrue(Dynamic.isSubtypeOf(TFromB));
  Expect.isTrue(Dynamic.isSubtypeOf(TFromC));

  TypeMirror Void = mirrors.voidType;
  Expect.isTrue(Void.isSubtypeOf(Void));
  Expect.isFalse(Obj.isSubtypeOf(Void));
  Expect.isFalse(Super.isSubtypeOf(Void));
  Expect.isFalse(Sub1.isSubtypeOf(Void));
  Expect.isFalse(Sub2.isSubtypeOf(Void));
  Expect.isFalse(NumPred.isSubtypeOf(Void));
  Expect.isFalse(IntPred.isSubtypeOf(Void));
  Expect.isFalse(DubPred.isSubtypeOf(Void));
  Expect.isFalse(NumPredRef.isSubtypeOf(Void));
  Expect.isFalse(IntPredRef.isSubtypeOf(Void));
  Expect.isFalse(DubPredRef.isSubtypeOf(Void));
  Expect.isFalse(NumGen.isSubtypeOf(Void));
  Expect.isFalse(IntGen.isSubtypeOf(Void));
  Expect.isFalse(DubGen.isSubtypeOf(Void));
  Expect.isFalse(NumGenRef.isSubtypeOf(Void));
  Expect.isFalse(IntGenRef.isSubtypeOf(Void));
  Expect.isFalse(DubGenRef.isSubtypeOf(Void));
  Expect.isFalse(TFromA.isSubtypeOf(Void));
  Expect.isFalse(TFromB.isSubtypeOf(Void));
  Expect.isFalse(TFromC.isSubtypeOf(Void));
  Expect.isFalse(Void.isSubtypeOf(Obj));
  Expect.isFalse(Void.isSubtypeOf(Super));
  Expect.isFalse(Void.isSubtypeOf(Sub1));
  Expect.isFalse(Void.isSubtypeOf(Sub2));
  Expect.isFalse(Void.isSubtypeOf(NumPred));
  Expect.isFalse(Void.isSubtypeOf(IntPred));
  Expect.isFalse(Void.isSubtypeOf(DubPred));
  Expect.isFalse(Void.isSubtypeOf(NumPredRef));
  Expect.isFalse(Void.isSubtypeOf(IntPredRef));
  Expect.isFalse(Void.isSubtypeOf(DubPredRef));
  Expect.isFalse(Void.isSubtypeOf(NumGen));
  Expect.isFalse(Void.isSubtypeOf(IntGen));
  Expect.isFalse(Void.isSubtypeOf(DubGen));
  Expect.isFalse(Void.isSubtypeOf(NumGenRef));
  Expect.isFalse(Void.isSubtypeOf(IntGenRef));
  Expect.isFalse(Void.isSubtypeOf(DubGenRef));
  Expect.isFalse(Void.isSubtypeOf(TFromA));
  Expect.isFalse(Void.isSubtypeOf(TFromB));
  Expect.isFalse(Void.isSubtypeOf(TFromC));

  Expect.isTrue(Dynamic.isSubtypeOf(Void));
  Expect.isTrue(Void.isSubtypeOf(Dynamic));
}

main() {
  test(currentMirrorSystem());
}
