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

import "package:expect/expect.dart";

class A {}

class B {}

main() {
  var a = new A();
  var b = new B();
  var f = () => null;
  var funcType = f.runtimeType;
  var classA = A;
  var classB = B;

  Expect.isTrue(a.runtimeType is Type);
  Expect.equals(A, a.runtimeType);
  Expect.notEquals(B, a.runtimeType);
  Expect.notEquals(A, b.runtimeType);

  Expect.isTrue(f.runtimeType is Type);
  Expect.isFalse(f.runtimeType == a.runtimeType);

  Expect.isTrue(classA.runtimeType is Type);
  Expect.isTrue(classA.runtimeType == classB.runtimeType);
  Expect.isFalse(classA.runtimeType == a.runtimeType);
  Expect.isFalse(classA.runtimeType == f.runtimeType);

  Expect.isTrue(funcType.runtimeType == classA.runtimeType);

  Expect.isTrue(null.runtimeType is Type);
  Expect.equals(Null, null.runtimeType);
}
