Example usage for org.objectweb.asm Opcodes IFNE

List of usage examples for org.objectweb.asm Opcodes IFNE

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes IFNE.

Prototype

int IFNE

To view the source code for org.objectweb.asm Opcodes IFNE.

Click Source Link

Usage

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);
}