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

interface I { }

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