public static ExecutionGraph execute(VirtualMachine vm, String className, String methodDescriptor, VMState state) { String methodSignature = className + "->" + methodDescriptor; ExecutionContext context = buildInitializedContext(vm, methodSignature, state); ExecutionGraph graph = null; try { graph = vm.execute(methodSignature, context); } catch (VirtualMachineException e) { e.printStackTrace(); } return graph; }
public static void testVisitation(String className, String methodSignature, int[] expectedAddresses) { testVisitation(className, methodSignature, new VMState(), expectedAddresses); }
@Test public void canGetShortValueOfShort() { short value = 5; initial.setRegisters(0, value, "S"); expected.setRegisters(0, value, CommonTypes.SHORT_OBJ); VMTester.test(CLASS_NAME, "shortValueOfShort()V", initial, expected); }
@Test public void canPutByte() { Byte value = 0xf; initial.setRegisters(0, new byte[1], "[B", 1, 0, "I", 2, value, "B"); expected.setRegisters(0, new byte[]{value}, "[B"); VMTester.test(CLASS_NAME, "putByte()V", initial, expected); }
@Test public void canPutChar() { initial.setRegisters(0, new char[1], "[C", 1, 0, "I", 2, '$', "C"); expected.setRegisters(0, new char[]{'$'}, "[C"); VMTester.test(CLASS_NAME, "putChar()V", initial, expected); }
@Test public void canPutCharFromInt() { initial.setRegisters(0, new char[1], "[C", 1, 0, "I", 2, (int) '$', "I"); expected.setRegisters(0, new char[]{'$'}, "[C"); VMTester.test(CLASS_NAME, "putChar()V", initial, expected); }
@Test public void canGetLengthForLongArray() { initial.setRegisters(0, new long[] { 1, 2, 3, 4 }, "[J"); expected.setRegisters(0, 4, "I"); VMTester.test(CLASS_NAME, "getLength()V", initial, expected); }
@Test public void canGetLengthForShortArray() { initial.setRegisters(0, new short[] { 1, 2 }, "[S"); expected.setRegisters(0, 2, "I"); VMTester.test(CLASS_NAME, "getLength()V", initial, expected); }
@Test public void canRemDouble2Addr() { initial.setRegisters(0, 22.9D, "D", 2, 0.5D, "D"); expected.setRegisters(0, 22.9D % 0.5D, "D"); VMTester.test(CLASS_NAME, "remDouble2Addr()V", initial, expected); }
@Test public void canSubFloat2Addr() { initial.setRegisters(0, 0.5F, "F", 1, 20.5F, "F"); expected.setRegisters(0, 0.5F - 20.5F, "F"); VMTester.test(CLASS_NAME, "subFloat2Addr()V", initial, expected); }
@Test public void canAndInt2Addr() { initial.setRegisters(0, 2, "I", 1, 7, "I"); expected.setRegisters(0, 2 & 7, "I"); VMTester.test(CLASS_NAME, "andInt2Addr()V", initial, expected); }
@Test public void canMulInt() { initial.setRegisters(0, -3, "I", 1, 7, "I"); expected.setRegisters(0, -3 * 7, "I"); VMTester.test(CLASS_NAME, "mulInt()V", initial, expected); }
@Test public void canRemInt() { initial.setRegisters(0, 7, "I", 1, 5, "I"); expected.setRegisters(0, 7 % 5, "I"); VMTester.test(CLASS_NAME, "remInt()V", initial, expected); }
@Test public void canRemIntLit8() { initial.setRegisters(0, 0x10, "I"); expected.setRegisters(0, 0x10 % 0xf, "I"); VMTester.test(CLASS_NAME, "remIntLit8()V", initial, expected); }
@Test public void canSubInt() { initial.setRegisters(0, -3, "I", 1, 7, "I"); expected.setRegisters(0, -3 - 7, "I"); VMTester.test(CLASS_NAME, "subInt()V", initial, expected); }
@Test public void canDivLong2Addr() { initial.setRegisters(0, 0x300000000L, "J", 2, 3L, "J"); expected.setRegisters(0, 0x300000000L / 3L, "J"); VMTester.test(CLASS_NAME, "divLong2Addr()V", initial, expected); }
@Test public void canSubLong2Addr() { initial.setRegisters(0, 0x100000000L, "J", 2, 0x200000000L, "J"); expected.setRegisters(0, 0x100000000L - 0x200000000L, "J"); VMTester.test(CLASS_NAME, "subLong2Addr()V", initial, expected); }