// 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.

// @dart = 2.9

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