// 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_assignable;

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_assignable);

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

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

  Expect.isTrue(Sub1.isAssignableTo(Super));
  Expect.isTrue(Super.isAssignableTo(Sub1));

  Expect.isTrue(Sub2.isAssignableTo(Super));
  Expect.isTrue(Super.isAssignableTo(Sub2));

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

  Expect.isTrue(Sub1.isAssignableTo(Obj));
  Expect.isTrue(Obj.isAssignableTo(Sub1));

  Expect.isTrue(Sub2.isAssignableTo(Obj));
  Expect.isTrue(Obj.isAssignableTo(Sub2));

  Expect.isTrue(Super.isAssignableTo(Obj));
  Expect.isTrue(Obj.isAssignableTo(Super));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  // Function typedef / function.
  Expect.isTrue(NumGen.isAssignableTo(NumGenRef));
  Expect.isTrue(IntGen.isAssignableTo(IntGenRef));
  Expect.isTrue(DubGen.isAssignableTo(DubGenRef));
  Expect.isTrue(NumGenRef.isAssignableTo(NumGen));
  Expect.isTrue(IntGenRef.isAssignableTo(IntGen));
  Expect.isTrue(DubGenRef.isAssignableTo(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.isAssignableTo(TFromA));
  Expect.isTrue(TFromB.isAssignableTo(TFromB));
  Expect.isTrue(TFromC.isAssignableTo(TFromC));

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

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

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

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

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

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