// 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 test program for the "is" type test operator.

// @dart = 2.9

import "package:expect/expect.dart";

abstract class I {}

abstract class AI implements I {}

class A implements AI {
  const A();
}

class B implements I {
  const B();
}

class C extends A {
  const C() : super();
}

class IsOperatorTest {
  static testMain() {
    var a = new A();
    var b = new B();
    var c = new C();
    var n = null;
    Expect.equals(true, a is A);
    Expect.equals(false, a is! A);
    Expect.equals(true, b is B);
    Expect.equals(false, b is! B);
    Expect.equals(true, c is C);
    Expect.equals(false, c is! C);
    Expect.equals(true, c is A);
    Expect.equals(false, c is! A);

    Expect.equals(true, a is AI);
    Expect.equals(false, a is! AI);
    Expect.equals(true, a is I);
    Expect.equals(false, a is! I);
    Expect.equals(false, b is AI);
    Expect.equals(true, b is! AI);
    Expect.equals(true, b is I);
    Expect.equals(false, b is! I);
    Expect.equals(true, c is AI);
    Expect.equals(false, c is! AI);
    Expect.equals(true, c is I);
    Expect.equals(false, c is! I);
    Expect.equals(false, n is AI);
    Expect.equals(true, n is! AI);
    Expect.equals(false, n is I);
    Expect.equals(true, n is! I);

    Expect.equals(false, a is B);
    Expect.equals(true, a is! B);
    Expect.equals(false, a is C);
    Expect.equals(true, a is! C);
    Expect.equals(false, b is A);
    Expect.equals(true, b is! A);
    Expect.equals(false, b is C);
    Expect.equals(true, b is! C);
    Expect.equals(false, c is B);
    Expect.equals(true, c is! B);
    Expect.equals(false, n is A);
    Expect.equals(true, n is! A);

    Expect.equals(false, null is A);
    Expect.equals(false, null is B);
    Expect.equals(false, null is C);
    Expect.equals(false, null is AI);
    Expect.equals(false, null is I);

    Expect.equals(true, null is! A);
    Expect.equals(true, null is! B);
    Expect.equals(true, null is! C);
    Expect.equals(true, null is! AI);
    Expect.equals(true, null is! I);
  }
}

main() {
  IsOperatorTest.testMain();
}
