Example usage for org.objectweb.asm Opcodes IFLE

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

Introduction

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

Prototype

int IFLE

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

Click Source Link

Usage

From source file:org.evosuite.instrumentation.error.LinkedListInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {

    if (owner.equals(LISTNAME)) {
        if (emptyListMethods.contains(name)) {
            // empty
            Map<Integer, Integer> tempVariables = getMethodCallee(desc);

            //tagBranchStart();
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "isEmpty", "()Z", false);
            insertBranch(Opcodes.IFLE, "java/util/NoSuchElementException");
            //tagBranchEnd();
            restoreMethodParameters(tempVariables, desc);

        } else if (indexListMethods.contains(name)) {
            Type[] args = Type.getArgumentTypes(desc);
            if (args.length == 0)
                return;
            if (!args[0].equals(Type.INT_TYPE))
                return;

            Map<Integer, Integer> tempVariables = getMethodCallee(desc);
            tagBranchStart();//  w  ww. j av  a  2  s  .c  o m
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "size", "()I", false);

            // index >= size
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IF_ICMPGT, "java/lang/IndexOutOfBoundsException");

            // index < 0
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IFGE, "java/lang/IndexOutOfBoundsException");
            tagBranchEnd();

            restoreMethodParameters(tempVariables, desc);
        }
    }
}

From source file:org.evosuite.instrumentation.error.QueueInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
    if (owner.equals(LISTNAME)) {
        if (emptyListMethods.contains(name)) {
            // empty
            Map<Integer, Integer> tempVariables = getMethodCallee(desc);

            tagBranchStart();//from w  w w  .ja va  2 s. c om
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "isEmpty", "()Z", false);
            insertBranchWithoutTag(Opcodes.IFLE, "java/util/NoSuchElementException");
            tagBranchEnd();
            restoreMethodParameters(tempVariables, desc);
        }
    }
}

From source file:org.evosuite.instrumentation.error.StackInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
    if (owner.equals(LISTNAME)) {
        if (emptyStackMethods.contains(name)) {
            // empty
            Map<Integer, Integer> tempVariables = getMethodCallee(desc);

            tagBranchStart();//  w w  w . j  a  va2 s  . c o  m
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "empty", "()Z", false);
            insertBranchWithoutTag(Opcodes.IFLE, "java/util/EmptyStackException");
            tagBranchEnd();
            restoreMethodParameters(tempVariables, desc);

        }
    }
}

From source file:org.evosuite.instrumentation.error.VectorInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
    if (owner.equals(VECTORNAME)) {
        if (emptyListMethods.contains(name)) {
            // empty
            Map<Integer, Integer> tempVariables = getMethodCallee(desc);

            //tagBranchStart();
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, VECTORNAME, "isEmpty", "()Z", false);
            insertBranch(Opcodes.IFLE, "java/util/NoSuchElementException");
            // tagBranchEnd();
            restoreMethodParameters(tempVariables, desc);

        } else if (indexListMethods.contains(name)) {
            Type[] args = Type.getArgumentTypes(desc);
            if (args.length == 0)
                return;
            if (!args[0].equals(Type.INT_TYPE))
                return;

            Map<Integer, Integer> tempVariables = getMethodCallee(desc);
            tagBranchStart();//  w ww  . j  ava 2  s  . co  m
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, VECTORNAME, "size", "()I", false);

            // index >= size
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IF_ICMPGT, "java/lang/IndexOutOfBoundsException");

            // index < 0
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IFGE, "java/lang/IndexOutOfBoundsException");
            tagBranchEnd();

            restoreMethodParameters(tempVariables, desc);
        }
    }
}

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";
    }//  w  ww.  j ava2s.c om
    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 w  ww  .j a v a  2 s.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./*from www. ja  v a2  s  . com*/
 * @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 ww  w.  j  a  va 2  s. c om
    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);/*w  ww  . j a  va  2s  . co 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);
}