/* tests/jctest.java - checks most of the JVM instructions
- Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
- R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
- C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
+ Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
+ C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+ E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
TU Wien
This file is part of CACAO.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
- Contact: cacao@complang.tuwien.ac.at
+ Contact: cacao@cacaojvm.org
Authors: Reinhard Grafl
-
- Changes: Christian Thalinger
-
- $Id: jctest.java 3061 2005-07-19 08:52:11Z twisti $
+ Christian Thalinger
*/
testlong(0x3333,143444);
testlong(4444441,12342);
testlong(0x8000000000000000L,-1);
+ testlong(0x0000000080000000L,0x0000000080000000L);
p("------------------- test floats");
testfloat((float) 1,(float) 2.042);
// ****************** test type casts and array stores *********************
public static void testcasts() {
+ Object on = null;
Object o = new Object();
Object oi = new Integer(0);
+ Object[] ona = null;
Object[] oa = new Object [1];
Object[] oia = new Integer[1];
Integer i = new Integer(0);
p ("------------------- test casts");
+ p("null is instanceof Object: ", on instanceof Object);
p("Integer is instanceof Object: ", oi instanceof Object);
p("Integer is instanceof Integer: ", oi instanceof Integer);
p("Object is instanceof Integer: ", o instanceof Integer);
+ p("null is instanceof Object[]: ", on instanceof Object[]);
+ p("Integer[] is instanceof Object[]: ", oia instanceof Object[]);
+ p("Integer[] is instanceof Integer[]: ", oia instanceof Integer[]);
+ p("Object[] is instanceof Integer[]: ", oa instanceof Integer[]);
+
+ p("Integer is instanceof Object[]: ", oi instanceof Object[]);
+ p("Integer[] is instanceof Object: ", oia instanceof Object);
+ p("Integer is instanceof Integer[]: ", oi instanceof Integer[]);
+ p("Object is instanceof Integer[]: ", o instanceof Integer[]);
+
try {
p ("type cast check: Integer = Object(Integer)");
i = (Integer) oi;
}
p("successfully created");
} catch (Exception e) {
- p("error: exception thrown");
+ p("error: exception thrown: " + e);
}
iaaa = new int[2][3][4];
}
static public void testdivremconst(int a) {
+ p("IDIVPOW2 (" + a + " / 0x00000001): ", a / 0x00000001);
p("IDIVPOW2 (" + a + " / 0x00000002): ", a / 0x00000002);
p("IDIVPOW2 (" + a + " / 0x00000004): ", a / 0x00000004);
p("IDIVPOW2 (" + a + " / 0x00000008): ", a / 0x00000008);
p("IDIVPOW2 (" + a + " / 0x40000000): ", a / 0x40000000);
p("IDIVPOW2 (" + a + " / 0x80000000): ", a / 0x80000000);
+ p("IREMPOW2 (" + a + " % 0x00000001): ", a % 0x00000001);
p("IREMPOW2 (" + a + " % 0x00000002): ", a % 0x00000002);
p("IREMPOW2 (" + a + " % 0x00000004): ", a % 0x00000004);
p("IREMPOW2 (" + a + " % 0x00000008): ", a % 0x00000008);
}
static public void testdivremconst(long a) {
+ p("LDIVPOW2 (" + a + " / 0x00000001): ", a / 0x00000001);
p("LDIVPOW2 (" + a + " / 0x00000002): ", a / 0x00000002);
p("LDIVPOW2 (" + a + " / 0x00000004): ", a / 0x00000004);
p("LDIVPOW2 (" + a + " / 0x00000008): ", a / 0x00000008);
p("LDIVPOW2 (" + a + " / 0x40000000): ", a / 0x40000000);
p("LDIVPOW2 (" + a + " / 0x80000000): ", a / 0x80000000);
+ p("LREMPOW2 (" + a + " % 0x00000001): ", a % 0x00000001L);
p("LREMPOW2 (" + a + " % 0x00000002): ", a % 0x00000002L);
p("LREMPOW2 (" + a + " % 0x00000004): ", a % 0x00000004L);
p("LREMPOW2 (" + a + " % 0x00000008): ", a % 0x00000008L);
static public void testint(int a, int b) {
- p ("TESTINT CALLED WITH ", a);
- p (" AND ", b);
+ p("TESTINT called with ", a);
+ p(" AND ", b);
p("IADD: ", a+b);
p("ISUB: ", a-b);
p("INT2CHAR: ", (char) a);
p("INT2SHORT: ", (short) a);
- if (!(a==0)) p("not IFEQ");
- if (!(a!=0)) p("not IFNE");
- if (!(a<0)) p("not IFLT");
- if (!(a<=0)) p("not IFLE");
- if (!(a>0)) p("not IFGT");
- if (!(a>=0)) p("not IFGE");
-
- if (!(a==b)) p("not IF_ICMPEQ");
- if (!(a!=b)) p("not IF_ICMPNE");
- if (!(a<b)) p("not IF_ICMPLT");
- if (!(a<=b)) p("not IF_ICMPLE");
- if (!(a>b)) p("not IF_ICMPGT");
- if (!(a>=b)) p("not IF_ICMPGE");
+ if (!(a == 0)) p("not IFEQ");
+ if (!(a != 0)) p("not IFNE");
+ if (!(a < 0)) p("not IFLT");
+ if (!(a <= 0)) p("not IFLE");
+ if (!(a > 0)) p("not IFGT");
+ if (!(a >= 0)) p("not IFGE");
+
+ if (!(a == b)) p("not IF_ICMPEQ");
+ if (!(a != b)) p("not IF_ICMPNE");
+ if (!(a < b)) p("not IF_ICMPLT");
+ if (!(a <= b)) p("not IF_ICMPLE");
+ if (!(a > b)) p("not IF_ICMPGT");
+ if (!(a >= b)) p("not IF_ICMPGE");
p("COND_ICMPEQ " + a + " == 0: " + ((a == 0) ? 0 : 1));
p("COND_ICMPNE " + a + " != 0: " + ((a != 0) ? 0 : 1));
}
static public void testlong(long a, long b) {
- p ("TESTLONG called with ", a);
- p (" AND ", b);
+ p("TESTLONG called with ", a);
+ p(" AND ", b);
p("LADD: ", a + b);
p("LSUB: ", a - b);
p("LCMP a > b : ", a > b);
p("LCMP a >= b : ", a >= b);
- if ((a==b)) p("not IF_LCMPEQ");
- if ((a!=b)) p("not IF_LCMPNE");
- if ((a<b)) p("not IF_LCMPLT");
- if ((a<=b)) p("not IF_LCMPLE");
- if ((a>b)) p("not IF_LCMPGT");
- if ((a>=b)) p("not IF_LCMPGE");
+ if (!(a == 0)) p("not IF_LEQ");
+ if (!(a != 0)) p("not IF_LNE");
+ if (!(a < 0)) p("not IF_LLT");
+ if (!(a <= 0)) p("not IF_LLE");
+ if (!(a > 0)) p("not IF_LGT");
+ if (!(a >= 0)) p("not IF_LGE");
+
+ if (!(a == b)) p("not IF_LCMPEQ");
+ if (!(a != b)) p("not IF_LCMPNE");
+ if (!(a < b)) p("not IF_LCMPLT");
+ if (!(a <= b)) p("not IF_LCMPLE");
+ if (!(a > b)) p("not IF_LCMPGT");
+ if (!(a >= b)) p("not IF_LCMPGE");
}
static public void testfloat(float a, float b) {
- p ("TESTFLOAT called with ", a);
- p (" AND ", b);
+ p("TESTFLOAT called with ", a);
+ p(" AND ", b);
- p("FADD: ", a+b);
- p("FSUB: ", a-b);
- p("FMUL: ", a*b);
- p("FDIV: ", a/b);
- p("FREM: ", a%b);
+ p("FADD: ", a + b);
+ p("FSUB: ", a - b);
+ p("FMUL: ", a * b);
+ p("FDIV: ", a / b);
+ p("FREM: ", a % b);
p("F2I: ", (int) a);
p("F2L: ", (long) a);
p("F2D: ", (double) a);
- if ((a==b)) p("FCMP a=b");
- if ((a!=b)) p("FCMP a!=b");
- if ((a<b)) p("FCMP a<b");
- if ((a<=b)) p("FCMP a<=b");
- if ((a>b)) p("FCMP a>b");
- if ((a>=b)) p("FCMP a>=b");
+ if ((a == b)) p("FCMP a == b");
+ if ((a != b)) p("FCMP a != b");
+ if ((a < b)) p("FCMP a < b");
+ if ((a <= b)) p("FCMP a <= b");
+ if ((a > b)) p("FCMP a > b");
+ if ((a >= b)) p("FCMP a >= b");
}
static public void testdouble(double a, double b) {
- p ("TESTDOUBLE called with ", a);
- p (" AND ", b);
+ p("TESTDOUBLE called with ", a);
+ p(" AND ", b);
- p("DADD: ", a+b);
- p("DSUB: ", a-b);
- p("DMUL: ", a*b);
- p("DDIV: ", a/b);
- p("DREM: ", a%b);
+ p("DADD: ", a + b);
+ p("DSUB: ", a - b);
+ p("DMUL: ", a * b);
+ p("DDIV: ", a / b);
+ p("DREM: ", a % b);
p("D2I: ", (int) a);
p("D2L: ", (long) a);
p("D2F: ", (float) a);
- if ((a==b)) p("DCMP a=b");
- if ((a!=b)) p("DCMP a!=b");
- if ((a<b)) p("DCMP a<b");
- if ((a<=b)) p("DCMP a<=b");
- if ((a>b)) p("DCMP a>b");
- if ((a>=b)) p("DCMP a>=b");
+ if ((a == b)) p("DCMP a == b");
+ if ((a != b)) p("DCMP a != b");
+ if ((a < b)) p("DCMP a < b");
+ if ((a <= b)) p("DCMP a <= b");
+ if ((a > b)) p("DCMP a > b");
+ if ((a >= b)) p("DCMP a >= b");
}
}
public static void p(String a) { System.out.print(a); pnl(); }
- public static void p(boolean a) {System.out.print(a);
- pnl(); }
- public static void p(int a) { System.out.print ("int: ");
- System.out.print(a);
- pnl(); }
- public static void p(long a) { System.out.print ("long: ");
- System.out.print(a);
- pnl(); }
- public static void p(short a) { System.out.print ("short: ");
- System.out.print(a);
- pnl(); }
- public static void p(byte a) { System.out.print ("byte: ");
- System.out.print(a);
- pnl(); }
- public static void p(char a) { System.out.print ("char: ");
- System.out.print((int) a);
- pnl(); }
- public static void p(float a) { System.out.print ("float: ");
- System.out.print ( java.lang.Float.floatToIntBits(a) );
- pnl(); }
- public static void p(double a) { System.out.print ("double: ");
- System.out.print( java.lang.Double.doubleToLongBits(a) );
- pnl(); }
+
+ public static void p(boolean a) {
+ System.out.print(a);
+ pnl();
+ }
+
+ public static void p(byte a) {
+ System.out.print("byte: ");
+ System.out.print(a);
+ System.out.print(" (0x");
+ System.out.print(Integer.toHexString(a));
+ System.out.print(")");
+ pnl();
+ }
+
+ public static void p(char a) {
+ System.out.print("char: ");
+ System.out.print((int) a);
+ System.out.print(" (0x");
+ System.out.print(Integer.toHexString((int) a));
+ System.out.print(")");
+ pnl();
+ }
+
+ public static void p(short a) {
+ System.out.print("short: ");
+ System.out.print(a);
+ System.out.print(" (0x");
+ System.out.print(Integer.toHexString(a));
+ System.out.print(")");
+ pnl();
+ }
+
+ public static void p(int a) {
+ System.out.print ("int: ");
+ System.out.print(a);
+ System.out.print(" (0x");
+ System.out.print(Integer.toHexString(a));
+ System.out.print(")");
+ pnl();
+ }
+
+ public static void p(long a) {
+ System.out.print ("long: ");
+ System.out.print(a);
+ System.out.print(" (0x");
+ System.out.print(Long.toHexString(a));
+ System.out.print(")");
+ pnl();
+ }
+
+ public static void p(float a) {
+ int i = Float.floatToIntBits(a);
+ System.out.print("float: ");
+ System.out.print(i);
+ System.out.print(" (0x");
+ System.out.print(Integer.toHexString(i));
+ System.out.print(")");
+ pnl();
+ }
+
+ public static void p(double a) {
+ long l = Double.doubleToLongBits(a);
+ System.out.print("double: ");
+ System.out.print(l);
+ System.out.print(" (0x");
+ System.out.print(Long.toHexString(l));
+ System.out.print(")");
+ pnl();
+ }
public static void p(String s,boolean i) {
System.out.print(s); p(i);