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

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