Example usage for org.objectweb.asm Opcodes IF_ICMPLT

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

Introduction

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

Prototype

int IF_ICMPLT

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

Click Source Link

Usage

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