List of usage examples for org.objectweb.asm Opcodes IFNE
int IFNE
To view the source code for org.objectweb.asm Opcodes IFNE.
Click Source Link
From source file:org.evosuite.instrumentation.coverage.BranchInstrumentation.java
License:Open Source License
/** * <p>// w w w . j ava 2 s .c o m * addDefaultCaseNotCoveredCall * </p> * * @param v * a {@link org.evosuite.graphs.cfg.BytecodeInstruction} object. * @param instrumentation * a {@link org.objectweb.asm.tree.InsnList} object. * @param defaultCaseBranchId * a int. */ protected void addDefaultCaseNotCoveredCall(BytecodeInstruction v, InsnList instrumentation, int defaultCaseBranchId) { instrumentation.add(new LdcInsnNode(0)); instrumentation.add(new LdcInsnNode(Opcodes.IFNE)); instrumentation.add(new LdcInsnNode(defaultCaseBranchId)); instrumentation.add(new LdcInsnNode(v.getInstructionId())); instrumentation .add(new MethodInsnNode(Opcodes.INVOKESTATIC, EXECUTION_TRACER, "passedBranch", "(IIII)V", false)); }
From source file:org.evosuite.instrumentation.error.CastErrorInstrumentation.java
License:Open Source License
@Override public void visitTypeInsn(int opcode, String type) { if (opcode == Opcodes.CHECKCAST) { Label origTarget = new Label(); // Label origTarget = new AnnotatedLabel(); // origTarget.info = Boolean.FALSE; mv.visitInsn(Opcodes.DUP);//w ww. java2 s .c om mv.tagBranch(); mv.visitJumpInsn(Opcodes.IFNULL, origTarget); mv.visitInsn(Opcodes.DUP); mv.visitTypeInsn(Opcodes.INSTANCEOF, type); mv.tagBranch(); mv.visitJumpInsn(Opcodes.IFNE, origTarget); mv.visitTypeInsn(Opcodes.NEW, "java/lang/ClassCastException"); mv.visitInsn(Opcodes.DUP); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/ClassCastException", "<init>", "()V", false); mv.visitInsn(Opcodes.ATHROW); mv.visitLabel(origTarget); mv.tagBranchExit(); } }
From source file:org.evosuite.instrumentation.error.DivisionByZeroInstrumentation.java
License:Open Source License
@Override public void visitInsn(int opcode) { // Check *DIV for divisonbyzero if (opcode == Opcodes.IDIV || opcode == Opcodes.IREM) { mv.visitInsn(Opcodes.DUP);//from www . j av a2s . c o m insertBranch(Opcodes.IFNE, "java/lang/ArithmeticException"); } else if (opcode == Opcodes.LDIV || opcode == Opcodes.LREM) { mv.visitInsn(Opcodes.DUP2); mv.visitLdcInsn(0L); mv.visitInsn(Opcodes.LCMP); insertBranch(Opcodes.IFNE, "java/lang/ArithmeticException"); } }
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 w w .j a va 2 s . c om throw new RuntimeException("Unknown opcode: " + opcode); }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
/** {@inheritDoc} */ @Override/* w w w . java2 s .co m*/ public List<Mutation> apply(MethodNode mn, String className, String methodName, BytecodeInstruction instruction, Frame frame) { JumpInsnNode node = (JumpInsnNode) instruction.getASMNode(); List<Mutation> mutations = new LinkedList<Mutation>(); LabelNode target = node.label; boolean isBoolean = frame.getStack(frame.getStackSize() - 1) == BooleanValueInterpreter.BOOLEAN_VALUE; for (Integer op : getOperators(node.getOpcode(), isBoolean)) { logger.debug("Adding replacement " + op); if (op >= 0) { // insert mutation into bytecode with conditional JumpInsnNode mutation = new JumpInsnNode(op, target); // insert mutation into pool Mutation mutationObject = MutationPool.addMutation(className, methodName, NAME + " " + getOp(node.getOpcode()) + " -> " + getOp(op), instruction, mutation, getInfectionDistance(node.getOpcode(), op)); mutations.add(mutationObject); } else { // Replace relational operator with TRUE/FALSE InsnList mutation = new InsnList(); if (opcodesInt.contains(node.getOpcode())) mutation.add(new InsnNode(Opcodes.POP)); else mutation.add(new InsnNode(Opcodes.POP2)); if (op == TRUE) { mutation.add(new LdcInsnNode(1)); } else { mutation.add(new LdcInsnNode(0)); } mutation.add(new JumpInsnNode(Opcodes.IFNE, target)); Mutation mutationObject = MutationPool.addMutation(className, methodName, NAME + " " + getOp(node.getOpcode()) + " -> " + op, instruction, mutation, getInfectionDistance(node.getOpcode(), op)); mutations.add(mutationObject); } } return mutations; }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
/** * <p>getInfectionDistance</p> * * @param opcodeOrig a int.//from w w w . j a v a 2s .c o 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 intVal a int./* w w w . ja v a2s .co m*/ * @param opcodeOrig a int. * @param opcodeNew a int. * @return a double. */ public static double getInfectionDistance(int intVal, int opcodeOrig, int opcodeNew) { long val = intVal; switch (opcodeOrig) { case Opcodes.IFLT: switch (opcodeNew) { case Opcodes.IFLE: // Only differs for val == 0 return Math.abs(val); case Opcodes.IFEQ: // Only differs for val <= 0 return val > 0 ? val : 0.0; case Opcodes.IFGT: // Only same for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IFGE: // Always differs return 0.0; case Opcodes.IFNE: // 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.IFLE: switch (opcodeNew) { case Opcodes.IFLT: // Only differs for val == 0 return Math.abs(val); case Opcodes.IFEQ: return val >= 0 ? val + 1.0 : 0.0; case Opcodes.IFGE: // Only equals for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IFGT: // Always differs return 0.0; case Opcodes.IFNE: // 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.IFGT: switch (opcodeNew) { case Opcodes.IFGE: // Only differs for val == 0 return Math.abs(val); case Opcodes.IFEQ: // Only differs for val >= 0 return val < 0 ? Math.abs(val) : 0.0; case Opcodes.IFLT: // Only same for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IFLE: // Always differs return 0.0; case Opcodes.IFNE: // 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.IFGE: switch (opcodeNew) { case Opcodes.IFGT: // Only differs for val == 0 return Math.abs(val); case Opcodes.IFEQ: return val <= 0 ? Math.abs(val) + 1.0 : 0.0; case Opcodes.IFLE: // Only equals for val == 0 return val == 0 ? 1.0 : 0.0; case Opcodes.IFLT: // Always differs return 0.0; case Opcodes.IFNE: // 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.IFEQ: switch (opcodeNew) { case Opcodes.IFLT: // Only differs if val <= 0 return val > 0 ? val : 0.0; case Opcodes.IFGT: // Only differs if val >= 0 return val < 0 ? Math.abs(val) : 0.0; case Opcodes.IFNE: // Always differs return 0.0; case Opcodes.IFLE: return val >= 0 ? val + 1.0 : 0.0; case Opcodes.IFGE: 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.IFNE: switch (opcodeNew) { case Opcodes.IFEQ: return 0.0; case Opcodes.IFLT: // Only differs for val > 0 return val <= 0 ? Math.abs(val) + 1.0 : 0.0; case Opcodes.IFLE: // Only differs for val > 0 return val < 0 ? Math.abs(val) : 0.0; case Opcodes.IFGT: return val >= 0 ? val + 1.0 : 0.0; case Opcodes.IFGE: 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 getBooleanIntReplacement(int opcode) { logger.debug("Getting Boolean int replacement"); switch (opcode) { case Opcodes.IFEQ: return Opcodes.IFNE; case Opcodes.IFNE: return Opcodes.IFEQ; case Opcodes.IFGT: return Opcodes.IFEQ; case Opcodes.IFLE: return Opcodes.IFGT; // The rest should not occur except if our interpreter did something wrong case Opcodes.IFGE: return Opcodes.IFLT; case Opcodes.IFLT: return Opcodes.IFGE; }/*from w w w.j a va 2 s .c o m*/ throw new RuntimeException("Illegal opcode received: " + opcode); }
From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java
License:Open Source License
private Set<Integer> getIntReplacement(int opcode) { logger.debug("Getting int replacement"); Set<Integer> replacement = new HashSet<Integer>(); switch (opcode) { case Opcodes.IFEQ: replacement.add(Opcodes.IFGE);/*from w ww . j a va2s . c o m*/ replacement.add(Opcodes.IFLE); replacement.add(FALSE); // False break; case Opcodes.IFNE: replacement.add(Opcodes.IFLT); replacement.add(Opcodes.IFGT); // True replacement.add(TRUE); break; case Opcodes.IFGT: replacement.add(Opcodes.IFGE); replacement.add(Opcodes.IFNE); // False replacement.add(FALSE); break; case Opcodes.IFLE: replacement.add(Opcodes.IFLT); replacement.add(Opcodes.IFEQ); // True replacement.add(TRUE); break; case Opcodes.IFGE: replacement.add(Opcodes.IFGT); replacement.add(Opcodes.IFEQ); // True replacement.add(TRUE); break; case Opcodes.IFLT: replacement.add(Opcodes.IFLE); replacement.add(Opcodes.IFNE); // False replacement.add(FALSE); break; } return replacement; }
From source file:org.evosuite.instrumentation.mutation.TestComparisonOperator.java
License:Open Source License
@Test public void testComparisonZeroEQ() { // x == 0 vs x != 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(0, Opcodes.IFEQ, Opcodes.IFNE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(1, Opcodes.IFEQ, Opcodes.IFNE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-1, Opcodes.IFEQ, Opcodes.IFNE), 0.0); // x == 0 vs x < 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(0, Opcodes.IFEQ, Opcodes.IFLT), 0.0); assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(1, Opcodes.IFEQ, Opcodes.IFLT), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-1, Opcodes.IFEQ, Opcodes.IFLT), 0.0); // x == 0 vs x <= 0 assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(0, Opcodes.IFEQ, Opcodes.IFLE), 0.0); assertEquals(2.0, ReplaceComparisonOperator.getInfectionDistance(1, Opcodes.IFEQ, Opcodes.IFLE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(-1, Opcodes.IFEQ, Opcodes.IFLE), 0.0); // x == 0 vs x > 0 assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(0, Opcodes.IFEQ, Opcodes.IFGT), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(1, Opcodes.IFEQ, Opcodes.IFGT), 0.0); assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(-1, Opcodes.IFEQ, Opcodes.IFGT), 0.0); // x == 0 vs x >= 0 assertEquals(1.0, ReplaceComparisonOperator.getInfectionDistance(0, Opcodes.IFEQ, Opcodes.IFGE), 0.0); assertEquals(0.0, ReplaceComparisonOperator.getInfectionDistance(1, Opcodes.IFEQ, Opcodes.IFGE), 0.0); assertEquals(2.0, ReplaceComparisonOperator.getInfectionDistance(-1, Opcodes.IFEQ, Opcodes.IFGE), 0.0); }