List of usage examples for org.objectweb.asm Opcodes IF_ICMPLT
int IF_ICMPLT
To view the source code for org.objectweb.asm Opcodes IF_ICMPLT.
Click Source Link
From source file:org.evosuite.instrumentation.ArrayAllocationLimitMethodAdapter.java
License:Open Source License
/** {@inheritDoc} */ @Override/*ww w . j a va2 s .c o m*/ public void visitTypeInsn(int opcode, String type) { if (opcode == Opcodes.ANEWARRAY) { Label origTarget = new Label(); visitInsn(Opcodes.DUP); visitFieldInsn(Opcodes.GETSTATIC, PackageInfo.getNameWithSlash(org.evosuite.Properties.class), "ARRAY_LIMIT", "I"); super.visitJumpInsn(Opcodes.IF_ICMPLT, origTarget); super.visitTypeInsn(Opcodes.NEW, PackageInfo.getNameWithSlash(TestCaseExecutor.TimeoutExceeded.class)); super.visitInsn(Opcodes.DUP); super.visitMethodInsn(Opcodes.INVOKESPECIAL, PackageInfo.getNameWithSlash(TestCaseExecutor.TimeoutExceeded.class), "<init>", "()V", false); super.visitInsn(Opcodes.ATHROW); super.visitLabel(origTarget); } super.visitTypeInsn(opcode, type); }
From source file:org.evosuite.instrumentation.coverage.BranchInstrumentation.java
License:Open Source License
/** * <p>/*from w w w . j a va2s .c om*/ * getInstrumentation * </p> * * @param instruction * a {@link org.evosuite.graphs.cfg.BytecodeInstruction} object. * @return a {@link org.objectweb.asm.tree.InsnList} object. */ protected InsnList getInstrumentation(BytecodeInstruction instruction) { if (instruction == null) throw new IllegalArgumentException("null given"); if (!instruction.isActualBranch()) throw new IllegalArgumentException("branch instruction expected"); if (!BranchPool.getInstance(classLoader).isKnownAsNormalBranchInstruction(instruction)) throw new IllegalArgumentException( "expect given instruction to be known by the BranchPool as a normal branch instruction"); int opcode = instruction.getASMNode().getOpcode(); int instructionId = instruction.getInstructionId(); int branchId = BranchPool.getInstance(classLoader).getActualBranchIdForNormalBranchInstruction(instruction); if (branchId < 0) throw new IllegalStateException("expect BranchPool to know branchId for all branch instructions"); InsnList instrumentation = new InsnList(); switch (opcode) { case Opcodes.IFEQ: case Opcodes.IFNE: case Opcodes.IFLT: case Opcodes.IFGE: case Opcodes.IFGT: case Opcodes.IFLE: instrumentation.add(new InsnNode(Opcodes.DUP)); instrumentation.add(new LdcInsnNode(opcode)); // instrumentation.add(new LdcInsnNode(id)); instrumentation.add(new LdcInsnNode(branchId)); instrumentation.add(new LdcInsnNode(instructionId)); instrumentation.add( new MethodInsnNode(Opcodes.INVOKESTATIC, EXECUTION_TRACER, "passedBranch", "(IIII)V", false)); logger.debug("Adding passedBranch val=?, opcode=" + opcode + ", branch=" + branchId + ", bytecode_id=" + instructionId); break; case Opcodes.IF_ICMPEQ: case Opcodes.IF_ICMPNE: case Opcodes.IF_ICMPLT: case Opcodes.IF_ICMPGE: case Opcodes.IF_ICMPGT: case Opcodes.IF_ICMPLE: instrumentation.add(new InsnNode(Opcodes.DUP2)); instrumentation.add(new LdcInsnNode(opcode)); // instrumentation.add(new LdcInsnNode(id)); instrumentation.add(new LdcInsnNode(branchId)); instrumentation.add(new LdcInsnNode(instructionId)); instrumentation.add( new MethodInsnNode(Opcodes.INVOKESTATIC, EXECUTION_TRACER, "passedBranch", "(IIIII)V", false)); break; case Opcodes.IF_ACMPEQ: case Opcodes.IF_ACMPNE: instrumentation.add(new InsnNode(Opcodes.DUP2)); instrumentation.add(new LdcInsnNode(opcode)); // instrumentation.add(new LdcInsnNode(id)); instrumentation.add(new LdcInsnNode(branchId)); instrumentation.add(new LdcInsnNode(instructionId)); instrumentation.add(new MethodInsnNode(Opcodes.INVOKESTATIC, EXECUTION_TRACER, "passedBranch", "(Ljava/lang/Object;Ljava/lang/Object;III)V", false)); break; case Opcodes.IFNULL: case Opcodes.IFNONNULL: instrumentation.add(new InsnNode(Opcodes.DUP)); instrumentation.add(new LdcInsnNode(opcode)); // instrumentation.add(new LdcInsnNode(id)); instrumentation.add(new LdcInsnNode(branchId)); instrumentation.add(new LdcInsnNode(instructionId)); instrumentation.add(new MethodInsnNode(Opcodes.INVOKESTATIC, EXECUTION_TRACER, "passedBranch", "(Ljava/lang/Object;III)V", false)); break; } return instrumentation; }
From source file:org.evosuite.instrumentation.error.ArrayInstrumentation.java
License:Open Source License
@Override public void visitInsn(int opcode) { // Check array accesses if (opcode == Opcodes.IALOAD || opcode == Opcodes.BALOAD || opcode == Opcodes.CALOAD || opcode == Opcodes.SALOAD || opcode == Opcodes.LALOAD || opcode == Opcodes.FALOAD || opcode == Opcodes.DALOAD || opcode == Opcodes.AALOAD) { mv.visitInsn(Opcodes.DUP);/*from w w w.j a v a 2 s . co m*/ insertBranch(Opcodes.IFGE, "java/lang/ArrayIndexOutOfBoundsException"); mv.visitInsn(Opcodes.DUP2); mv.visitInsn(Opcodes.SWAP); //mv.visitInsn(Opcodes.POP); mv.visitInsn(Opcodes.ARRAYLENGTH); insertBranch(Opcodes.IF_ICMPLT, "java/lang/ArrayIndexOutOfBoundsException"); } else if (opcode == Opcodes.IASTORE || opcode == Opcodes.BASTORE || opcode == Opcodes.CASTORE || opcode == Opcodes.SASTORE || opcode == Opcodes.AASTORE || opcode == Opcodes.LASTORE || opcode == Opcodes.FASTORE || opcode == Opcodes.DASTORE) { int loc = 0; if (opcode == Opcodes.IASTORE) loc = mv.newLocal(Type.INT_TYPE); else if (opcode == Opcodes.BASTORE) loc = mv.newLocal(Type.BYTE_TYPE); else if (opcode == Opcodes.CASTORE) loc = mv.newLocal(Type.CHAR_TYPE); else if (opcode == Opcodes.SASTORE) loc = mv.newLocal(Type.SHORT_TYPE); else if (opcode == Opcodes.AASTORE) loc = mv.newLocal(Type.getType(Object.class)); else if (opcode == Opcodes.LASTORE) loc = mv.newLocal(Type.LONG_TYPE); else if (opcode == Opcodes.FASTORE) loc = mv.newLocal(Type.FLOAT_TYPE); else if (opcode == Opcodes.DASTORE) loc = mv.newLocal(Type.DOUBLE_TYPE); else throw new RuntimeException("Unknown type"); mv.storeLocal(loc); mv.visitInsn(Opcodes.DUP); insertBranch(Opcodes.IFGE, "java/lang/ArrayIndexOutOfBoundsException"); mv.visitInsn(Opcodes.DUP2); mv.visitInsn(Opcodes.SWAP); //mv.visitInsn(Opcodes.POP); mv.visitInsn(Opcodes.ARRAYLENGTH); insertBranch(Opcodes.IF_ICMPLT, "java/lang/ArrayIndexOutOfBoundsException"); mv.loadLocal(loc); } }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
private String getOp(int opcode) { switch (opcode) { case Opcodes.IFEQ: case Opcodes.IF_ACMPEQ: case Opcodes.IF_ICMPEQ: return "=="; case Opcodes.IFNE: case Opcodes.IF_ACMPNE: case Opcodes.IF_ICMPNE: return "!="; case Opcodes.IFLT: case Opcodes.IF_ICMPLT: return "<"; case Opcodes.IFLE: case Opcodes.IF_ICMPLE: return "<="; case Opcodes.IFGT: case Opcodes.IF_ICMPGT: return ">"; case Opcodes.IFGE: case Opcodes.IF_ICMPGE: return ">="; case Opcodes.IFNULL: return "= null"; case Opcodes.IFNONNULL: return "!= null"; }/*from w ww . j a va 2 s . c o m*/ throw new RuntimeException("Unknown opcode: " + opcode); }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
/** * <p>getInfectionDistance</p> * * @param opcodeOrig a int./*from ww w. jav a 2s.co m*/ * @param opcodeNew a int. * @return a {@link org.objectweb.asm.tree.InsnList} object. */ public InsnList getInfectionDistance(int opcodeOrig, int opcodeNew) { InsnList distance = new InsnList(); switch (opcodeOrig) { case Opcodes.IF_ICMPEQ: case Opcodes.IF_ICMPNE: case Opcodes.IF_ICMPLE: case Opcodes.IF_ICMPLT: case Opcodes.IF_ICMPGE: case Opcodes.IF_ICMPGT: distance.add(new InsnNode(Opcodes.DUP2)); distance.add(new LdcInsnNode(opcodeOrig)); distance.add(new LdcInsnNode(opcodeNew)); distance.add(new MethodInsnNode(Opcodes.INVOKESTATIC, PackageInfo.getNameWithSlash(ReplaceComparisonOperator.class), "getInfectionDistance", "(IIII)D", false)); break; case Opcodes.IFEQ: case Opcodes.IFNE: case Opcodes.IFLE: case Opcodes.IFLT: case Opcodes.IFGE: case Opcodes.IFGT: distance.add(new InsnNode(Opcodes.DUP)); distance.add(new LdcInsnNode(opcodeOrig)); distance.add(new LdcInsnNode(opcodeNew)); distance.add(new MethodInsnNode(Opcodes.INVOKESTATIC, PackageInfo.getNameWithSlash(ReplaceComparisonOperator.class), "getInfectionDistance", "(III)D", false)); break; default: distance.add(new LdcInsnNode(0.0)); } return distance; }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
/** * <p>getInfectionDistance</p> * * @param left a int.// w ww . j a v a2s . co m * @param right a int. * @param opcodeOrig a int. * @param opcodeNew a int. * @return a double. */ public static double getInfectionDistance(int left, int right, int opcodeOrig, int opcodeNew) { long val = (long) left - (long) right; switch (opcodeOrig) { case Opcodes.IF_ICMPLT: switch (opcodeNew) { case Opcodes.IF_ICMPLE: // Only differs for val == 0 return Math.abs(val); case Opcodes.IF_ICMPEQ: // Only differs for val <= 0 return val > 0 ? val : 0.0; case Opcodes.IF_ICMPGT: // Only same for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IF_ICMPGE: // Always differs return 0.0; case Opcodes.IF_ICMPNE: // Only differs for val > 0 return val <= 0 ? Math.abs(val) + 1.0 : 0.0; case TRUE: return val < 0 ? 1.0 : 0.0; case FALSE: return val < 0 ? 0.0 : 1.0; } case Opcodes.IF_ICMPLE: switch (opcodeNew) { case Opcodes.IF_ICMPLT: // Only differs for val == 0 return Math.abs(val); case Opcodes.IF_ICMPEQ: return val >= 0 ? val + 1.0 : 0.0; case Opcodes.IF_ICMPGE: // Only equals for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IF_ICMPGT: // Always differs return 0.0; case Opcodes.IF_ICMPNE: // Only differs if val >= 0 return val < 0 ? Math.abs(val) : 0.0; case TRUE: return val <= 0 ? 1.0 : 0.0; case FALSE: return val <= 0 ? 0.0 : 1.0; } case Opcodes.IF_ICMPGT: switch (opcodeNew) { case Opcodes.IF_ICMPGE: // Only differs for val == 0 return Math.abs(val); case Opcodes.IF_ICMPEQ: // Only differs for val >= 0 return val < 0 ? Math.abs(val) : 0.0; case Opcodes.IF_ICMPLT: // Only same for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IF_ICMPLE: // Always differs return 0.0; case Opcodes.IF_ICMPNE: // Only differs for val < 0 return val >= 0 ? val + 1.0 : 0.0; case TRUE: return val > 0 ? 1.0 : 0.0; case FALSE: return val > 0 ? 0.0 : 1.0; } case Opcodes.IF_ICMPGE: switch (opcodeNew) { case Opcodes.IF_ICMPGT: // Only differs for val == 0 return Math.abs(val); case Opcodes.IF_ICMPEQ: return val <= 0 ? Math.abs(val) + 1.0 : 0.0; case Opcodes.IF_ICMPLE: // Only equals for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IF_ICMPLT: // Always differs return 0.0; case Opcodes.IF_ICMPNE: // Only differs if val > 0 return val > 0 ? val : 0.0; case TRUE: return val >= 0 ? 1.0 : 0.0; case FALSE: return val >= 0 ? 0.0 : 1.0; } case Opcodes.IF_ICMPEQ: switch (opcodeNew) { case Opcodes.IF_ICMPLT: // Only differs if val <= 0 return val > 0 ? val : 0.0; case Opcodes.IF_ICMPGT: // Only differs if val >= 0 return val < 0 ? Math.abs(val) : 0.0; case Opcodes.IF_ICMPNE: // Always differs return 0.0; case Opcodes.IF_ICMPLE: return val >= 0 ? val + 1.0 : 0.0; case Opcodes.IF_ICMPGE: return val <= 0 ? Math.abs(val) + 1.0 : 0.0; case TRUE: return val == 0 ? 1.0 : 0.0; case FALSE: return val == 0 ? 0.0 : 1.0; } case Opcodes.IF_ICMPNE: switch (opcodeNew) { case Opcodes.IF_ICMPEQ: return 0.0; case Opcodes.IF_ICMPLT: // Only differs for val > 0 return val <= 0 ? Math.abs(val) + 1.0 : 0.0; case Opcodes.IF_ICMPLE: // Only differs for val > 0 return val < 0 ? Math.abs(val) : 0.0; case Opcodes.IF_ICMPGT: return val >= 0 ? val + 1.0 : 0.0; case Opcodes.IF_ICMPGE: return val > 0 ? val : 0.0; case TRUE: return val != 0 ? 1.0 : 0.0; case FALSE: return val != 0 ? 0.0 : 1.0; } } throw new RuntimeException("Unknown operator replacement: " + opcodeOrig + " -> " + opcodeNew); }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
private int getBooleanIntIntReplacement(int opcode) { logger.debug("Getting Boolean int int replacement"); switch (opcode) { case Opcodes.IF_ICMPEQ: return Opcodes.IF_ICMPNE; case Opcodes.IF_ICMPNE: return Opcodes.IF_ICMPEQ; case Opcodes.IF_ICMPGT: return Opcodes.IF_ICMPEQ; case Opcodes.IF_ICMPLE: return Opcodes.IF_ICMPGT; // The rest should not occur except if our interpreter did something wrong case Opcodes.IF_ICMPGE: return Opcodes.IF_ICMPLT; case Opcodes.IF_ICMPLT: return Opcodes.IF_ICMPGE; }/*from w w w .j a va2s . co m*/ throw new RuntimeException("Illegal opcode received: " + opcode); }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
private Set<Integer> getIntIntReplacement(int opcode) { logger.info("Getting int int replacement"); Set<Integer> replacement = new HashSet<Integer>(); switch (opcode) { case Opcodes.IF_ICMPEQ: replacement.add(Opcodes.IF_ICMPGE); replacement.add(Opcodes.IF_ICMPLE); // False/*from ww w . j a va2 s .c om*/ replacement.add(FALSE); break; case Opcodes.IF_ICMPNE: replacement.add(Opcodes.IF_ICMPLT); replacement.add(Opcodes.IF_ICMPGT); // True replacement.add(TRUE); break; case Opcodes.IF_ICMPGT: replacement.add(Opcodes.IF_ICMPGE); replacement.add(Opcodes.IF_ICMPNE); // False replacement.add(FALSE); break; case Opcodes.IF_ICMPLE: replacement.add(Opcodes.IF_ICMPLT); replacement.add(Opcodes.IF_ICMPEQ); // True replacement.add(TRUE); break; case Opcodes.IF_ICMPGE: replacement.add(Opcodes.IF_ICMPGT); replacement.add(Opcodes.IF_ICMPEQ); // True replacement.add(TRUE); break; case Opcodes.IF_ICMPLT: replacement.add(Opcodes.IF_ICMPLE); replacement.add(Opcodes.IF_ICMPNE); // False replacement.add(FALSE); break; } return replacement; }
From source file:org.evosuite.instrumentation.mutation.TestComparisonOperator.java
License:Open Source License
@Test public void testComparisonTwoEQ() { // x == 0 vs x != 0 assertEquals(0.0,/*from www.ja v a 2 s. c o m*/ ReplaceComparisonOperator.getInfectionDistance(0, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE), 0.0); // x == 0 vs x < 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(0, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLT), 0.0); assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLT), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLT), 0.0); // x == 0 vs x <= 0 assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(0, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLE), 0.0); assertEquals(2.0, ReplaceComparisonOperator.getInfectionDistance(1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLE), 0.0); // x == 0 vs x > 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(0, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGT), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGT), 0.0); assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(-1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGT), 0.0); // x == 0 vs x >= 0 assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(0, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGE), 0.0); assertEquals(2.0, ReplaceComparisonOperator.getInfectionDistance(-1, 0, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGE), 0.0); }
From source file:org.evosuite.instrumentation.mutation.TestComparisonOperator.java
License:Open Source License
@Test public void testComparisonTwoEQ2() { // x == 0 vs x != 0 assertEquals(0.0,/*from w w w . ja va2 s .c o m*/ ReplaceComparisonOperator.getInfectionDistance(10, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPNE), 0.0); // x == 0 vs x < 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(10, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLT), 0.0); assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLT), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLT), 0.0); // x == 0 vs x <= 0 assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(10, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLE), 0.0); assertEquals(2.0, ReplaceComparisonOperator.getInfectionDistance(11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPLE), 0.0); // x == 0 vs x > 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(10, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGT), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGT), 0.0); assertEquals(21.0, ReplaceComparisonOperator.getInfectionDistance(-11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGT), 0.0); // x == 0 vs x >= 0 assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(10, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGE), 0.0); assertEquals(22.0, ReplaceComparisonOperator.getInfectionDistance(-11, 10, Opcodes.IF_ICMPEQ, Opcodes.IF_ICMPGE), 0.0); }