/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package test.org.jikesrvm.basic.core.bytecode;
import java.io.Serializable;
class TestInstanceOf {
static class Science {}
static class Magic extends Science {}
public static void main(String[] args) {
runTest("Magic()", new Magic());
runTest("Magic[2]", new Magic[2]);
runTest("Object[][]{new Magic[4],new Magic[4]}", new Object[][]{new Magic[4], new Magic[4]});
runTest("Magic[][]{new Magic[4],new Magic[4]}", new Magic[][]{new Magic[4], new Magic[4]});
runTest("int[2]", new int[2]);
}
private static void runTest(final String name, final Object x3) {
System.out.println("Testing " + name + " - instanceof: ");
testInstanceOf(x3);
System.out.println(" casts: ");
testCasts(x3);
System.out.println();
}
@SuppressWarnings({"UnusedDeclaration", "RedundantCast"})
private static void testCasts(final Object x) {
try { final Object o = (Object) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Science o = (Science) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Magic o = (Magic) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Object[] o = (Object[]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Magic[] o = (Magic[]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Science[] o = (Science[]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Object[][] o = (Object[][]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Magic[][] o = (Magic[][]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Science[][] o = (Science[][]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final int[] o = (int[]) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Serializable o = (Serializable) x; success(); } catch (final ClassCastException cce) { failure(); }
try { final Cloneable o = (Cloneable) x; success(); } catch (final ClassCastException cce) { failure(); }
}
private static void failure() {System.out.print("0");}
private static void success() {System.out.print("1");}
@SuppressWarnings({"ConstantConditions"})
private static void testInstanceOf(final Object x) {
io(Object.class, (x instanceof Object));
io(Science.class, (x instanceof Science));
io(Magic.class, (x instanceof Magic));
io(Object[].class, (x instanceof Object[]));
io(Science[].class, (x instanceof Science[]));
io(Magic[].class, (x instanceof Magic[]));
io(Object[][].class, (x instanceof Object[][]));
io(Science[][].class, (x instanceof Science[][]));
io(Magic[][].class, (x instanceof Magic[][]));
io(int[].class, (x instanceof int[]));
io(Serializable.class, (x instanceof Serializable));
io(Cloneable.class, (x instanceof Cloneable));
}
@SuppressWarnings({"UnusedDeclaration"})
private static void io(final Class type, final boolean test) {
System.out.print(test ? "1" : "0");
}
}