diff --git a/OPAL/ProjectDependencies.mmd b/OPAL/ProjectDependencies.mmd index 9f8ea40a7d..439f7dded7 100644 --- a/OPAL/ProjectDependencies.mmd +++ b/OPAL/ProjectDependencies.mmd @@ -9,6 +9,7 @@ flowchart BT AbstractInterpretationFramework[Abstract Interpretation Frameworkai] Hermes[Hermeshermes] Common[Commoncommon] + ThreeAddressCodeToBytecode[Three Address Code to Bytecodetac2bc] BytecodeDisassembler[Bytecode Disassemblerda] StaticAnalysisInfrastructure[Static Analysis Infrastructuresi] IFDS[IFDSifds] @@ -22,9 +23,8 @@ flowchart BT style Framework fill:#c0ffc0 style Hermes fill:#ffd7cf - Framework --> BytecodeAssembler Framework --> ArchitectureValidation - Framework --> ThreeAddressCode + Framework --> ThreeAddressCodeToBytecode ThreeAddressCode --> AbstractInterpretationFramework ThreeAddressCode --> IFDS APK --> ThreeAddressCode @@ -34,6 +34,8 @@ flowchart BT BytecodeInfrastructure --> Common AbstractInterpretationFramework --> BytecodeRepresentation Hermes --> Framework + ThreeAddressCodeToBytecode --> BytecodeAssembler + ThreeAddressCodeToBytecode --> ThreeAddressCode BytecodeDisassembler --> BytecodeInfrastructure StaticAnalysisInfrastructure --> Common IFDS --> IDE diff --git a/OPAL/ProjectDependencies.pdf b/OPAL/ProjectDependencies.pdf index 2252a4ac31..6f1d899c2b 100644 Binary files a/OPAL/ProjectDependencies.pdf and b/OPAL/ProjectDependencies.pdf differ diff --git a/OPAL/ProjectDependencies.svg b/OPAL/ProjectDependencies.svg index 8e998de5d0..483780ee3c 100644 --- a/OPAL/ProjectDependencies.svg +++ b/OPAL/ProjectDependencies.svg @@ -1 +1 @@ -FrameworkframeworkThree Address CodetacAPKapkDependencies Extraction LibrarydeIDEideBytecode InfrastructurebiAbstract Interpretation FrameworkaiHermeshermesCommoncommonBytecode DisassemblerdaStatic Analysis InfrastructuresiIFDSifdsBytecode RepresentationbrBytecode AssemblerbaArchitecture ValidationavDemosdemosBytecode Creatorbc \ No newline at end of file +FrameworkframeworkThree Address CodetacAPKapkDependencies Extraction LibrarydeIDEideBytecode InfrastructurebiAbstract Interpretation FrameworkaiHermeshermesCommoncommonThree Address Code to Bytecodetac2bcBytecode DisassemblerdaStatic Analysis InfrastructuresiIFDSifdsBytecode RepresentationbrBytecode AssemblerbaArchitecture ValidationavDemosdemosBytecode Creatorbc \ No newline at end of file diff --git a/OPAL/tac2bc/Readme.md b/OPAL/tac2bc/Readme.md new file mode 100644 index 0000000000..92c000a985 --- /dev/null +++ b/OPAL/tac2bc/Readme.md @@ -0,0 +1,2 @@ +# Overview +The ***three-address code to bytcode conversion*** library. diff --git a/OPAL/tac2bc/build.sbt b/OPAL/tac2bc/build.sbt new file mode 100644 index 0000000000..b511e98651 --- /dev/null +++ b/OPAL/tac2bc/build.sbt @@ -0,0 +1 @@ +// build settings reside in the opal root build.sbt file diff --git a/OPAL/tac2bc/src/main/resources/reference.conf b/OPAL/tac2bc/src/main/resources/reference.conf new file mode 100644 index 0000000000..ad9e523038 --- /dev/null +++ b/OPAL/tac2bc/src/main/resources/reference.conf @@ -0,0 +1,8 @@ +org.opalj.tac2bc { + switch { + tableSwitchFixedCost = 10, + tableSwitchCostPerValue = 1, + lookupSwitchFixedCost = 0, + lookupSwitchCostPerValue = 5 + } +} diff --git a/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/ExprProcessor.scala b/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/ExprProcessor.scala new file mode 100644 index 0000000000..5b3850f98f --- /dev/null +++ b/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/ExprProcessor.scala @@ -0,0 +1,472 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj +package tac2bc + +import scala.collection.mutable + +import org.opalj.BinaryArithmeticOperators.Add +import org.opalj.BinaryArithmeticOperators.And +import org.opalj.BinaryArithmeticOperators.Divide +import org.opalj.BinaryArithmeticOperators.Modulo +import org.opalj.BinaryArithmeticOperators.Multiply +import org.opalj.BinaryArithmeticOperators.Or +import org.opalj.BinaryArithmeticOperators.ShiftLeft +import org.opalj.BinaryArithmeticOperators.ShiftRight +import org.opalj.BinaryArithmeticOperators.Subtract +import org.opalj.BinaryArithmeticOperators.UnsignedShiftRight +import org.opalj.BinaryArithmeticOperators.XOr +import org.opalj.RelationalOperators.CMP +import org.opalj.RelationalOperators.CMPG +import org.opalj.RelationalOperators.CMPL +import org.opalj.ba.CodeElement +import org.opalj.br.ArrayType +import org.opalj.br.BooleanType +import org.opalj.br.ByteType +import org.opalj.br.CharType +import org.opalj.br.ClassType +import org.opalj.br.ComputationalTypeDouble +import org.opalj.br.ComputationalTypeFloat +import org.opalj.br.ComputationalTypeInt +import org.opalj.br.ComputationalTypeLong +import org.opalj.br.ComputationalTypeReference +import org.opalj.br.DoubleType +import org.opalj.br.FieldType +import org.opalj.br.FloatType +import org.opalj.br.IntegerType +import org.opalj.br.LongType +import org.opalj.br.MethodDescriptor +import org.opalj.br.ReferenceType +import org.opalj.br.ShortType +import org.opalj.br.instructions._ +import org.opalj.tac.ArrayLength +import org.opalj.tac.ArrayLoad +import org.opalj.tac.BinaryExpr +import org.opalj.tac.Call +import org.opalj.tac.ClassConst +import org.opalj.tac.Compare +import org.opalj.tac.Const +import org.opalj.tac.DoubleConst +import org.opalj.tac.DVar +import org.opalj.tac.DynamicConst +import org.opalj.tac.Expr +import org.opalj.tac.FloatConst +import org.opalj.tac.GetField +import org.opalj.tac.GetStatic +import org.opalj.tac.InstanceOf +import org.opalj.tac.IntConst +import org.opalj.tac.InvokedynamicFunctionCall +import org.opalj.tac.LongConst +import org.opalj.tac.MethodHandleConst +import org.opalj.tac.MethodTypeConst +import org.opalj.tac.New +import org.opalj.tac.NewArray +import org.opalj.tac.NonVirtualFunctionCall +import org.opalj.tac.NonVirtualMethodCall +import org.opalj.tac.NullExpr +import org.opalj.tac.PrefixExpr +import org.opalj.tac.PrimitiveTypecastExpr +import org.opalj.tac.StaticFunctionCall +import org.opalj.tac.StaticMethodCall +import org.opalj.tac.StringConst +import org.opalj.tac.UVar +import org.opalj.tac.V +import org.opalj.tac.Var +import org.opalj.tac.VirtualFunctionCall +import org.opalj.tac.VirtualMethodCall +import org.opalj.value.IsSReferenceValue +import org.opalj.value.ValueInformation + +object ExprProcessor { + + /** + * Generates Java bytecode instructions for Expr. + * + * @param expr the Expression to be converted into InstructionElements + * @param tacToLVIndex map that holds information for Local Variable Indices + * @param code list where bytecode instructions should be added + */ + def processExpression( + expr: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + expr match { + case const: Const => loadConstant(const, code) + case variable: Var[V] => loadVariable(variable, tacToLVIndex, code) + case getField: GetField[V] => processGetField(getField, tacToLVIndex, code) + case getStatic: GetStatic => processGetStatic(getStatic, code) + case binaryExpr: BinaryExpr[V] => processBinaryExpr(binaryExpr, tacToLVIndex, code) + case callExpr: Call[V @unchecked] => + val call @ Call(declaringClass, isInterface, name, descriptor) = callExpr + processCall( + call, + declaringClass, + isInterface, + name, + descriptor, + tacToLVIndex, + code + ) + case newExpr: New => processNewExpr(newExpr.tpe, code) + case primitiveTypecastExpr: PrimitiveTypecastExpr[V] => + processPrimitiveTypeCastExpr(primitiveTypecastExpr, tacToLVIndex, code) + case arrayLength: ArrayLength[V] => processArrayLength(arrayLength, tacToLVIndex, code) + case arrayLoadExpr: ArrayLoad[V] => processArrayLoad(arrayLoadExpr, tacToLVIndex, code) + case newArrayExpr: NewArray[V] => processNewArray(newArrayExpr, tacToLVIndex, code) + case invokedynamicFunctionCall: InvokedynamicFunctionCall[V] => + processInvokedynamicFunctionCall(invokedynamicFunctionCall, tacToLVIndex, code) + case compare: Compare[V] => processCompare(compare, tacToLVIndex, code) + case prefixExpr: PrefixExpr[V] => processPrefixExpr(prefixExpr, tacToLVIndex, code) + case instanceOf: InstanceOf[V] => processInstanceOf(instanceOf, tacToLVIndex, code) + case _ => + throw new UnsupportedOperationException("Unsupported expression type" + expr) + } + } + + def processInstanceOf( + instanceOf: InstanceOf[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(instanceOf.value, tacToLVIndex, code) + code += INSTANCEOF(instanceOf.cmpTpe) + } + + def processPrefixExpr( + prefixExpr: PrefixExpr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Process the operand (the expression being negated) + ExprProcessor.processExpression(prefixExpr.operand, tacToLVIndex, code) + // Note that [[UnaryArithmeticOperators.Negate]] is the only UnaryArithmeticOperator used + assert(prefixExpr.op eq UnaryArithmeticOperators.Negate) + // Determine the appropriate negation instruction based on the operand type + code += { + prefixExpr.operand.cTpe match { + case ComputationalTypeInt => INEG + case ComputationalTypeLong => LNEG + case ComputationalTypeFloat => FNEG + case ComputationalTypeDouble => DNEG + case _ => + throw new UnsupportedOperationException(s"Unsupported type for negation: ${prefixExpr.operand.cTpe}") + } + } + } + + def processCompare( + compare: Compare[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Process the left expression + processExpression(compare.left, tacToLVIndex, code) + // Process the right expression + processExpression(compare.right, tacToLVIndex, code) + // Determine the appropriate comparison instruction + code += { + (compare.left.cTpe, compare.condition) match { + case (ComputationalTypeLong, CMP) => LCMP + case (ComputationalTypeFloat, CMPG) => FCMPG + case (ComputationalTypeFloat, CMPL) => FCMPL + case (ComputationalTypeDouble, CMPG) => DCMPG + case (ComputationalTypeDouble, CMPL) => DCMPL + case _ => throw new IllegalArgumentException("Unsupported comparison type") + } + } + } + + def processInvokedynamicFunctionCall( + invokedynamicFunctionCall: InvokedynamicFunctionCall[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Process each parameter + for (param <- invokedynamicFunctionCall.params) + ExprProcessor.processExpression(param, tacToLVIndex, code) + code += DEFAULT_INVOKEDYNAMIC( + invokedynamicFunctionCall.bootstrapMethod, + invokedynamicFunctionCall.name, + invokedynamicFunctionCall.descriptor + ) + } + + def processNewArray( + newArrayExpr: NewArray[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Process each parameter + for (count <- newArrayExpr.counts.reverse) + ExprProcessor.processExpression(count, tacToLVIndex, code) + code += { + if (newArrayExpr.counts.size > 1) { + MULTIANEWARRAY(newArrayExpr.tpe, newArrayExpr.counts.size) + } else if (newArrayExpr.tpe.componentType.isReferenceType) { + ANEWARRAY(newArrayExpr.tpe.componentType.asReferenceType) + } else { + NEWARRAY(newArrayExpr.tpe.componentType.asBaseType.atype) + } + } + } + + def processArrayLoad( + arrayLoadExpr: ArrayLoad[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Load the array reference onto the stack + processExpression(arrayLoadExpr.arrayRef, tacToLVIndex, code) + // Load the index onto the stack + processExpression(arrayLoadExpr.index, tacToLVIndex, code) + // Infer the element type from the array reference expression + val elementType = inferElementType(arrayLoadExpr.arrayRef) + code += { + elementType match { + case IntegerType => IALOAD + case LongType => LALOAD + case FloatType => FALOAD + case DoubleType => DALOAD + case ByteType => BALOAD + case BooleanType => BALOAD // Boolean arrays are also accessed with BALOAD (see JVM Spec. newarray / baload) + case CharType => CALOAD + case ShortType => SALOAD + case _: ReferenceType => AALOAD + } + } + } + + // Helper function to infer the element type from the array reference expression + private[tac2bc] def inferElementType(expr: Expr[V]): FieldType = { + expr.asVar.value.asInstanceOf[IsSReferenceValue[_]].theUpperTypeBound match { + case ArrayType(componentType) => componentType + case _ => throw new IllegalArgumentException(s"Expected an array type but found: ${expr.cTpe}") + } + } + + def processArrayLength( + arrayLength: ArrayLength[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Process the receiver object + ExprProcessor.processExpression(arrayLength.arrayRef, tacToLVIndex, code) + code += ARRAYLENGTH + } + + def processNewExpr( + tpe: ClassType, + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + code += NEW(tpe) + } + + def processCall( + call: Call[V], + declaringClass: ReferenceType, + isInterface: Boolean, + methodName: String, + methodDescriptor: MethodDescriptor, + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Process each parameter + for (param <- call.allParams) ExprProcessor.processExpression(param, tacToLVIndex, code) + code += { + call match { + case _: VirtualMethodCall[V] | _: VirtualFunctionCall[V] => + if (isInterface) INVOKEINTERFACE(declaringClass.asClassType, methodName, methodDescriptor) + else INVOKEVIRTUAL(declaringClass, methodName, methodDescriptor) + case _: NonVirtualMethodCall[V] | _: NonVirtualFunctionCall[V] => + INVOKESPECIAL(declaringClass.asClassType, isInterface, methodName, methodDescriptor) + case _: StaticMethodCall[V] | _: StaticFunctionCall[V] => + INVOKESTATIC(declaringClass.asClassType, isInterface, methodName, methodDescriptor) + } + } + } + + private def loadConstant( + constExpr: Const, + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + code += { + constExpr match { + case _: NullExpr => ACONST_NULL + case IntConst(_, value) => LoadConstantInstruction(value) + case FloatConst(_, value) => LoadFloat(value) + case ClassConst(_, value) => LoadClass(value) + case StringConst(_, value) => LoadString(value) + case MethodHandleConst(_, value) => LoadMethodHandle(value) + case MethodTypeConst(_, value) => LoadMethodType(value) + case DoubleConst(_, value) => LoadDouble(value) + case LongConst(_, value) => LoadLong(value) + case DynamicConst(_, bootstrapMethod, name, descriptor) => + LoadDynamic(bootstrapMethod, name, descriptor) + } + } + } + + // Method to get LVIndex for a variable + private def getVariableLvIndex(variable: Var[V], tacToLVIndex: Map[Int, Int]): Int = { + val tacIndex = variable match { + case dVar: DVar[ValueInformation] => dVar.originatedAt + case uVar: UVar[ValueInformation] => uVar.definedBy.head + } + tacToLVIndex.getOrElse(tacIndex, throw new RuntimeException(s"no index found for variable $variable")) + } + + private def loadVariable( + variable: Var[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + val index = getVariableLvIndex(variable, tacToLVIndex) + code += { + variable.cTpe match { + case ComputationalTypeInt => ILOAD.canonicalRepresentation(index) + case ComputationalTypeFloat => FLOAD.canonicalRepresentation(index) + case ComputationalTypeDouble => DLOAD.canonicalRepresentation(index) + case ComputationalTypeLong => LLOAD.canonicalRepresentation(index) + case ComputationalTypeReference => ALOAD.canonicalRepresentation(index) + case _ => + throw new UnsupportedOperationException( + "Unsupported computational type for loading variable" + variable + ) + } + } + } + + def storeVariable( + variable: Var[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + val index: Int = getVariableLvIndex(variable, tacToLVIndex) + code += { + variable.cTpe match { + case ComputationalTypeInt => ISTORE.canonicalRepresentation(index) + case ComputationalTypeFloat => FSTORE.canonicalRepresentation(index) + case ComputationalTypeDouble => DSTORE.canonicalRepresentation(index) + case ComputationalTypeLong => LSTORE.canonicalRepresentation(index) + case ComputationalTypeReference => ASTORE.canonicalRepresentation(index) + case _ => + throw new UnsupportedOperationException( + "Unsupported computational type for storing variable" + variable + ) + } + } + } + + def processGetField( + getField: GetField[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Load the object reference onto the stack + processExpression(getField.objRef, tacToLVIndex, code) + // Generate the GETFIELD instruction + code += GETFIELD(getField.declaringClass, getField.name, getField.declaredFieldType) + } + + def processGetStatic( + getStatic: GetStatic, + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + code += GETSTATIC(getStatic.declaringClass, getStatic.name, getStatic.declaredFieldType) + } + + def processBinaryExpr( + binaryExpr: BinaryExpr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // process the left expr and save the pc to give in the right expr processing + processExpression(binaryExpr.left, tacToLVIndex, code) + // process the right Expr + processExpression(binaryExpr.right, tacToLVIndex, code) + + code += { + (binaryExpr.cTpe, binaryExpr.op) match { + // Double + case (ComputationalTypeDouble, Add) => DADD + case (ComputationalTypeDouble, Subtract) => DSUB + case (ComputationalTypeDouble, Multiply) => DMUL + case (ComputationalTypeDouble, Divide) => DDIV + case (ComputationalTypeDouble, Modulo) => DREM + // Float + case (ComputationalTypeFloat, Add) => FADD + case (ComputationalTypeFloat, Subtract) => FSUB + case (ComputationalTypeFloat, Multiply) => FMUL + case (ComputationalTypeFloat, Divide) => FDIV + case (ComputationalTypeFloat, Modulo) => FREM + // Int + case (ComputationalTypeInt, Add) => IADD + case (ComputationalTypeInt, Subtract) => ISUB + case (ComputationalTypeInt, Multiply) => IMUL + case (ComputationalTypeInt, Divide) => IDIV + case (ComputationalTypeInt, Modulo) => IREM + case (ComputationalTypeInt, And) => IAND + case (ComputationalTypeInt, Or) => IOR + case (ComputationalTypeInt, ShiftLeft) => ISHL + case (ComputationalTypeInt, ShiftRight) => ISHR + case (ComputationalTypeInt, UnsignedShiftRight) => IUSHR + case (ComputationalTypeInt, XOr) => IXOR + // Long + case (ComputationalTypeLong, Add) => LADD + case (ComputationalTypeLong, Subtract) => LSUB + case (ComputationalTypeLong, Multiply) => LMUL + case (ComputationalTypeLong, Divide) => LDIV + case (ComputationalTypeLong, Modulo) => LREM + case (ComputationalTypeLong, And) => LAND + case (ComputationalTypeLong, Or) => LOR + case (ComputationalTypeLong, ShiftLeft) => LSHL + case (ComputationalTypeLong, ShiftRight) => LSHR + case (ComputationalTypeLong, UnsignedShiftRight) => LUSHR + case (ComputationalTypeLong, XOr) => LXOR + // Unsupported + case _ => throw new UnsupportedOperationException( + "Unsupported operation or computational type in BinaryExpr" + binaryExpr + ) + } + } + } + def processPrimitiveTypeCastExpr( + primitiveTypecastExpr: PrimitiveTypecastExpr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // First, process the operand expression and add its instructions to the buffer + processExpression(primitiveTypecastExpr.operand, tacToLVIndex, code) + + code += { + (primitiveTypecastExpr.operand.cTpe, primitiveTypecastExpr.targetTpe) match { + // -> to Float + case (ComputationalTypeDouble, FloatType) => D2F + case (ComputationalTypeInt, FloatType) => I2F + case (ComputationalTypeLong, FloatType) => L2F + // -> to Int + case (ComputationalTypeDouble, IntegerType) => D2I + case (ComputationalTypeFloat, IntegerType) => F2I + case (ComputationalTypeLong, IntegerType) => L2I + // -> to Long + case (ComputationalTypeDouble, LongType) => D2L + case (ComputationalTypeInt, LongType) => I2L + case (ComputationalTypeFloat, LongType) => F2L + // -> to Double + case (ComputationalTypeFloat, DoubleType) => F2D + case (ComputationalTypeInt, DoubleType) => I2D + case (ComputationalTypeLong, DoubleType) => L2D + // -> to Char + case (ComputationalTypeInt, CharType) => I2C + // -> to Byte + case (ComputationalTypeInt, ByteType) => I2B + // -> to Short + case (ComputationalTypeInt, ShortType) => I2S + // -> other cases are not supported + case _ => throw new UnsupportedOperationException( + "Unsupported operation or computational type in PrimitiveTypecastExpr" + primitiveTypecastExpr + ) + } + } + } +} diff --git a/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/StmtProcessor.scala b/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/StmtProcessor.scala new file mode 100644 index 0000000000..d44ec59c25 --- /dev/null +++ b/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/StmtProcessor.scala @@ -0,0 +1,523 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj +package tac2bc + +import scala.collection.immutable.ArraySeq +import scala.collection.mutable + +import org.opalj.RelationalOperator +import org.opalj.RelationalOperators.EQ +import org.opalj.RelationalOperators.GE +import org.opalj.RelationalOperators.GT +import org.opalj.RelationalOperators.LE +import org.opalj.RelationalOperators.LT +import org.opalj.RelationalOperators.NE +import org.opalj.ba.CodeElement +import org.opalj.br.BooleanType +import org.opalj.br.BootstrapMethod +import org.opalj.br.ByteType +import org.opalj.br.CharType +import org.opalj.br.ClassType +import org.opalj.br.ComputationalTypeDouble +import org.opalj.br.ComputationalTypeFloat +import org.opalj.br.ComputationalTypeInt +import org.opalj.br.ComputationalTypeLong +import org.opalj.br.ComputationalTypeReference +import org.opalj.br.DoubleType +import org.opalj.br.FieldType +import org.opalj.br.FloatType +import org.opalj.br.IntegerType +import org.opalj.br.LongType +import org.opalj.br.MethodDescriptor +import org.opalj.br.PCs +import org.opalj.br.ReferenceType +import org.opalj.br.ShortType +import org.opalj.br.analyses.SomeProject +import org.opalj.br.instructions.AASTORE +import org.opalj.br.instructions.ARETURN +import org.opalj.br.instructions.ATHROW +import org.opalj.br.instructions.BASTORE +import org.opalj.br.instructions.CASTORE +import org.opalj.br.instructions.CHECKCAST +import org.opalj.br.instructions.DASTORE +import org.opalj.br.instructions.DEFAULT_INVOKEDYNAMIC +import org.opalj.br.instructions.DRETURN +import org.opalj.br.instructions.FASTORE +import org.opalj.br.instructions.FRETURN +import org.opalj.br.instructions.IASTORE +import org.opalj.br.instructions.IRETURN +import org.opalj.br.instructions.LabeledGOTO +import org.opalj.br.instructions.LabeledIF_ACMPEQ +import org.opalj.br.instructions.LabeledIF_ACMPNE +import org.opalj.br.instructions.LabeledIF_ICMPEQ +import org.opalj.br.instructions.LabeledIF_ICMPGE +import org.opalj.br.instructions.LabeledIF_ICMPGT +import org.opalj.br.instructions.LabeledIF_ICMPLE +import org.opalj.br.instructions.LabeledIF_ICMPLT +import org.opalj.br.instructions.LabeledIF_ICMPNE +import org.opalj.br.instructions.LabeledIFNONNULL +import org.opalj.br.instructions.LabeledIFNULL +import org.opalj.br.instructions.LabeledJSR +import org.opalj.br.instructions.LabeledLOOKUPSWITCH +import org.opalj.br.instructions.LabeledTABLESWITCH +import org.opalj.br.instructions.LASTORE +import org.opalj.br.instructions.LRETURN +import org.opalj.br.instructions.MONITORENTER +import org.opalj.br.instructions.MONITOREXIT +import org.opalj.br.instructions.NOP +import org.opalj.br.instructions.POP +import org.opalj.br.instructions.POP2 +import org.opalj.br.instructions.PUTFIELD +import org.opalj.br.instructions.PUTSTATIC +import org.opalj.br.instructions.RET +import org.opalj.br.instructions.RETURN +import org.opalj.br.instructions.RewriteLabel +import org.opalj.br.instructions.SASTORE +import org.opalj.collection.immutable.IntIntPair +import org.opalj.collection.immutable.IntTrieSet +import org.opalj.tac.ArrayStore +import org.opalj.tac.Assignment +import org.opalj.tac.Call +import org.opalj.tac.CaughtException +import org.opalj.tac.Checkcast +import org.opalj.tac.Expr +import org.opalj.tac.ExprStmt +import org.opalj.tac.Goto +import org.opalj.tac.If +import org.opalj.tac.InvokedynamicMethodCall +import org.opalj.tac.JSR +import org.opalj.tac.MonitorEnter +import org.opalj.tac.MonitorExit +import org.opalj.tac.Nop +import org.opalj.tac.PutField +import org.opalj.tac.PutStatic +import org.opalj.tac.Ret +import org.opalj.tac.Return +import org.opalj.tac.ReturnValue +import org.opalj.tac.Stmt +import org.opalj.tac.Switch +import org.opalj.tac.Throw +import org.opalj.tac.V +import org.opalj.tac.Var + +object StmtProcessor { + + private val ConfigKeyPrefix = "org.opalj.tac2bc" + + /** + * Generates Java bytecode instructions for Stmt. + * + * @param stmt the Statement to be converted into InstructionElements + * @param tacToLVIndex map that holds information for Local Variable Indices + * @param labels array that maps tac indices to RewriteLabels as targets for control flow instructions + * @param code list where bytecode instructions should be added + */ + def processStmt( + stmt: Stmt[V], + tacToLVIndex: Map[Int, Int], + labels: Array[RewriteLabel], + code: mutable.ListBuffer[CodeElement[Nothing]] + )(implicit project: SomeProject): Unit = { + stmt match { + case Assignment(_, targetVar, expr) => + processAssignment(targetVar, expr, tacToLVIndex, code) + case ArrayStore(_, arrayRef, index, value) => + processArrayStore(arrayRef, index, value, tacToLVIndex, code) + case CaughtException(_, exceptionType, throwingStmts) => + // TODO: handle CaughtExceptions + processCaughtException( + exceptionType, + throwingStmts, + code, + labels + ) + case ExprStmt(_, expr) => + processExprStmt(expr, tacToLVIndex, code) + case If(_, left, condition, right, target) => + processIf(left, condition, right, labels(target), tacToLVIndex, code) + case Goto(_, target) => + processGoto(labels(target), code) + case Switch(_, defaultTarget, index, npairs) => + processSwitch( + labels(defaultTarget), + index, + npairs, + tacToLVIndex, + code, + labels + ) + case JSR(_, target) => + processJSR(labels(target), code) + case callStmt: Call[V @unchecked] => + val call @ Call(declaringClass, isInterface, name, descriptor) = callStmt + ExprProcessor.processCall( + call, + declaringClass, + isInterface, + name, + descriptor, + tacToLVIndex, + code + ) + case InvokedynamicMethodCall(_, bootstrapMethod, name, descriptor, params) => + processInvokeDynamicMethodCall( + bootstrapMethod, + name, + descriptor, + params, + tacToLVIndex, + code + ) + case MonitorEnter(_, objRef) => + processMonitorEnter(objRef, tacToLVIndex, code) + case MonitorExit(_, objRef) => + processMonitorExit(objRef, tacToLVIndex, code) + case PutField(_, declaringClass, name, declaredFieldType, objRef, value) => + processPutField( + declaringClass, + name, + declaredFieldType, + objRef, + value, + tacToLVIndex, + code + ) + case PutStatic(_, declaringClass, name, declaredFieldType, value) => + processPutStatic( + declaringClass, + name, + declaredFieldType, + value, + tacToLVIndex, + code + ) + case Checkcast(_, value, cmpTpe) => + processCheckCast(value, cmpTpe, tacToLVIndex, code) + case Ret(_, returnAddresses) => + processRet(returnAddresses, code) + case ReturnValue(_, expr) => + processReturnValue(expr, tacToLVIndex, code) + case Return(_) => + processReturn(code) + case Throw(_, exception) => + processThrow(exception, tacToLVIndex, code) + case Nop(_) => + processNop(code) + case _ => throw new UnsupportedOperationException(s"Unsupported TAC-Stmt: $stmt") + } + } + + def processAssignment( + targetVar: Var[V], + expr: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(expr, tacToLVIndex, code) + ExprProcessor.storeVariable(targetVar, tacToLVIndex, code) + } + + def processExprStmt( + expr: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(expr, tacToLVIndex, code) + code += (if (expr.cTpe.isCategory2) POP2 else POP) + } + + def processSwitch( + defaultTarget: RewriteLabel, + index: Expr[V], + npairs: ArraySeq[IntIntPair /*(Case Value, Jump Target)*/ ], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]], + labels: Array[RewriteLabel] + )(implicit project: SomeProject): Unit = { + // Transform nparis to their Labels + // Cases that are not reachable contain the value -1 and must be removed from the npairs + val labeledNpairs: ArraySeq[(Int, RewriteLabel)] = npairs.collect({ + case IntIntPair(key, value) if value >= 0 => + val label = labels(value) + (key, label) + }) + + // Translate the index expression first + ExprProcessor.processExpression(index, tacToLVIndex, code) + + val minValue = npairs.minBy(_._1)._1 + val maxValue = npairs.maxBy(_._1)._1 + + code += { + if (isTableSwitch(npairs.size, minValue, maxValue)) { + val jumpTable = mutable.ArrayBuffer.fill(maxValue - minValue + 1)(defaultTarget) + // Set the case values in the jump table + labeledNpairs.foreach { case (caseValue, target) => + jumpTable(caseValue - minValue) = target + } + LabeledTABLESWITCH(defaultTarget, minValue, maxValue, jumpTable.to(ArraySeq)) + } else LabeledLOOKUPSWITCH(defaultTarget, labeledNpairs) + } + } + + private def isTableSwitch(numLabels: Int, minValue: Int, maxValue: Int)(implicit project: SomeProject): Boolean = { + // This uses similar logic to javac: + // https://github.com/openjdk/jdk/blob/a6ebcf61eb522a1bcfc9f2169d42974af3883b00/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java#L1344 + val config = project.config + val tableSwitchFixedCost = config.getInt(s"$ConfigKeyPrefix.switch.tableSwitchFixedCost") + val tableSwitchCostPerValue = config.getInt(s"$ConfigKeyPrefix.switch.tableSwitchCostPerValue") + val lookupSwitchFixedCost = config.getInt(s"$ConfigKeyPrefix.switch.lookupSwitchFixedCost") + val lookupSwitchCostPerValue = config.getInt(s"$ConfigKeyPrefix.switch.lookupSwitchCostPerValue") + val tableCost = (maxValue - minValue + 1) * tableSwitchCostPerValue + tableSwitchFixedCost + val lookupCost = numLabels * lookupSwitchCostPerValue + lookupSwitchFixedCost + numLabels > 0 && tableCost <= lookupCost + } + + def processReturn(code: mutable.ListBuffer[CodeElement[Nothing]]): Unit = { + code += RETURN + } + + def processReturnValue( + expr: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(expr, tacToLVIndex, code) + code += { + expr.cTpe match { + case ComputationalTypeInt => IRETURN + case ComputationalTypeLong => LRETURN + case ComputationalTypeFloat => FRETURN + case ComputationalTypeDouble => DRETURN + case ComputationalTypeReference => ARETURN + case _ => throw new UnsupportedOperationException("Unsupported computational type:" + expr.cTpe) + } + } + } + + def processArrayStore( + arrayRef: Expr[V], + index: Expr[V], + value: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Load the arrayRef onto the stack + ExprProcessor.processExpression(arrayRef, tacToLVIndex, code) + // Load the index onto the stack + ExprProcessor.processExpression(index, tacToLVIndex, code) + // Load the value to be stored onto the stack + ExprProcessor.processExpression(value, tacToLVIndex, code) + // Infer the element type from the array reference expression + val elementType = ExprProcessor.inferElementType(arrayRef) + code += { + elementType match { + case IntegerType => IASTORE + case LongType => LASTORE + case FloatType => FASTORE + case DoubleType => DASTORE + case ByteType => BASTORE + case BooleanType => BASTORE // Boolean arrays are also accessed with BALOAD (see JVM Spec. newarray / bastore) + case CharType => CASTORE + case ShortType => SASTORE + case _: ReferenceType => AASTORE + } + } + } + + def processNop(code: mutable.ListBuffer[CodeElement[Nothing]]): Unit = { + code += NOP + } + + def processInvokeDynamicMethodCall( + bootstrapMethod: BootstrapMethod, + name: String, + descriptor: MethodDescriptor, + params: Seq[Expr[V]], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + for (param <- params) ExprProcessor.processExpression(param, tacToLVIndex, code) + code += DEFAULT_INVOKEDYNAMIC(bootstrapMethod, name, descriptor) + } + + def processCheckCast( + value: Expr[V], + cmpTpe: ReferenceType, + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(value, tacToLVIndex, code) + code += CHECKCAST(cmpTpe) + value match { + case variable: Var[V] => ExprProcessor.storeVariable(variable, tacToLVIndex, code) + case _ => throw new UnsupportedOperationException(s"Error with CheckCast. Expected a Var but got: $value") + } + } + + def processRet(returnAddresses: PCs, code: mutable.ListBuffer[CodeElement[Nothing]]): Unit = { + // Ensure there is only one return address, as RET can only work with one local variable index + if (returnAddresses.size != 1) throw new IllegalArgumentException( + s"RET instruction expects exactly one return address, but got: ${returnAddresses.size}" + ) + // The RET instruction requires the index of the local variable that holds the return address + // Create the RET instruction with the correct local variable index + code += RET(returnAddresses.head) // FIXME This can't be correct, returnAddresses contains PCs, not local variables + } + + def processCaughtException( + exceptionType: Option[ClassType], + throwingStmts: IntTrieSet, + code: mutable.ListBuffer[CodeElement[Nothing]], + labels: Array[RewriteLabel] + ): Unit = { + // TODO: handle CaughtExceptions correctly + // below is an idea on how to handle caught exceptions - but its not working yet: + // somethings wrong with the stack map frames (for the exception tests only) + throw new UnsupportedOperationException("Caught Exception not yet supported") +// println("DEBUG") +// var minPC = Int.MaxValue +// var maxPC = Int.MinValue +// var pc = 0 +// throwingStmts.foreach(stmt => { +// if (ai.isImmediateVMException(stmt)) { +// pc = ai.pcOfImmediateVMException(stmt) +// println("ImmediateVMException") +// } else if (ai.isMethodExternalExceptionOrigin(stmt)) { +// pc = ai.pcOfMethodExternalException(stmt) +// println("MethodExternalException") +// } else { +// pc = stmt +// println("throw") +// } +// if (pc > maxPC) maxPC = pc +// if (pc < minPC) minPC = pc +// }) +// maxPC = maxPC + 1 +// val minPCLabel = labels(minPC) +// val maxPCLabel = labels(maxPC) +// println(s"$minPCLabel $maxPCLabel") +// +// val minIndex = code.indexWhere { +// case LabelElement(label: RewriteLabel) => label == minPCLabel +// case _ => false +// } +// val maxIndex = code.indexWhere { +// case LabelElement(label: RewriteLabel) => label == maxPCLabel +// case _ => false +// } +// if (minIndex != -1 && maxIndex != -1) { +// val preMinInstr = TRY(Symbol("test")) +// val postMaxInstr = TRYEND(Symbol("test")) +// code.insert(minIndex + 1, preMinInstr) +// code += postMaxInstr +// code += CATCH(Symbol("test"), 0, exceptionType) +// } else { +// println("ERROR: minPCLabel oder maxPCLabel nicht gefunden!") +// } + + } + + def processThrow( + exception: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(exception, tacToLVIndex, code) + code += ATHROW + } + + def processPutStatic( + declaringClass: ClassType, + name: String, + declaredFieldType: FieldType, + value: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + ExprProcessor.processExpression(value, tacToLVIndex, code) + code += PUTSTATIC(declaringClass, name, declaredFieldType) + } + + def processPutField( + declaringClass: ClassType, + name: String, + declaredFieldType: FieldType, + objRef: Expr[V], + value: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Load the object reference onto the stack + ExprProcessor.processExpression(objRef, tacToLVIndex, code) + // Load the value to be stored onto the stack + ExprProcessor.processExpression(value, tacToLVIndex, code) + code += PUTFIELD(declaringClass, name, declaredFieldType) + } + + def processMonitorEnter( + objRef: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Load the object reference onto the stack + ExprProcessor.processExpression(objRef, tacToLVIndex, code) + code += MONITORENTER + } + + def processMonitorExit( + objRef: Expr[V], + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // Load the object reference onto the stack + ExprProcessor.processExpression(objRef, tacToLVIndex, code) + code += MONITOREXIT + } + + def processJSR(target: RewriteLabel, code: mutable.ListBuffer[CodeElement[Nothing]]): Unit = { + code += LabeledJSR(target) + // FIXME This instruction produces a value of computational type returnAddress on the stack that must be handled + } + + def processGoto(target: RewriteLabel, code: mutable.ListBuffer[CodeElement[Nothing]]): Unit = { + code += LabeledGOTO(target) + } + + def processIf( + left: Expr[V], + condition: RelationalOperator, + right: Expr[V], + target: RewriteLabel, + tacToLVIndex: Map[Int, Int], + code: mutable.ListBuffer[CodeElement[Nothing]] + ): Unit = { + // process the left expr + ExprProcessor.processExpression(left, tacToLVIndex, code) + // process the right expr + ExprProcessor.processExpression(right, tacToLVIndex, code) + + code += { + (left.cTpe, right.cTpe, condition) match { + // Handle null comparisons + case (_, _, EQ) if right.isNullExpr || left.isNullExpr => LabeledIFNULL(target) + case (_, _, NE) if right.isNullExpr || left.isNullExpr => LabeledIFNONNULL(target) + // Handle reference comparisons (object references) + case (ComputationalTypeReference, ComputationalTypeReference, EQ) => LabeledIF_ACMPEQ(target) + case (ComputationalTypeReference, ComputationalTypeReference, NE) => LabeledIF_ACMPNE(target) + // Handle integer comparisons + case (ComputationalTypeInt, ComputationalTypeInt, EQ) => LabeledIF_ICMPEQ(target) + case (ComputationalTypeInt, ComputationalTypeInt, NE) => LabeledIF_ICMPNE(target) + case (ComputationalTypeInt, ComputationalTypeInt, LT) => LabeledIF_ICMPLT(target) + case (ComputationalTypeInt, ComputationalTypeInt, LE) => LabeledIF_ICMPLE(target) + case (ComputationalTypeInt, ComputationalTypeInt, GT) => LabeledIF_ICMPGT(target) + case (ComputationalTypeInt, ComputationalTypeInt, GE) => LabeledIF_ICMPGE(target) + // Handle unsupported types + case _ => + throw new UnsupportedOperationException( + s"Unsupported types: left = ${left.cTpe}, right = ${right.cTpe}" + ) + } + } + } +} diff --git a/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/TACtoBC.scala b/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/TACtoBC.scala new file mode 100644 index 0000000000..8045d5b1c2 --- /dev/null +++ b/OPAL/tac2bc/src/main/scala/org/opalj/tac2bc/TACtoBC.scala @@ -0,0 +1,176 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj +package tac2bc + +import scala.collection.mutable + +import org.opalj.ba.CodeElement +import org.opalj.ba.LabelElement +import org.opalj.br.MethodDescriptor +import org.opalj.br.analyses.SomeProject +import org.opalj.br.instructions.RewriteLabel +import org.opalj.tac.AITACode +import org.opalj.tac.DUVar +import org.opalj.tac.Expr +import org.opalj.tac.Stmt +import org.opalj.tac.TACMethodParameter +import org.opalj.tac.UVar +import org.opalj.tac.V +import org.opalj.value.ValueInformation + +object TACtoBC { + + /** + * Converts the TAC Stmts of a single method into bytecode instructions. + * + * This helper method processes one method's TAC representation at a time, converting it into a sequence + * of bytecode instructions. It handles various types of TAC statements and expressions, translating them + * into their equivalent bytecode form. + * + * @param method method to be translated + * @param tac TAC representation of a method to be converted into bytecode. + * @return A Sequence of bytecode instructions representing the method's functionality + */ + def translateTACtoBC( + methodDescriptor: MethodDescriptor, + isStaticMethod: Boolean, + tac: AITACode[TACMethodParameter, ValueInformation] + )(implicit project: SomeProject): IndexedSeq[CodeElement[Nothing]] = { + val tacStmts = tac.stmts.zipWithIndex + // fill tacToLVIndexMap + val tacToLVIndex = prepareLvIndices(methodDescriptor, isStaticMethod, tacStmts) + translateStmtsToInstructions(tacStmts, tacToLVIndex) + } + + /** + * Prepares local variable (LV) indices for the given method by: + * 1. Collecting all defined-use variables (DUVars) from the method's statements. + * 2. Assigning LV indices to method parameters. + * 3. Populating the `tacToLVIndex` map with unique LV indices for each unique variable. + * + * @param method Method which the Array 'tacStmts' belongs to + * @param tacStmts Array of tuples where each tuple contains a TAC statement and its index. + */ + private def prepareLvIndices( + methodDescriptor: MethodDescriptor, + isStaticMethod: Boolean, + tacStmts: Array[(Stmt[DUVar[ValueInformation]], Int)] + ): Map[Int, Int] = { + val tacToLVIndex = mutable.Map[Int, Int]() + var nextLVIndex = populateLVIndicesForParameters(methodDescriptor, isStaticMethod, tacToLVIndex) + tacStmts.foreach { + case (stmt, _) => stmt.forallSubExpressions { subExpr => + nextLVIndex = populateLVIndicesForExpression(subExpr, tacToLVIndex, nextLVIndex) + true + } + } + tacToLVIndex.toMap + } + + /** + * Populates the `tacToLVIndex` map with unique LV indices for each parameter from the given method descriptor. + * + * @param methodDescriptor Descriptor giving the parameter types to assign LV indices for + * @param isStaticMethod True if the method is a static method without a receiver object (this) + * @param tacToLVIndex Map to be filled with indices + */ + private def populateLVIndicesForParameters( + methodDescriptor: MethodDescriptor, + isStaticMethod: Boolean, + tacToLVIndex: mutable.Map[Int, Int] + ) = { + var nextLVIndex = 0 + + if (!isStaticMethod) { + tacToLVIndex(-1) = 0 + nextLVIndex = 1 + } + + methodDescriptor.parameterTypes.zipWithIndex.foreach { case (tpe, index) => + // defSite -1 is reserved for 'this' so we always start at -2 and then go further down per parameter (-3, -4, etc.) + tacToLVIndex(-(index + 2)) = nextLVIndex + nextLVIndex += tpe.computationalType.operandSize + } + + nextLVIndex + } + + /** + * Populates the `tacToLVIndex` map with unique LV indices for each variable in the given expression. + * + * @param expr The expression to extract variables from + * @param tacToLVIndex Map to be filled with indices + * @param initialLVIndex The first index to populate + */ + private def populateLVIndicesForExpression( + expr: Expr[V], + tacToLVIndex: mutable.Map[Int, Int], + initialLVIndex: Int + ): Int = { + expr match { + case uVar: UVar[ValueInformation] => populatetacToLVIndexMap(uVar, tacToLVIndex, initialLVIndex) + case _ => + var nextLVIndex = initialLVIndex + expr.forallSubExpressions { subExpr => + nextLVIndex = populateLVIndicesForExpression(subExpr, tacToLVIndex, nextLVIndex) + true + } + nextLVIndex + } + } + + /** + * Populates the `tacToLVIndex` map with unique LV indices for each unique UVar. + * + * @param uVar A variable used in the method. + */ + private def populatetacToLVIndexMap( + uVar: UVar[ValueInformation], + tacToLVIndex: mutable.Map[Int, Int], + initialLVIndex: Int + ): Int = { + val indexOption = uVar.definedBy.iterator + .find(defSite => tacToLVIndex.contains(defSite)) + .map(defSite => tacToLVIndex(defSite)) + + val (index, nextLVIndex) = indexOption match { + case Some(index) => + (index, initialLVIndex) + case None => + (initialLVIndex, initialLVIndex + uVar.cTpe.operandSize) + } + + uVar.definedBy.foreach(defSite => tacToLVIndex(defSite) = index) + + nextLVIndex + } + + /** + * Translates TAC statements to bytecode instructions. + * + * This method iterates over the given TAC statements, processes each statement according to its type, + * generates the corresponding bytecode instructions. + * + * @param tacStmts Array of tuples where each tuple contains a TAC statement and its index + * @param tacToLVIndex Map that holds information about what variable belongs to which register + */ + def translateStmtsToInstructions( + tacStmts: Array[(Stmt[DUVar[ValueInformation]], Int)], + tacToLVIndex: Map[Int, Int] + )(implicit project: SomeProject): IndexedSeq[CodeElement[Nothing]] = { + + // generate Label for each TAC-Stmt -> index in TAC-Array = corresponding label + // e.g. labelMap(2) = RewriteLabel of TAC-Statement at index 2 + val labels = tacStmts.map(_ => RewriteLabel()) + + // list of all CodeElements including bytecode instructions as well as pseudo instructions + val code = mutable.ListBuffer[CodeElement[Nothing]]() + + tacStmts.foreach { case (stmt, tacIndex) => + // add label to the list + code += LabelElement(labels(tacIndex)) + StmtProcessor.processStmt(stmt, tacToLVIndex, labels, code) + } + code.toIndexedSeq + } +} diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_1.class new file mode 100644 index 0000000000..48bc781c43 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_2.class new file mode 100644 index 0000000000..654f1c7d31 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_3.class new file mode 100644 index 0000000000..1f8a271ed2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_4.class new file mode 100644 index 0000000000..1d8cce5dbd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_5.class new file mode 100644 index 0000000000..aa25666b6e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_1.class new file mode 100644 index 0000000000..505bd22d95 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_2.class new file mode 100644 index 0000000000..550a4b08a6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_3.class new file mode 100644 index 0000000000..c845087a8a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_4.class new file mode 100644 index 0000000000..1a06baac91 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_5.class new file mode 100644 index 0000000000..ace2a4ae57 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Array_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_1.class new file mode 100644 index 0000000000..61e008c411 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_2.class new file mode 100644 index 0000000000..b87877535e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_3.class new file mode 100644 index 0000000000..e444c4972d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_4.class new file mode 100644 index 0000000000..d4f8de697c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_5.class new file mode 100644 index 0000000000..00dfee8ae1 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Assignment_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_1.class new file mode 100644 index 0000000000..ad4b60fd78 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_2.class new file mode 100644 index 0000000000..3de35a12f9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_3.class new file mode 100644 index 0000000000..bd57416d7e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_4.class new file mode 100644 index 0000000000..f2cc5ac55a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5.class new file mode 100644 index 0000000000..c27ef13622 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_1.class new file mode 100644 index 0000000000..a51c918ce0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_2.class new file mode 100644 index 0000000000..36354cf9bb Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_3.class new file mode 100644 index 0000000000..b976c6332a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_4.class new file mode 100644 index 0000000000..ac6c52c675 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_5.class new file mode 100644 index 0000000000..984776b666 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/CheckCast_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_1.class new file mode 100644 index 0000000000..45401d4374 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_2.class new file mode 100644 index 0000000000..9e355c1d38 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_3.class new file mode 100644 index 0000000000..c8bcf788b6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_4.class new file mode 100644 index 0000000000..c6a8b76b6c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_5.class new file mode 100644 index 0000000000..3abc8b5e76 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Compare_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_1.class new file mode 100644 index 0000000000..1c5975231d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_2.class new file mode 100644 index 0000000000..469a0f145d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_3.class new file mode 100644 index 0000000000..503f3e1af5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_4.class new file mode 100644 index 0000000000..b65df19560 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_5.class new file mode 100644 index 0000000000..4ff6b3f454 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Constants_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_1.class new file mode 100644 index 0000000000..47a7b971e1 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_2.class new file mode 100644 index 0000000000..16052626e3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_3.class new file mode 100644 index 0000000000..ed23343b14 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_4.class new file mode 100644 index 0000000000..a0f4decd1c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_5.class new file mode 100644 index 0000000000..fcd7537b02 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ForLoop_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_1.class new file mode 100644 index 0000000000..c4db0a0f1b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_2.class new file mode 100644 index 0000000000..bac0ba609f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_3.class new file mode 100644 index 0000000000..8de2ab160a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_4.class new file mode 100644 index 0000000000..d1b75c914e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_5.class new file mode 100644 index 0000000000..f7893e3db8 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/IfZero_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_1.class new file mode 100644 index 0000000000..048e1dda46 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_2.class new file mode 100644 index 0000000000..ede1ba4b10 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_3.class new file mode 100644 index 0000000000..6add3fecc0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_4.class new file mode 100644 index 0000000000..60c51b4516 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_5.class new file mode 100644 index 0000000000..94a7a97d77 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/If_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_1.class new file mode 100644 index 0000000000..064c166b9c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_2.class new file mode 100644 index 0000000000..4260fc3982 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_3.class new file mode 100644 index 0000000000..58a958a28e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_4.class new file mode 100644 index 0000000000..eba8af72b9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_5.class new file mode 100644 index 0000000000..83d501ead9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceField_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_1.class new file mode 100644 index 0000000000..9d51e260a2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2.class new file mode 100644 index 0000000000..f63191c33a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_3.class new file mode 100644 index 0000000000..d38bffd34f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_4.class new file mode 100644 index 0000000000..48acd173c3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_5.class new file mode 100644 index 0000000000..9be09961b5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InstanceOf_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_1.class new file mode 100644 index 0000000000..20f83118a9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_2.class new file mode 100644 index 0000000000..6bfb9f514e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_3.class new file mode 100644 index 0000000000..498a8e4c35 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_4.class new file mode 100644 index 0000000000..86a83abe69 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_5.class new file mode 100644 index 0000000000..ed1e630c8c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_1.class new file mode 100644 index 0000000000..b6df72a0d3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_2.class new file mode 100644 index 0000000000..f7a584f55d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_3.class new file mode 100644 index 0000000000..ee5831efb4 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_4.class new file mode 100644 index 0000000000..02f6670675 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5.class new file mode 100644 index 0000000000..3a92e260d1 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_1.class new file mode 100644 index 0000000000..64f1d1dda5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_2.class new file mode 100644 index 0000000000..cce167d455 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_3.class new file mode 100644 index 0000000000..8a97e89656 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_4.class new file mode 100644 index 0000000000..2f508560c3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_5.class new file mode 100644 index 0000000000..223f723f45 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Jsr_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_1.class new file mode 100644 index 0000000000..0d8963bbe9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_2.class new file mode 100644 index 0000000000..737a6c0e06 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_3.class new file mode 100644 index 0000000000..0de163aefb Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_4.class new file mode 100644 index 0000000000..cb090e4262 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_5.class new file mode 100644 index 0000000000..d1ab861eb9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/MethodCall_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_1.class new file mode 100644 index 0000000000..b21d0647dc Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_2.class new file mode 100644 index 0000000000..8824c34917 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_3.class new file mode 100644 index 0000000000..4e8c4e72a5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_4.class new file mode 100644 index 0000000000..48bcfc2c5d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_5.class new file mode 100644 index 0000000000..e67f90d72e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Negation_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_1.class new file mode 100644 index 0000000000..db4bad9eb4 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_2.class new file mode 100644 index 0000000000..76b50fd114 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_3.class new file mode 100644 index 0000000000..1c49dc4303 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_4.class new file mode 100644 index 0000000000..7837af6a87 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_5.class new file mode 100644 index 0000000000..94ba3ab663 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_1.class new file mode 100644 index 0000000000..23e54faf0b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_2.class new file mode 100644 index 0000000000..ec975abf0c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_3.class new file mode 100644 index 0000000000..f73d9a4350 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_4.class new file mode 100644 index 0000000000..adffff2fe6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_5.class new file mode 100644 index 0000000000..0fd4f655e7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Parameters_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_1.class new file mode 100644 index 0000000000..9afb566509 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_2.class new file mode 100644 index 0000000000..2d950dd20a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_3.class new file mode 100644 index 0000000000..0e57f74e85 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_4.class new file mode 100644 index 0000000000..9c60655b67 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_5.class new file mode 100644 index 0000000000..836fb3f7e3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_1.class new file mode 100644 index 0000000000..4b0cadde29 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_2.class new file mode 100644 index 0000000000..b482c31745 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_3.class new file mode 100644 index 0000000000..a8faca0773 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_4.class new file mode 100644 index 0000000000..707882db3d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_5.class new file mode 100644 index 0000000000..4e0ce36f90 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Reassignment_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_1.class new file mode 100644 index 0000000000..d3c6cb4122 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_2.class new file mode 100644 index 0000000000..5a7ee4b03c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_3.class new file mode 100644 index 0000000000..d0da9a6f36 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_4.class new file mode 100644 index 0000000000..3b80e149b7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_5.class new file mode 100644 index 0000000000..e09f1f4781 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/StaticField_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_1.class new file mode 100644 index 0000000000..66053c029a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_2.class new file mode 100644 index 0000000000..b774c69d19 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_3.class new file mode 100644 index 0000000000..a1f6eff64c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_4.class new file mode 100644 index 0000000000..7e1113e3ad Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_5.class new file mode 100644 index 0000000000..a0dd203838 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/Switch_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_1.class new file mode 100644 index 0000000000..084906489c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_2.class new file mode 100644 index 0000000000..556c0a1e9f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_3.class new file mode 100644 index 0000000000..bb54de2ca7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_4.class new file mode 100644 index 0000000000..d1c1856f1c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_5.class new file mode 100644 index 0000000000..156a9b7f50 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/generated/org/opalj/tac2bc/mutation/WhileLoop_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_1.class new file mode 100644 index 0000000000..df7f377f9a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_2.class new file mode 100644 index 0000000000..894f38ca35 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_3.class new file mode 100644 index 0000000000..4fb9fa15ba Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_4.class new file mode 100644 index 0000000000..9aa6310947 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_5.class new file mode 100644 index 0000000000..c74c80a3a2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ArithmeticOperations_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_1.class new file mode 100644 index 0000000000..e3bce0274a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_2.class new file mode 100644 index 0000000000..050644fd29 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_3.class new file mode 100644 index 0000000000..02526eb255 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_4.class new file mode 100644 index 0000000000..28bc4ce046 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_5.class new file mode 100644 index 0000000000..7a902d6dd2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Array_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_1.class new file mode 100644 index 0000000000..05c813becf Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_2.class new file mode 100644 index 0000000000..444ced036f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_3.class new file mode 100644 index 0000000000..c2367cb9a5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_4.class new file mode 100644 index 0000000000..3b2e8ac12e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_5.class new file mode 100644 index 0000000000..538bff7d2f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Assignment_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_1.class new file mode 100644 index 0000000000..5a38a869b6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_2.class new file mode 100644 index 0000000000..35a764dea5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_3.class new file mode 100644 index 0000000000..43aeb76fde Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_4.class new file mode 100644 index 0000000000..7ac517bbbd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5$MyNumbers.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5$MyNumbers.class new file mode 100644 index 0000000000..264ffb42c5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5$MyNumbers.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5.class new file mode 100644 index 0000000000..fd4d1bafd6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/BigNumbers_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_1.class new file mode 100644 index 0000000000..40e64963f3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_2.class new file mode 100644 index 0000000000..95b6f395c9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_3.class new file mode 100644 index 0000000000..068498dbfc Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_4.class new file mode 100644 index 0000000000..928974afe4 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_5.class new file mode 100644 index 0000000000..cde37767a3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CaughtException_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_1.class new file mode 100644 index 0000000000..173387426a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_2.class new file mode 100644 index 0000000000..76371f9f51 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_3.class new file mode 100644 index 0000000000..d8e3ba4f2b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_4.class new file mode 100644 index 0000000000..079f93007b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_5.class new file mode 100644 index 0000000000..f29d0a2600 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/CheckCast_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_1.class new file mode 100644 index 0000000000..f5cc7599ac Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_2.class new file mode 100644 index 0000000000..4d2e2bf77b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_3.class new file mode 100644 index 0000000000..1b540ae9f2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_4.class new file mode 100644 index 0000000000..d3f67657e2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_5.class new file mode 100644 index 0000000000..fe4fe4328e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Compare_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_1.class new file mode 100644 index 0000000000..b795096b4e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_2.class new file mode 100644 index 0000000000..f006726d01 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_3.class new file mode 100644 index 0000000000..6687f834fd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_4.class new file mode 100644 index 0000000000..7256aa79fc Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_5$myclass.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_5$myclass.class new file mode 100644 index 0000000000..7fcec48276 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_5$myclass.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_5.class new file mode 100644 index 0000000000..6e925d5b04 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Constants_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_1.class new file mode 100644 index 0000000000..43bd9096d3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_2.class new file mode 100644 index 0000000000..b3b351b6e1 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_3.class new file mode 100644 index 0000000000..ee96a4cd46 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_4.class new file mode 100644 index 0000000000..cffbdad236 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_5.class new file mode 100644 index 0000000000..3e7e85e526 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ForLoop_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_1.class new file mode 100644 index 0000000000..3f3adf83ec Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_2.class new file mode 100644 index 0000000000..6e86ee19e5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_3.class new file mode 100644 index 0000000000..4743e048ec Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_4.class new file mode 100644 index 0000000000..301638c5a6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_5.class new file mode 100644 index 0000000000..89b31bc77e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/IfZero_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_1.class new file mode 100644 index 0000000000..0c4e7e4b74 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_2.class new file mode 100644 index 0000000000..2f9d71ec1e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_3.class new file mode 100644 index 0000000000..a97da8b524 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_4.class new file mode 100644 index 0000000000..0b5ac09871 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_5.class new file mode 100644 index 0000000000..b65760df11 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/If_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_1.class new file mode 100644 index 0000000000..4fd2ca60db Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_2.class new file mode 100644 index 0000000000..d800dfec47 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_3.class new file mode 100644 index 0000000000..dcb82297ca Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_4.class new file mode 100644 index 0000000000..2c30b95cb3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_5.class new file mode 100644 index 0000000000..ce847e29aa Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceField_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_1.class new file mode 100644 index 0000000000..1ec8a96705 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2$1MyClass.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2$1MyClass.class new file mode 100644 index 0000000000..05dd7f818e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2$1MyClass.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2.class new file mode 100644 index 0000000000..159d64d72c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_3.class new file mode 100644 index 0000000000..f64ac37e4b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_4.class new file mode 100644 index 0000000000..fcc1bd564a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_5.class new file mode 100644 index 0000000000..44fa943ca8 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InstanceOf_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_1.class new file mode 100644 index 0000000000..176564d222 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_2.class new file mode 100644 index 0000000000..e8b05bbaba Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_3.class new file mode 100644 index 0000000000..023778a39a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_4.class new file mode 100644 index 0000000000..b3c0712868 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_5.class new file mode 100644 index 0000000000..7d7473e76a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeDynamic_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_1.class new file mode 100644 index 0000000000..fa9d8edc94 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_2.class new file mode 100644 index 0000000000..e9b919baaf Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_3.class new file mode 100644 index 0000000000..b95a876bb7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_4.class new file mode 100644 index 0000000000..54140aacd7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5$1SizeHolder.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5$1SizeHolder.class new file mode 100644 index 0000000000..4faa1c3c38 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5$1SizeHolder.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5.class new file mode 100644 index 0000000000..0681846525 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/InvokeInterface_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_1.class new file mode 100644 index 0000000000..b234c92c80 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_2.class new file mode 100644 index 0000000000..58b4046824 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_3.class new file mode 100644 index 0000000000..f781c829c0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_4.class new file mode 100644 index 0000000000..0e7081f411 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_5.class new file mode 100644 index 0000000000..45e4f16e5e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Jsr_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_1.class new file mode 100644 index 0000000000..179dfe5211 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_2.class new file mode 100644 index 0000000000..e90374ec35 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_3.class new file mode 100644 index 0000000000..a007e58a74 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_4.class new file mode 100644 index 0000000000..54460b0663 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_5.class new file mode 100644 index 0000000000..2862389215 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/MethodCall_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_1.class new file mode 100644 index 0000000000..76ce6eb7b6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_2.class new file mode 100644 index 0000000000..2a5a9af01e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_3.class new file mode 100644 index 0000000000..c47fa244dd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_4.class new file mode 100644 index 0000000000..8881969498 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_5.class new file mode 100644 index 0000000000..5ce70277a5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Negation_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_1.class new file mode 100644 index 0000000000..96371389ad Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_2.class new file mode 100644 index 0000000000..2a7b0d3029 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_3.class new file mode 100644 index 0000000000..1c16cbdf8d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_4.class new file mode 100644 index 0000000000..bda7ebf5dd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_5.class new file mode 100644 index 0000000000..2af606e701 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ObjectPropertyAccess_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_1.class new file mode 100644 index 0000000000..fd5beb1684 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_2.class new file mode 100644 index 0000000000..04e8f42f0d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_3.class new file mode 100644 index 0000000000..488eaed381 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_4.class new file mode 100644 index 0000000000..ec05c27090 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_5.class new file mode 100644 index 0000000000..0c37715ad7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Parameters_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_1.class new file mode 100644 index 0000000000..d46dee34be Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_2.class new file mode 100644 index 0000000000..6f4a2d3b3f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_3.class new file mode 100644 index 0000000000..5e356a043f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_4.class new file mode 100644 index 0000000000..d235b7594e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_5.class new file mode 100644 index 0000000000..78bd19767a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/PrimitiveTypeCast_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_1.class new file mode 100644 index 0000000000..0eb28df9db Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_2$Myclass.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_2$Myclass.class new file mode 100644 index 0000000000..16c16626d5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_2$Myclass.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_2.class new file mode 100644 index 0000000000..18c1cf726d Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_3.class new file mode 100644 index 0000000000..3fffff8289 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_4.class new file mode 100644 index 0000000000..5721105bef Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_5.class new file mode 100644 index 0000000000..54f70ba7db Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Reassignment_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_1.class new file mode 100644 index 0000000000..cd0956dfed Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_2.class new file mode 100644 index 0000000000..8334cf36a8 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_3.class new file mode 100644 index 0000000000..f3e3ff0915 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_4.class new file mode 100644 index 0000000000..577336e64a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_5.class new file mode 100644 index 0000000000..e1cde3b899 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/StaticField_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_1.class new file mode 100644 index 0000000000..9fbebfe4cd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_2$Myclass.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_2$Myclass.class new file mode 100644 index 0000000000..670baec02a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_2$Myclass.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_2.class new file mode 100644 index 0000000000..6e56f087b8 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_3.class new file mode 100644 index 0000000000..e4df5a63df Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_4.class new file mode 100644 index 0000000000..a5cf57cf20 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_5.class new file mode 100644 index 0000000000..5a01752bbc Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/Switch_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_2.class new file mode 100644 index 0000000000..ce48ee88c7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_3.class new file mode 100644 index 0000000000..bfef434b77 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_4.class new file mode 100644 index 0000000000..5595d4c0f5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_5.class new file mode 100644 index 0000000000..dd682ae0c8 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/ThrowException_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_1.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_1.class new file mode 100644 index 0000000000..8410c967c0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_1.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_2.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_2.class new file mode 100644 index 0000000000..f6fcdde9c3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_2.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_3.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_3.class new file mode 100644 index 0000000000..5f1dc7bca0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_3.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_4.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_4.class new file mode 100644 index 0000000000..3429d951b9 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_4.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_5.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_5.class new file mode 100644 index 0000000000..5b68a67d78 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/mutated/org/opalj/tac2bc/mutation/WhileLoop_mutation_5.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ArithmeticOperations.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ArithmeticOperations.class new file mode 100644 index 0000000000..2db3cc7489 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ArithmeticOperations.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Array.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Array.class new file mode 100644 index 0000000000..e700baa8b6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Array.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Assignment.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Assignment.class new file mode 100644 index 0000000000..b748b3a904 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Assignment.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/BigNumbers.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/BigNumbers.class new file mode 100644 index 0000000000..62020c5368 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/BigNumbers.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/CaughtException.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/CaughtException.class new file mode 100644 index 0000000000..5c362c5859 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/CaughtException.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/CheckCast.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/CheckCast.class new file mode 100644 index 0000000000..b695abb8a5 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/CheckCast.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Compare.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Compare.class new file mode 100644 index 0000000000..f9e15b0f42 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Compare.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Constants.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Constants.class new file mode 100644 index 0000000000..049a798d90 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Constants.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ForLoop.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ForLoop.class new file mode 100644 index 0000000000..ec94bdf794 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ForLoop.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/If.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/If.class new file mode 100644 index 0000000000..056e412bbd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/If.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/IfZero.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/IfZero.class new file mode 100644 index 0000000000..6e5e1cd1c0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/IfZero.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InstanceField.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InstanceField.class new file mode 100644 index 0000000000..e3449e82f7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InstanceField.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InstanceOf.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InstanceOf.class new file mode 100644 index 0000000000..c7fcb07744 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InstanceOf.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InvokeDynamic.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InvokeDynamic.class new file mode 100644 index 0000000000..d523f0ba5b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InvokeDynamic.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InvokeInterface.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InvokeInterface.class new file mode 100644 index 0000000000..d7299553ee Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/InvokeInterface.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Jsr.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Jsr.class new file mode 100644 index 0000000000..406c6bff22 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Jsr.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/MethodCall.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/MethodCall.class new file mode 100644 index 0000000000..4afa2a9340 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/MethodCall.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Negation.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Negation.class new file mode 100644 index 0000000000..971ab2f518 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Negation.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ObjectPropertyAccess.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ObjectPropertyAccess.class new file mode 100644 index 0000000000..e3d88324f6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ObjectPropertyAccess.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Parameters.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Parameters.class new file mode 100644 index 0000000000..324f748868 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Parameters.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/PrimitiveTypeCast.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/PrimitiveTypeCast.class new file mode 100644 index 0000000000..d8f02f5b76 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/PrimitiveTypeCast.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Reassignment.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Reassignment.class new file mode 100644 index 0000000000..f3e6a73a6c Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Reassignment.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/StaticField.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/StaticField.class new file mode 100644 index 0000000000..9750b3cc73 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/StaticField.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Switch.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Switch.class new file mode 100644 index 0000000000..79521c68f0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/Switch.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ThrowException.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ThrowException.class new file mode 100644 index 0000000000..e5fe089728 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/ThrowException.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/WhileLoop.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/WhileLoop.class new file mode 100644 index 0000000000..bfb1bffcdd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/mutation/original/org/opalj/tac2bc/mutation/WhileLoop.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ArithmeticOperations.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ArithmeticOperations.class new file mode 100644 index 0000000000..1458d6b439 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ArithmeticOperations.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Array.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Array.class new file mode 100644 index 0000000000..6d6b6ab3aa Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Array.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Assignment.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Assignment.class new file mode 100644 index 0000000000..03a387c2de Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Assignment.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/BigNumbers.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/BigNumbers.class new file mode 100644 index 0000000000..2009143902 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/BigNumbers.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/CheckCast.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/CheckCast.class new file mode 100644 index 0000000000..7daadf7ea7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/CheckCast.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Compare.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Compare.class new file mode 100644 index 0000000000..36130d1704 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Compare.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Constants.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Constants.class new file mode 100644 index 0000000000..09115f1039 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Constants.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ForLoop.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ForLoop.class new file mode 100644 index 0000000000..ec0bc9ed1b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ForLoop.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/If.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/If.class new file mode 100644 index 0000000000..2ef980ad62 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/If.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/IfZero.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/IfZero.class new file mode 100644 index 0000000000..8f67612dae Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/IfZero.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InstanceField.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InstanceField.class new file mode 100644 index 0000000000..00fabc1297 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InstanceField.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InstanceOf.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InstanceOf.class new file mode 100644 index 0000000000..e9d707bc5a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InstanceOf.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InvokeDynamic.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InvokeDynamic.class new file mode 100644 index 0000000000..2b8d969d53 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InvokeDynamic.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InvokeInterface.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InvokeInterface.class new file mode 100644 index 0000000000..c6b38d33bc Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/InvokeInterface.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Jsr.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Jsr.class new file mode 100644 index 0000000000..b927b6a4f4 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Jsr.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/MethodCall.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/MethodCall.class new file mode 100644 index 0000000000..f04f8cc680 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/MethodCall.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Negation.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Negation.class new file mode 100644 index 0000000000..e515f87883 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Negation.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ObjectPropertyAccess.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ObjectPropertyAccess.class new file mode 100644 index 0000000000..c4cfdb61db Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/ObjectPropertyAccess.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Parameters.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Parameters.class new file mode 100644 index 0000000000..e129752ec6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Parameters.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/PrimitiveTypeCast.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/PrimitiveTypeCast.class new file mode 100644 index 0000000000..7dbb3dd949 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/PrimitiveTypeCast.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Reassignment.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Reassignment.class new file mode 100644 index 0000000000..27ab07a127 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Reassignment.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/StaticField.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/StaticField.class new file mode 100644 index 0000000000..70d9defe5f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/StaticField.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Switch.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Switch.class new file mode 100644 index 0000000000..c645b68581 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/Switch.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/WhileLoop.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/WhileLoop.class new file mode 100644 index 0000000000..87c9c199d3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/generated/org/opalj/tac2bc/single/WhileLoop.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ArithmeticOperations.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ArithmeticOperations.class new file mode 100644 index 0000000000..511c37713f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ArithmeticOperations.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Array.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Array.class new file mode 100644 index 0000000000..cf5216a250 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Array.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Assignment.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Assignment.class new file mode 100644 index 0000000000..c477907bad Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Assignment.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/BigNumbers.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/BigNumbers.class new file mode 100644 index 0000000000..9615b5d481 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/BigNumbers.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/CaughtException.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/CaughtException.class new file mode 100644 index 0000000000..522e0e582f Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/CaughtException.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/CheckCast.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/CheckCast.class new file mode 100644 index 0000000000..3b638fab7e Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/CheckCast.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Compare.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Compare.class new file mode 100644 index 0000000000..94f7d6c638 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Compare.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Constants.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Constants.class new file mode 100644 index 0000000000..5324604546 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Constants.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ForLoop.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ForLoop.class new file mode 100644 index 0000000000..49fd714f50 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ForLoop.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/If.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/If.class new file mode 100644 index 0000000000..cf2efd37f3 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/If.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/IfZero.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/IfZero.class new file mode 100644 index 0000000000..a9571beaf4 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/IfZero.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InstanceField.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InstanceField.class new file mode 100644 index 0000000000..a63580b1fd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InstanceField.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InstanceOf.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InstanceOf.class new file mode 100644 index 0000000000..c0b98a61f7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InstanceOf.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InvokeDynamic.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InvokeDynamic.class new file mode 100644 index 0000000000..d2b633aec7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InvokeDynamic.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InvokeInterface.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InvokeInterface.class new file mode 100644 index 0000000000..df36c7f5ad Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/InvokeInterface.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Jsr.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Jsr.class new file mode 100644 index 0000000000..db65db9485 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Jsr.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/MethodCall.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/MethodCall.class new file mode 100644 index 0000000000..55c169f1d2 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/MethodCall.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Negation.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Negation.class new file mode 100644 index 0000000000..8c2213f5bd Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Negation.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ObjectPropertyAccess.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ObjectPropertyAccess.class new file mode 100644 index 0000000000..be16b471e0 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ObjectPropertyAccess.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Parameters.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Parameters.class new file mode 100644 index 0000000000..27a86f6a36 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Parameters.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/PrimitiveTypeCast.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/PrimitiveTypeCast.class new file mode 100644 index 0000000000..a5a6471a73 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/PrimitiveTypeCast.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Reassignment.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Reassignment.class new file mode 100644 index 0000000000..9ab0ad075b Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Reassignment.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/StaticField.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/StaticField.class new file mode 100644 index 0000000000..7e8e3c5ae7 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/StaticField.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Switch.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Switch.class new file mode 100644 index 0000000000..82fdfc8b68 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/Switch.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ThrowException.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ThrowException.class new file mode 100644 index 0000000000..a0416b1e0a Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/ThrowException.class differ diff --git a/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/WhileLoop.class b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/WhileLoop.class new file mode 100644 index 0000000000..9ac07405b6 Binary files /dev/null and b/OPAL/tac2bc/src/test/resources/generatedClassFiles/single/original/org/opalj/tac2bc/single/WhileLoop.class differ diff --git a/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations.java b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations.java new file mode 100644 index 0000000000..840dd4d17a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ArithmeticOperations { + public static void main(String[] args) { + int a = 10; + int b = 5; + int sum = a + b; + int difference = a - b; + int product = a * b; + int quotient = a / b; + + System.out.println("Sum: " + sum); + System.out.println("Difference: " + difference); + System.out.println("Product: " + product); + System.out.println("Quotient: " + quotient); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_1.java new file mode 100644 index 0000000000..32da778ca5 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_1.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ArithmeticOperations_mutation_1 { + public static void main(String[] args) { + int[] arrA = {10}; + int[] arrB = {5}; + int a = arrA[0]; + int b = arrB[0]; + int sum = a + b; + int difference = a - b; + int product = a * b; + int quotient = a / b; + + System.out.println("Sum: " + sum); + System.out.println("Difference: " + difference); + System.out.println("Product: " + product); + System.out.println("Quotient: " + quotient); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_2.java new file mode 100644 index 0000000000..dc1ec5e3ca --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_2.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ArithmeticOperations_mutation_2 { + public static void main(String[] args) { + int[] aArr = {10}; + int[] bArr = {5}; + int a = aArr[0]; + int b = bArr[0]; + int sum = a + b; + int difference = a - b; + int product = a * b; + int quotient = a / b; + + System.out.println("Sum: " + sum); + System.out.println("Difference: " + difference); + System.out.println("Product: " + product); + System.out.println("Quotient: " + quotient); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_3.java new file mode 100644 index 0000000000..da0293162f --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_3.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ArithmeticOperations_mutation_3 { + public static void main(String[] args) { + int a = 10; + int b = 5; + int sum = a + b; + int difference = a - b; + int product = a * b; + int quotient = calculateQuotient(a, b); + + System.out.println("Sum: " + sum); + System.out.println("Difference: " + difference); + System.out.println("Product: " + product); + System.out.println("Quotient: " + quotient); + } + + private static int calculateQuotient(int a, int b) { + return a / b; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_4.java new file mode 100644 index 0000000000..b42ca434e6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_4.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ArithmeticOperations_mutation_4 { + public static void main(String[] args) { + int a = 10; + int b = 5; + int product = a * b; + int sum = a + b; + int difference = a - b; + int quotient = a / b; + + System.out.println("Sum: " + sum); + System.out.println("Difference: " + difference); + System.out.println("Product: " + product); + System.out.println("Quotient: " + quotient); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_5.java new file mode 100644 index 0000000000..78ae9430cf --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ArithmeticOperations/ArithmeticOperations_mutation_5.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ArithmeticOperations_mutation_5 { + public static void main(String[] args) { + int[] a = {10}; + int[] b = {5}; + int sum = a[0] + b[0]; + int difference = a[0] - b[0]; + int product = a[0] * b[0]; + int quotient = a[0] / b[0]; + + System.out.println("Sum: " + sum); + System.out.println("Difference: " + difference); + System.out.println("Product: " + product); + System.out.println("Quotient: " + quotient); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Array/Array.java b/OPAL/tac2bc/src/test/resources/mutation/Array/Array.java new file mode 100644 index 0000000000..c1a8cce943 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Array/Array.java @@ -0,0 +1,19 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Array { + + public static void main(String[] args) { + // Single-Dimensional Array + int[] array = {10, 20, 30}; + + // Print original values + System.out.println(array[0]); + System.out.println(array[1]); + System.out.println(array[2]); + + // Modify and print the second element + array[1] = 100; + System.out.println(array[1]); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_1.java new file mode 100644 index 0000000000..76c029f3e9 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_1.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Array_mutation_1 { + + // Declare a static field + private static final int INITIAL_VALUE = 20; + + public static void main(String[] args) { + // Single-Dimensional Array + int[] array = {10, INITIAL_VALUE, 30}; + + // Print original values + System.out.println(array[0]); + System.out.println(array[1]); + System.out.println(array[2]); + + // Modify and print the second element + array[1] = 100; + System.out.println(array[1]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_2.java new file mode 100644 index 0000000000..e3b3a17cb3 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_2.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Array_mutation_2 { + + public static void main(String[] args) { + // Single-Dimensional Array + int[] array = {10, 20, 30}; + + // Print original values + System.out.println(array[0]); + System.out.println(array[1]); + System.out.println(array[2]); + + // Store the result of a calculation in a temporary variable + int modifiedValue = array[1]; + + // Modify and print the second element + modifiedValue = 100; + System.out.println(modifiedValue); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_3.java new file mode 100644 index 0000000000..9e11b133aa --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_3.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Array_mutation_3 { + + public static int myStaticField = 0; + + public static void main(String[] args) { + // Single-Dimensional Array + int[] array = {10, 20, 30}; + + // Print original values + System.out.println(array[0]); + System.out.println(array[1]); + System.out.println(array[2]); + + // Modify and print the second element + array[1] = myStaticField + 100; + System.out.println(array[1]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_4.java new file mode 100644 index 0000000000..e3ad161716 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_4.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Array_mutation_4 { + + public static void main(String[] args) { + // Single-Dimensional Array + int[] array = {10, 20, 30}; + + // Print original values + System.out.println(array[0]); + System.out.println(array[1]); + System.out.println(array[2]); + + // Modify and print the second element + int[] temp = {100}; + array[1] = temp[0]; + System.out.println(array[1]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_5.java new file mode 100644 index 0000000000..69ea0381f6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Array/Array_mutation_5.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Array_mutation_5 { + + public static void main(String[] args) { + // Single-Dimensional Array + int[] array = {10, 20, 30}; + + // Print original values + System.out.println(array[0]); + System.out.println(array[1]); + System.out.println(array[2]); + + if (true) { + array[1] = 100; + } + System.out.println(array[1]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment.java b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment.java new file mode 100644 index 0000000000..5b1dc38487 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Assignment { + + public static void main(String[] args) { + // Test integer assignment + int a = 10; + int b = 20; + int sum = a + b; + System.out.println("Sum of integers: " + sum); + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + System.out.println("Full name: " + fullName); + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + System.out.println("Boolean AND result: " + andResult); + + // Test array assignment + int[] numbers = {1, 2, 3}; + int firstNumber = numbers[0]; + numbers[0] = firstNumber + 10; + System.out.println("First number in array after update: " + numbers[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_1.java new file mode 100644 index 0000000000..e5397e1326 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_1.java @@ -0,0 +1,32 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Assignment_mutation_1 { + + public static void main(String[] args) { + // Test integer assignment + int a = 10; + int b = 20; + int sum = a + b; + int sumTemp = sum; // Store the result in a temporary variable + System.out.println("Sum of integers: " + sumTemp); + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + System.out.println("Full name: " + fullName); + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + System.out.println("Boolean AND result: " + andResult); + + // Test array assignment + int[] numbers = {1, 2, 3}; + int firstNumber = numbers[0]; + numbers[0] = firstNumber + 10; + System.out.println("First number in array after update: " + numbers[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_2.java new file mode 100644 index 0000000000..b85ded3e60 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_2.java @@ -0,0 +1,32 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Assignment_mutation_2 { + + public static void main(String[] args) { + // Test integer assignment + int[] aArray = {10}; + int a = aArray[0]; + int b = 20; + int sum = a + b; + System.out.println("Sum of integers: " + sum); + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + System.out.println("Full name: " + fullName); + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + System.out.println("Boolean AND result: " + andResult); + + // Test array assignment + int[] numbers = {1, 2, 3}; + int firstNumber = numbers[0]; + numbers[0] = firstNumber + 10; + System.out.println("First number in array after update: " + numbers[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_3.java new file mode 100644 index 0000000000..fa420eb8f2 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_3.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Assignment_mutation_3 { + + public static void main(String[] args) { + // Test integer assignment + int[] a = {10}; + int b = 20; + int sum = a[0] + b; + System.out.println("Sum of integers: " + sum); + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + System.out.println("Full name: " + fullName); + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + System.out.println("Boolean AND result: " + andResult); + + // Test array assignment + int[] numbers = {1, 2, 3}; + int firstNumber = numbers[0]; + numbers[0] = firstNumber + 10; + System.out.println("First number in array after update: " + numbers[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_4.java new file mode 100644 index 0000000000..294b4988e6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_4.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Assignment_mutation_4 { + + public static void main(String[] args) { + // Test integer assignment + int[] a = {10}; + int b = 20; + int sum = a[0] + b; + System.out.println("Sum of integers: " + sum); + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + System.out.println("Full name: " + fullName); + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + System.out.println("Boolean AND result: " + andResult); + + // Test array assignment + int[] numbers = {1, 2, 3}; + int firstNumber = numbers[0]; + numbers[0] = firstNumber + 10; + System.out.println("First number in array after update: " + numbers[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_5.java new file mode 100644 index 0000000000..01307e71cd --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Assignment/Assignment_mutation_5.java @@ -0,0 +1,33 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Assignment_mutation_5 { + + public static void main(String[] args) { + // Test integer assignment + int a = 10; + int b = 20; + int sum = a + b; + int result = sum; // Temp variable to store the result + System.out.println("Sum of integers: " + result); + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + System.out.println("Full name: " + fullName); + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + System.out.println("Boolean AND result: " + andResult); + + // Test array assignment + int[] numbers = {1, 2, 3}; + int firstNumber = numbers[0]; + int updatedNumber = firstNumber + 10; + numbers[0] = updatedNumber; + System.out.println("First number in array after update: " + numbers[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers.java b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers.java new file mode 100644 index 0000000000..a4cc2d7113 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers.java @@ -0,0 +1,47 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class BigNumbers { + + public static void main(String[] args) { + // Test with int + int maxValueInt = Integer.MAX_VALUE; + int largeValueInt = 1_000_000_000; + + int sumInt = maxValueInt + largeValueInt; // Overflow possible + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + + boolean isMaxGreaterThanMinInt = maxValueInt > largeValueInt; + System.out.println("Is maxValue > largeValue? (int) " + isMaxGreaterThanMinInt); + + // Test with long + long maxValueLong = Long.MAX_VALUE; + long largeValueLong = 1_000_000_000_000L; + + long sumLong = maxValueLong + largeValueLong; // Overflow possible + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + + boolean isMaxGreaterThanLargeValueLong = maxValueLong > largeValueLong; + System.out.println("Is maxValue > largeValue? (long) " + isMaxGreaterThanLargeValueLong); + + // Test with double + double maxValueDouble = Double.MAX_VALUE; + double largeValueDouble = 1e100; + + double sumDouble = maxValueDouble + largeValueDouble; + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + + boolean isMaxGreaterThanLargeValueDouble = maxValueDouble > largeValueDouble; + System.out.println("Is maxValue > largeValue? (double) " + isMaxGreaterThanLargeValueDouble); + + // Test with float + float maxValueFloat = Float.MAX_VALUE; + float largeValueFloat = 1e30f; + + float sumFloat = maxValueFloat + largeValueFloat; + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + + boolean isMaxGreaterThanLargeValueFloat = maxValueFloat > largeValueFloat; + System.out.println("Is maxValue > largeValue? (float) " + isMaxGreaterThanLargeValueFloat); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_1.java new file mode 100644 index 0000000000..9f5e0c391a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_1.java @@ -0,0 +1,49 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class BigNumbers_mutation_1 { + + public static void main(String[] args) { + // Test with int + int maxValueInt = Integer.MAX_VALUE; + int largeValueInt = 1_000_000_000; + + int sumInt = maxValueInt + largeValueInt; // Overflow possible + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + + if (true) { + boolean isMaxGreaterThanMinInt = maxValueInt > largeValueInt; + System.out.println("Is maxValue > largeValue? (int) " + isMaxGreaterThanMinInt); + } + + // Test with long + long maxValueLong = Long.MAX_VALUE; + long largeValueLong = 1_000_000_000_000L; + + long sumLong = maxValueLong + largeValueLong; // Overflow possible + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + + boolean isMaxGreaterThanLargeValueLong = maxValueLong > largeValueLong; + System.out.println("Is maxValue > largeValue? (long) " + isMaxGreaterThanLargeValueLong); + + // Test with double + double maxValueDouble = Double.MAX_VALUE; + double largeValueDouble = 1e100; + + double sumDouble = maxValueDouble + largeValueDouble; + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + + boolean isMaxGreaterThanLargeValueDouble = maxValueDouble > largeValueDouble; + System.out.println("Is maxValue > largeValue? (double) " + isMaxGreaterThanLargeValueDouble); + + // Test with float + float maxValueFloat = Float.MAX_VALUE; + float largeValueFloat = 1e30f; + + float sumFloat = maxValueFloat + largeValueFloat; + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + + boolean isMaxGreaterThanLargeValueFloat = maxValueFloat > largeValueFloat; + System.out.println("Is maxValue > largeValue? (float) " + isMaxGreaterThanLargeValueFloat); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_2.java new file mode 100644 index 0000000000..de09788278 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_2.java @@ -0,0 +1,49 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class BigNumbers_mutation_2 { + + public static void main(String[] args) { + // Test with int + int maxValueInt = Integer.MAX_VALUE; + int largeValueInt = 1_000_000_000; + + int sumInt = maxValueInt + largeValueInt; // Overflow possible + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + + boolean isMaxGreaterThanMinInt = maxValueInt > largeValueInt; + System.out.println("Is maxValue > largeValue? (int) " + isMaxGreaterThanMinInt); + + // Test with long + long maxValueLong = Long.MAX_VALUE; + long largeValueLong = 1_000_000_000_000L; + + long sumLong = maxValueLong + largeValueLong; // Overflow possible + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + + boolean isMaxGreaterThanLargeValueLong = maxValueLong > largeValueLong; + System.out.println("Is maxValue > largeValue? (long) " + isMaxGreaterThanLargeValueLong); + + // Test with double + double maxValueDouble = Double.MAX_VALUE; + double largeValueDouble = 1e100; + + double sumDouble = maxValueDouble + largeValueDouble; + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + + boolean isMaxGreaterThanLargeValueDouble = maxValueDouble > largeValueDouble; + System.out.println("Is maxValue > largeValue? (double) " + isMaxGreaterThanLargeValueDouble); + + // Test with float + float maxValueFloat = Float.MAX_VALUE; + float largeValueFloat = 1e30f; + + if (true) { + float sumFloat = maxValueFloat + largeValueFloat; + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + } + + boolean isMaxGreaterThanLargeValueFloat = maxValueFloat > largeValueFloat; + System.out.println("Is maxValue > largeValue? (float) " + isMaxGreaterThanLargeValueFloat); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_3.java new file mode 100644 index 0000000000..9acbf09ba7 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_3.java @@ -0,0 +1,48 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class BigNumbers_mutation_3 { + + public static void main(String[] args) { + // Test with int + int maxValueInt = Integer.MAX_VALUE; + int largeValueInt = 1_000_000_000; + + int sumIntTemp = maxValueInt + largeValueInt; // Overflow possible + int sumInt = sumIntTemp; // Store the result in a temporary variable + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + + boolean isMaxGreaterThanMinInt = maxValueInt > largeValueInt; + System.out.println("Is maxValue > largeValue? (int) " + isMaxGreaterThanMinInt); + + // Test with long + long maxValueLong = Long.MAX_VALUE; + long largeValueLong = 1_000_000_000_000L; + + long sumLong = maxValueLong + largeValueLong; // Overflow possible + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + + boolean isMaxGreaterThanLargeValueLong = maxValueLong > largeValueLong; + System.out.println("Is maxValue > largeValue? (long) " + isMaxGreaterThanLargeValueLong); + + // Test with double + double maxValueDouble = Double.MAX_VALUE; + double largeValueDouble = 1e100; + + double sumDouble = maxValueDouble + largeValueDouble; + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + + boolean isMaxGreaterThanLargeValueDouble = maxValueDouble > largeValueDouble; + System.out.println("Is maxValue > largeValue? (double) " + isMaxGreaterThanLargeValueDouble); + + // Test with float + float maxValueFloat = Float.MAX_VALUE; + float largeValueFloat = 1e30f; + + float sumFloat = maxValueFloat + largeValueFloat; + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + + boolean isMaxGreaterThanLargeValueFloat = maxValueFloat > largeValueFloat; + System.out.println("Is maxValue > largeValue? (float) " + isMaxGreaterThanLargeValueFloat); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_4.java new file mode 100644 index 0000000000..43973a4440 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_4.java @@ -0,0 +1,48 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class BigNumbers_mutation_4 { + + public static void main(String[] args) { + // Test with int + int maxValueInt = Integer.MAX_VALUE; + int largeValueInt = 1_000_000_000; + + int sumIntTemp = maxValueInt + largeValueInt; // Store the result in a temp variable + int sumInt = sumIntTemp; // Use the temp variable + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + + boolean isMaxGreaterThanMinInt = maxValueInt > largeValueInt; + System.out.println("Is maxValue > largeValue? (int) " + isMaxGreaterThanMinInt); + + // Test with long + long maxValueLong = Long.MAX_VALUE; + long largeValueLong = 1_000_000_000_000L; + + long sumLong = maxValueLong + largeValueLong; // Overflow possible + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + + boolean isMaxGreaterThanLargeValueLong = maxValueLong > largeValueLong; + System.out.println("Is maxValue > largeValue? (long) " + isMaxGreaterThanLargeValueLong); + + // Test with double + double maxValueDouble = Double.MAX_VALUE; + double largeValueDouble = 1e100; + + double sumDouble = maxValueDouble + largeValueDouble; + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + + boolean isMaxGreaterThanLargeValueDouble = maxValueDouble > largeValueDouble; + System.out.println("Is maxValue > largeValue? (double) " + isMaxGreaterThanLargeValueDouble); + + // Test with float + float maxValueFloat = Float.MAX_VALUE; + float largeValueFloat = 1e30f; + + float sumFloat = maxValueFloat + largeValueFloat; + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + + boolean isMaxGreaterThanLargeValueFloat = maxValueFloat > largeValueFloat; + System.out.println("Is maxValue > largeValue? (float) " + isMaxGreaterThanLargeValueFloat); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_5.java new file mode 100644 index 0000000000..73c0f45458 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/BigNumbers/BigNumbers_mutation_5.java @@ -0,0 +1,46 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class BigNumbers_mutation_5 { + + public static class MyNumbers { + public static int maxValueInt = Integer.MAX_VALUE; + public static long maxValueLong = Long.MAX_VALUE; + public static double maxValueDouble = Double.MAX_VALUE; + public static float maxValueFloat = Float.MAX_VALUE; + } + + public static void main(String[] args) { + // Test with int + int largeValueInt = 1_000_000_000; + int sumInt = MyNumbers.maxValueInt + largeValueInt; // Overflow possible + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + + boolean isMaxGreaterThanMinInt = MyNumbers.maxValueInt > largeValueInt; + System.out.println("Is maxValue > largeValue? (int) " + isMaxGreaterThanMinInt); + + // Test with long + long largeValueLong = 1_000_000_000_000L; + long sumLong = MyNumbers.maxValueLong + largeValueLong; // Overflow possible + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + + boolean isMaxGreaterThanLargeValueLong = MyNumbers.maxValueLong > largeValueLong; + System.out.println("Is maxValue > largeValue? (long) " + isMaxGreaterThanLargeValueLong); + + // Test with double + double largeValueDouble = 1e100; + double sumDouble = MyNumbers.maxValueDouble + largeValueDouble; + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + + boolean isMaxGreaterThanLargeValueDouble = MyNumbers.maxValueDouble > largeValueDouble; + System.out.println("Is maxValue > largeValue? (double) " + isMaxGreaterThanLargeValueDouble); + + // Test with float + float largeValueFloat = 1e30f; + float sumFloat = MyNumbers.maxValueFloat + largeValueFloat; + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + + boolean isMaxGreaterThanLargeValueFloat = MyNumbers.maxValueFloat > largeValueFloat; + System.out.println("Is maxValue > largeValue? (float) " + isMaxGreaterThanLargeValueFloat); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException.java b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException.java new file mode 100644 index 0000000000..6cd4d4a026 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException.java @@ -0,0 +1,78 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CaughtException { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result = 10 / 0; // This causes an ArithmeticException + } catch (Exception e) { + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (NullPointerException e) { + System.out.println("Caught NullPointerException in Test 6 (should not be printed)"); + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_1.java new file mode 100644 index 0000000000..e9e413595f --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_1.java @@ -0,0 +1,78 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CaughtException_mutation_1 { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result = 10 / 0; // This causes an ArithmeticException + } catch (Exception e) { + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (NullPointerException e) { + System.out.println("Caught NullPointerException in Test 6 (should not be printed)"); + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + int[] arr = {5}; int x = arr[0]; exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_2.java new file mode 100644 index 0000000000..12e9e84d46 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_2.java @@ -0,0 +1,79 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CaughtException_mutation_2 { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result[] = new int[1]; + result[0] = 10 / 0; // This causes an ArithmeticException + } catch (Exception e) { + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (NullPointerException e) { + System.out.println("Caught NullPointerException in Test 6 (should not be printed)"); + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_3.java new file mode 100644 index 0000000000..e3bced13b6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_3.java @@ -0,0 +1,79 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CaughtException_mutation_3 { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + int result = 5 + 5; // calculation stored in a temporary variable + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result = 10 / 0; // This causes an ArithmeticException + } catch (Exception e) { + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (NullPointerException e) { + System.out.println("Caught NullPointerException in Test 6 (should not be printed)"); + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_4.java new file mode 100644 index 0000000000..75a7669768 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_4.java @@ -0,0 +1,76 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CaughtException_mutation_4 { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result = 10 / 0; // This causes an ArithmeticException + } catch (ArithmeticException e) { // modified to catch ArithmeticException + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_5.java new file mode 100644 index 0000000000..3221bedf19 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CaughtException/CaughtException_mutation_5.java @@ -0,0 +1,78 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CaughtException_mutation_5 { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result = 10 / 0; // This causes an ArithmeticException + } catch (Exception e) { + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (NullPointerException e) { + System.out.println("Caught NullPointerException in Test 6 (should not be printed)"); + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + if (true) exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast.java b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast.java new file mode 100644 index 0000000000..28aa1960fb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast.java @@ -0,0 +1,23 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CheckCast { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + String str = (String) obj; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + str); + + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_1.java new file mode 100644 index 0000000000..30416f8c99 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_1.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CheckCast_mutation_1 { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + if (true) { + String str = (String) obj; // Valid CHECKCAST + } + System.out.println("Successfully casted to String: " + obj); + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_2.java new file mode 100644 index 0000000000..57db56a2ea --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_2.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CheckCast_mutation_2 { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + System.out.println("Successfully casted to String: " + (String) obj); + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_3.java new file mode 100644 index 0000000000..bede569966 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_3.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CheckCast_mutation_3 { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + String str = castToType(obj, String.class); // Valid CHECKCAST + System.out.println("Successfully casted to String: " + str); + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } + + public static T castToType(Object obj, Class clazz) { + return clazz.cast(obj); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_4.java new file mode 100644 index 0000000000..7369483c49 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_4.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CheckCast_mutation_4 { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + if (true) { + String str = (String) obj; // Valid CHECKCAST + } + System.out.println("Successfully casted to String: " + obj); + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_5.java new file mode 100644 index 0000000000..eb0ed60428 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/CheckCast/CheckCast_mutation_5.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class CheckCast_mutation_5 { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + System.out.println("Successfully casted to String: " + (String) obj); + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare.java b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare.java new file mode 100644 index 0000000000..82eef1a99b --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Compare { + + public static void main(String[] args) { + // Float comparison + float f1 = 10.5f; + float f2 = 20.5f; + int floatComparisonResult = Float.compare(f1, f2); + System.out.println("Float comparison result: " + floatComparisonResult); + + // Double comparison + double d1 = 100.123; + double d2 = 100.456; + int doubleComparisonResult = Double.compare(d1, d2); + System.out.println("Double comparison result: " + doubleComparisonResult); + + // Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + int longComparisonResult = Long.compare(l1, l2); + System.out.println("Long comparison result: " + longComparisonResult); + + // Combining results + int combinedResult = floatComparisonResult + doubleComparisonResult + longComparisonResult; + System.out.println("Combined result: " + combinedResult); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_1.java new file mode 100644 index 0000000000..16f08205ae --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_1.java @@ -0,0 +1,32 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Compare_mutation_1 { + + public static void main(String[] args) { + // Float comparison + float f1 = 10.5f; + float f2 = 20.5f; + int floatComparisonResult = Float.compare(f1, f2); + int floatComparisonResultTemp = floatComparisonResult; // Temporary variable + System.out.println("Float comparison result: " + floatComparisonResult); + + // Double comparison + double d1 = 100.123; + double d2 = 100.456; + int doubleComparisonResult = Double.compare(d1, d2); + int doubleComparisonResultTemp = doubleComparisonResult; // Temporary variable + System.out.println("Double comparison result: " + doubleComparisonResult); + + // Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + int longComparisonResult = Long.compare(l1, l2); + int longComparisonResultTemp = longComparisonResult; // Temporary variable + System.out.println("Long comparison result: " + longComparisonResult); + + // Combining results + int combinedResult = floatComparisonResultTemp + doubleComparisonResultTemp + longComparisonResultTemp; + System.out.println("Combined result: " + combinedResult); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_2.java new file mode 100644 index 0000000000..f0d0354462 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_2.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Compare_mutation_2 { + + public static void main(String[] args) { + // Float comparison + float f1 = 10.5f; + float f2 = 20.5f; + int floatComparisonResult = Float.compare(f1, f2); + System.out.println("Float comparison result: " + floatComparisonResult); + + // Double comparison + double d1 = 100.123; + double d2 = 100.456; + int doubleComparisonResult = Double.compare(d1, d2); + System.out.println("Double comparison result: " + doubleComparisonResult); + + // Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + int longComparisonResult = Long.compare(l1, l2); + System.out.println("Long comparison result: " + longComparisonResult); + + // Combining results + if (true) { + int combinedResult = floatComparisonResult + doubleComparisonResult + longComparisonResult; + System.out.println("Combined result: " + combinedResult); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_3.java new file mode 100644 index 0000000000..1a716ec7e8 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_3.java @@ -0,0 +1,32 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Compare_mutation_3 { + + public static void main(String[] args) { + // Float comparison + float f1 = 10.5f; + float f2 = 20.5f; + int floatComparisonResult = Float.compare(f1, f2); + int floatResult = floatComparisonResult; // Store the result in a temporary variable + System.out.println("Float comparison result: " + floatResult); + + // Double comparison + double d1 = 100.123; + double d2 = 100.456; + int doubleComparisonResult = Double.compare(d1, d2); + int doubleResult = doubleComparisonResult; // Store the result in a temporary variable + System.out.println("Double comparison result: " + doubleResult); + + // Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + int longComparisonResult = Long.compare(l1, l2); + int longResult = longComparisonResult; // Store the result in a temporary variable + System.out.println("Long comparison result: " + longResult); + + // Combining results + int combinedResult = floatResult + doubleResult + longResult; + System.out.println("Combined result: " + combinedResult); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_4.java new file mode 100644 index 0000000000..ae6e488de4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_4.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Compare_mutation_4 { + + public static void main(String[] args) { + // Float comparison + float f1 = 10.5f; + float f2 = 20.5f; + int floatComparisonResult = Float.compare(f1, f2); + System.out.println("Float comparison result: " + floatComparisonResult); + + // Double comparison + double d1 = 100.123; + double d2 = 100.456; + int doubleComparisonResult = Double.compare(d1, d2); + System.out.println("Double comparison result: " + doubleComparisonResult); + + // Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + int longComparisonResult = Long.compare(l1, l2); + System.out.println("Long comparison result: " + longComparisonResult); + + // Combining results + if (true) { + int combinedResult = floatComparisonResult + doubleComparisonResult + longComparisonResult; + System.out.println("Combined result: " + combinedResult); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_5.java new file mode 100644 index 0000000000..5f91550aca --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Compare/Compare_mutation_5.java @@ -0,0 +1,30 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Compare_mutation_5 { + + public static void main(String[] args) { + // Float comparison + float[] fArray = {10.5f}; + float f1 = fArray[0]; + float f2 = 20.5f; + int floatComparisonResult = Float.compare(f1, f2); + System.out.println("Float comparison result: " + floatComparisonResult); + + // Double comparison + double d1 = 100.123; + double d2 = 100.456; + int doubleComparisonResult = Double.compare(d1, d2); + System.out.println("Double comparison result: " + doubleComparisonResult); + + // Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + int longComparisonResult = Long.compare(l1, l2); + System.out.println("Long comparison result: " + longComparisonResult); + + // Combining results + int combinedResult = floatComparisonResult + doubleComparisonResult + longComparisonResult; + System.out.println("Combined result: " + combinedResult); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants.java b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants.java new file mode 100644 index 0000000000..01e05868cf --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants.java @@ -0,0 +1,45 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Constants { + + public static void main(String[] args) { + // Integer constants + int intMin1 = -1; + int int0 = 0; + int int1 = 1; + int int127 = 127; // BIPUSH + int intBig = 100000; // LDC + + System.out.println("Integer Constants:"); + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int127 + ", " + intBig); + + // Float constants + float float0 = 0.0f; + float float1 = 1.0f; + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1); + + // Double constants + double double0 = 0.0; + double double1 = 1.0; + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1); + + // Long constants + long long0 = 0L; + long long1 = 1L; + + System.out.println("Long Constants:"); + System.out.println(long0 + ", " + long1); + + // String constants + String stringConst = "Hello!"; + String stringEmpty = ""; + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_1.java new file mode 100644 index 0000000000..cc86448af4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_1.java @@ -0,0 +1,47 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Constants_mutation_1 { + + public static void main(String[] args) { + // Integer constants + int intMin1 = -1; + int int0 = 0; + int int1 = 1; + int int127 = 127; // BIPUSH + int intBig = 100000; // LDC + + System.out.println("Integer Constants:"); + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int127 + ", " + intBig); + + // Float constants + float float0 = 0.0f; + float float1 = 1.0f; + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1); + + // Double constants + double double0 = 0.0; + double double1 = 1.0; + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1); + + // Long constants + long long0 = 0L; + long long1 = 1L; + + System.out.println("Long Constants:"); + if (true) { + System.out.println(long0 + ", " + long1); + } + + // String constants + String stringConst = "Hello!"; + String stringEmpty = ""; + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_2.java new file mode 100644 index 0000000000..7ebd45ea56 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_2.java @@ -0,0 +1,49 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Constants_mutation_2 { + + public static void main(String[] args) { + // Integer constants + int intMin1 = -1; + int int0 = 0; + int int1 = 1; + int int127 = 127; // BIPUSH + int intBig = 100000; // LDC + + System.out.println("Integer Constants:"); + printIntConstants(intMin1, int0, int1, int127, intBig); + + // Float constants + float float0 = 0.0f; + float float1 = 1.0f; + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1); + + // Double constants + double double0 = 0.0; + double double1 = 1.0; + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1); + + // Long constants + long long0 = 0L; + long long1 = 1L; + + System.out.println("Long Constants:"); + System.out.println(long0 + ", " + long1); + + // String constants + String stringConst = "Hello!"; + String stringEmpty = ""; + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + } + + public static void printIntConstants(int intMin1, int int0, int int1, int int127, int intBig) { + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int127 + ", " + intBig); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_3.java new file mode 100644 index 0000000000..813f79f66f --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_3.java @@ -0,0 +1,50 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Constants_mutation_3 { + + public static void main(String[] args) { + // Integer constants + int[] intArray = new int[]{-1, 0, 1, 127, 100000}; + int intMin1 = intArray[0]; + int int0 = intArray[1]; + int int1 = intArray[2]; + int int127 = intArray[3]; // BIPUSH + int intBig = intArray[4]; // LDC + + System.out.println("Integer Constants:"); + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int127 + ", " + intBig); + + // Float constants + float[] floatArray = new float[]{0.0f, 1.0f}; + float float0 = floatArray[0]; + float float1 = floatArray[1]; + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1); + + // Double constants + double[] doubleArray = new double[]{0.0, 1.0}; + double double0 = doubleArray[0]; + double double1 = doubleArray[1]; + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1); + + // Long constants + long[] longArray = new long[]{0L, 1L}; + long long0 = longArray[0]; + long long1 = longArray[1]; + + System.out.println("Long Constants:"); + System.out.println(long0 + ", " + long1); + + // String constants + String[] stringArray = new String[]{"Hello!", ""}; + String stringConst = stringArray[0]; + String stringEmpty = stringArray[1]; + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_4.java new file mode 100644 index 0000000000..0f892779e4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_4.java @@ -0,0 +1,47 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Constants_mutation_4 { + + public static void main(String[] args) { + // Integer constants + int intMin1 = -1; + int int0 = 0; + int int1 = 1; + int int127 = 127; // BIPUSH + int intBig = 100000; // LDC + + System.out.println("Integer Constants:"); + if (true) { + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int127 + ", " + intBig); + } + + // Float constants + float float0 = 0.0f; + float float1 = 1.0f; + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1); + + // Double constants + double double0 = 0.0; + double double1 = 1.0; + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1); + + // Long constants + long long0 = 0L; + long long1 = 1L; + + System.out.println("Long Constants:"); + System.out.println(long0 + ", " + long1); + + // String constants + String stringConst = "Hello!"; + String stringEmpty = ""; + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_5.java new file mode 100644 index 0000000000..2d4bd96369 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Constants/Constants_mutation_5.java @@ -0,0 +1,51 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Constants_mutation_5 { + + public static class myclass { + public int intBig = 0; + } + + public static void main(String[] args) { + // Integer constants + int intMin1 = -1; + int int0 = 0; + int int1 = 1; + int int127 = 127; // BIPUSH + myclass obj = new myclass(); + obj.intBig = 100000; + int intBig = obj.intBig; // LDC + + System.out.println("Integer Constants:"); + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int127 + ", " + intBig); + + // Float constants + float float0 = 0.0f; + float float1 = 1.0f; + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1); + + // Double constants + double double0 = 0.0; + double double1 = 1.0; + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1); + + // Long constants + long long0 = 0L; + long long1 = 1L; + + System.out.println("Long Constants:"); + System.out.println(long0 + ", " + long1); + + // String constants + String stringConst = "Hello!"; + String stringEmpty = ""; + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop.java b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop.java new file mode 100644 index 0000000000..9355e137b9 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ForLoop { + + public static void main(String[] args) { + // Simple for loop with int + int sum = 0; + for (int i = 0; i < 5; i++) { + sum += i; + } + System.out.println("Sum of first 5 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double product = 1.0; + for (int i = 1; i <= 3; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 3 numbers multiplied by 1.5: " + product); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_1.java new file mode 100644 index 0000000000..3f7f6eecfc --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_1.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ForLoop_mutation_1 { + + public static void main(String[] args) { + // Simple for loop with int + int sum = 0; + int temp = 0; + for (int i = 0; i < 5; i++) { + temp = i; + sum += temp; + } + System.out.println("Sum of first 5 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double product = 1.0; + for (int i = 1; i <= 3; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 3 numbers multiplied by 1.5: " + product); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_2.java new file mode 100644 index 0000000000..089885362a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_2.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ForLoop_mutation_2 { + + public static void main(String[] args) { + // Simple for loop with int + int sum = 0; + for (int i = 0; i < 5; i++) { + if (true) { + sum += i; + } + } + System.out.println("Sum of first 5 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double product = 1.0; + for (int i = 1; i <= 3; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 3 numbers multiplied by 1.5: " + product); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_3.java new file mode 100644 index 0000000000..d7dbf44d62 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_3.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ForLoop_mutation_3 { + + public static void main(String[] args) { + // Simple for loop with int + int sum = 0; + for (int i = 0; i < 5; i++) { + if (true) { + sum += i; + } + } + System.out.println("Sum of first 5 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double product = 1.0; + for (int i = 1; i <= 3; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 3 numbers multiplied by 1.5: " + product); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_4.java new file mode 100644 index 0000000000..4e2626a2ad --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_4.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ForLoop_mutation_4 { + + public static void main(String[] args) { + // Simple for loop with int + int[] sumArray = {0}; + int sum = sumArray[0]; + for (int i = 0; i < 5; i++) { + sum += i; + } + System.out.println("Sum of first 5 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double[] productArray = {1.0}; + double product = productArray[0]; + for (int i = 1; i <= 3; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 3 numbers multiplied by 1.5: " + product); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_5.java new file mode 100644 index 0000000000..99eb1fafe8 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ForLoop/ForLoop_mutation_5.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ForLoop_mutation_5 { + + public static void main(String[] args) { + // Simple for loop with int + int sum = 0; + for (int i = 0; i < 5; i++) { + if (true) { + sum += i; + } + } + System.out.println("Sum of first 5 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double product = 1.0; + for (int i = 1; i <= 3; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 3 numbers multiplied by 1.5: " + product); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/If/If.java b/OPAL/tac2bc/src/test/resources/mutation/If/If.java new file mode 100644 index 0000000000..875c69873c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/If/If.java @@ -0,0 +1,64 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class If { + public static void main(String[] args) { + // Simple if statement + int a = 10; + int b = 20; + if (a < b) { + System.out.println("a is less than b"); + } + + // If-else statement + int c = 15; + if (a > c) { + System.out.println("a is greater than c"); + } else { + System.out.println("a is not greater than c"); + } + + // If-else if-else statement + if (a < c) { + System.out.println("a is less than c"); + } else if (b > c) { + System.out.println("b is greater than c"); + } else { + System.out.println("Neither condition is true"); + } + + // Nested if statement + if (a < b) { + if (c < b) { + System.out.println("c is less than b"); + } else { + System.out.println("c is not less than b"); + } + } + + // Multiple conditions in if statement + boolean x = true; + boolean y = false; + if (x && !y) { + System.out.println("x is true and y is false"); + } + + // Object comparison using == + String str1 = "Hello"; + String str2 = "Hello"; + + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + + // Object comparison using equals() + String s1 = new String("test"); + String s2 = new String("test"); + + if (s1.equals(s2)) { + System.out.println("s1 equals s2: Both strings have the same value"); + } else { + System.out.println("s1 does not equal s2"); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_1.java new file mode 100644 index 0000000000..ac5f4b3ef8 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_1.java @@ -0,0 +1,65 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class If_mutation_1 { + public static void main(String[] args) { + // Simple if statement + int[] arr = {10}; + int a = arr[0]; + int b = 20; + if (a < b) { + System.out.println("a is less than b"); + } + + // If-else statement + int c = 15; + if (a > c) { + System.out.println("a is greater than c"); + } else { + System.out.println("a is not greater than c"); + } + + // If-else if-else statement + if (a < c) { + System.out.println("a is less than c"); + } else if (b > c) { + System.out.println("b is greater than c"); + } else { + System.out.println("Neither condition is true"); + } + + // Nested if statement + if (a < b) { + if (c < b) { + System.out.println("c is less than b"); + } else { + System.out.println("c is not less than b"); + } + } + + // Multiple conditions in if statement + boolean x = true; + boolean y = false; + if (x && !y) { + System.out.println("x is true and y is false"); + } + + // Object comparison using == + String str1 = "Hello"; + String str2 = "Hello"; + + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + + // Object comparison using equals() + String s1 = new String("test"); + String s2 = new String("test"); + + if (s1.equals(s2)) { + System.out.println("s1 equals s2: Both strings have the same value"); + } else { + System.out.println("s1 does not equal s2"); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_2.java new file mode 100644 index 0000000000..f2e20e70a3 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_2.java @@ -0,0 +1,66 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class If_mutation_2 { + public static void main(String[] args) { + // Simple if statement + int a = 10; + int b = 20; + if (a < b) { + if (true) { + System.out.println("a is less than b"); + } + } + + // If-else statement + int c = 15; + if (a > c) { + System.out.println("a is greater than c"); + } else { + System.out.println("a is not greater than c"); + } + + // If-else if-else statement + if (a < c) { + System.out.println("a is less than c"); + } else if (b > c) { + System.out.println("b is greater than c"); + } else { + System.out.println("Neither condition is true"); + } + + // Nested if statement + if (a < b) { + if (c < b) { + System.out.println("c is less than b"); + } else { + System.out.println("c is not less than b"); + } + } + + // Multiple conditions in if statement + boolean x = true; + boolean y = false; + if (x && !y) { + System.out.println("x is true and y is false"); + } + + // Object comparison using == + String str1 = "Hello"; + String str2 = "Hello"; + + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + + // Object comparison using equals() + String s1 = new String("test"); + String s2 = new String("test"); + + if (s1.equals(s2)) { + System.out.println("s1 equals s2: Both strings have the same value"); + } else { + System.out.println("s1 does not equal s2"); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_3.java new file mode 100644 index 0000000000..fa8d078aa9 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_3.java @@ -0,0 +1,66 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class If_mutation_3 { + public static void main(String[] args) { + // Simple if statement + int[] aArr = {10}; + int a = aArr[0]; + int b = 20; + if (a < b) { + System.out.println("a is less than b"); + } + + // If-else statement + int[] cArr = {15}; + int c = cArr[0]; + if (a > c) { + System.out.println("a is greater than c"); + } else { + System.out.println("a is not greater than c"); + } + + // If-else if-else statement + if (a < c) { + System.out.println("a is less than c"); + } else if (b > c) { + System.out.println("b is greater than c"); + } else { + System.out.println("Neither condition is true"); + } + + // Nested if statement + if (a < b) { + if (c < b) { + System.out.println("c is less than b"); + } else { + System.out.println("c is not less than b"); + } + } + + // Multiple conditions in if statement + boolean x = true; + boolean y = false; + if (x && !y) { + System.out.println("x is true and y is false"); + } + + // Object comparison using == + String str1 = "Hello"; + String str2 = "Hello"; + + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + + // Object comparison using equals() + String s1 = new String("test"); + String s2 = new String("test"); + + if (s1.equals(s2)) { + System.out.println("s1 equals s2: Both strings have the same value"); + } else { + System.out.println("s1 does not equal s2"); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_4.java new file mode 100644 index 0000000000..d8165cd464 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_4.java @@ -0,0 +1,64 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class If_mutation_4 { + public static void main(String[] args) { + // Simple if statement + int a = 10; + int b = 20; + if (a < b) { + System.out.println("a is less than b"); + } + + // If-else statement + int c = 15; + if (a > c) { + System.out.println("a is greater than c"); + } else { + System.out.println("a is not greater than c"); + } + + // If-else if-else statement + if (a < c) { + System.out.println("a is less than c"); + } else if (b > c) { + System.out.println("b is greater than c"); + } else { + System.out.println("Neither condition is true"); + } + + // Nested if statement + if (a < b) { + if (c < b) { + System.out.println("c is less than b"); + } else { + System.out.println("c is not less than b"); + } + } + + // Multiple conditions in if statement + boolean x = true; + boolean y = false; + if (x && !y) { + System.out.println("x is true and y is false"); + } + + // Object comparison using == + String str1 = "Hello"; + String str2 = "Hello"; + if (true) { + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + } + + // Object comparison using equals() + String s1 = new String("test"); + String s2 = new String("test"); + if (s1.equals(s2)) { + System.out.println("s1 equals s2: Both strings have the same value"); + } else { + System.out.println("s1 does not equal s2"); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_5.java new file mode 100644 index 0000000000..6b6c2bc86e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/If/If_mutation_5.java @@ -0,0 +1,64 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class If_mutation_5 { + public static void main(String[] args) { + // Simple if statement + int[] a = {10}; + int b = 20; + if (a[0] < b) { + System.out.println("a is less than b"); + } + + // If-else statement + int[] c = {15}; + if (a[0] > c[0]) { + System.out.println("a is greater than c"); + } else { + System.out.println("a is not greater than c"); + } + + // If-else if-else statement + if (a[0] < c[0]) { + System.out.println("a is less than c"); + } else if (b > c[0]) { + System.out.println("b is greater than c"); + } else { + System.out.println("Neither condition is true"); + } + + // Nested if statement + if (a[0] < b) { + if (c[0] < b) { + System.out.println("c is less than b"); + } else { + System.out.println("c is not less than b"); + } + } + + // Multiple conditions in if statement + boolean x = true; + boolean y = false; + if (x && !y) { + System.out.println("x is true and y is false"); + } + + // Object comparison using == + String str1 = "Hello"; + String str2 = "Hello"; + + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + + // Object comparison using equals() + String s1 = new String("test"); + String s2 = new String("test"); + + if (s1.equals(s2)) { + System.out.println("s1 equals s2: Both strings have the same value"); + } else { + System.out.println("s1 does not equal s2"); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero.java b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero.java new file mode 100644 index 0000000000..9f06639808 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class IfZero { + + public static void main(String[] args) { + // Test with a positive number, zero, and a negative number + int[] testValues = {10, 0, -5}; + + for (int value : testValues) { + compareWithZero(value); + } + } + + public static void compareWithZero(int k) { + if (k == 0) { + System.out.println("k is equal to zero."); + } else if (k > 0) { + System.out.println("k is greater than zero."); + } else { + System.out.println("k is less than zero."); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_1.java new file mode 100644 index 0000000000..61959253f6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_1.java @@ -0,0 +1,28 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class IfZero_mutation_1 { + + public static void main(String[] args) { + // Test with a positive number, zero, and a negative number + int[] testValues = {10, 0, -5}; + + for (int value : testValues) { + compareWithZero(value); + } + } + + public static void compareWithZero(int k) { + if (isZero(k)) { + System.out.println("k is equal to zero."); + } else if (k > 0) { + System.out.println("k is greater than zero."); + } else { + System.out.println("k is less than zero."); + } + } + + public static boolean isZero(int k) { + return k == 0; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_2.java new file mode 100644 index 0000000000..630d2f0bdc --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_2.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class IfZero_mutation_2 { + + public static void main(String[] args) { + // Test with a positive number, zero, and a negative number + int[] testValues = {10, 0, -5}; + + for (int value : testValues) { + compareWithZero(value); + } + } + + public static void compareWithZero(int k) { + if (k == 0) { + if (true) { + System.out.println("k is equal to zero."); + } + } else if (k > 0) { + System.out.println("k is greater than zero."); + } else { + System.out.println("k is less than zero."); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_3.java new file mode 100644 index 0000000000..6351257de4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_3.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class IfZero_mutation_3 { + + public static void main(String[] args) { + // Test with a positive number, zero, and a negative number + int[] testValues = {10, 0, -5}; + + for (int value : testValues) { + compareWithZero(value); + } + } + + public static void compareWithZero(int k) { + if (k == 0) { + System.out.println("k is equal to zero."); + } else if (true) { // redundant if statement + System.out.println("k is greater than zero."); + } else { + System.out.println("k is less than zero."); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_4.java new file mode 100644 index 0000000000..ad81b47fa4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_4.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class IfZero_mutation_4 { + + public static void main(String[] args) { + // Test with a positive number, zero, and a negative number + int[][] testValues = {{10}, {0}, {-5}}; + + for (int i = 0; i < testValues.length; i++) { + compareWithZero(testValues[i][0]); + } + } + + public static void compareWithZero(int k) { + if (k == 0) { + System.out.println("k is equal to zero."); + } else if (k > 0) { + System.out.println("k is greater than zero."); + } else { + System.out.println("k is less than zero."); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_5.java new file mode 100644 index 0000000000..bbdcc873ee --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/IfZero/IfZero_mutation_5.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class IfZero_mutation_5 { + + public static void main(String[] args) { + // Test with a positive number, zero, and a negative number + int[] testValues = {10, 0, -5}; + + for (int value : testValues) { + compareWithZero(value); + } + } + + public static void compareWithZero(int k) { + if (k == 0) { + if (true) { + System.out.println("k is equal to zero."); + } + } else if (k > 0) { + System.out.println("k is greater than zero."); + } else { + System.out.println("k is less than zero."); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField.java new file mode 100644 index 0000000000..dc8c3e460f --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField.java @@ -0,0 +1,13 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceField { + + private int instanceValue; + + public static void main(String[] args) { + InstanceField testInstance = new InstanceField(); + testInstance.instanceValue = 42; + System.out.println("Instance field value: " + testInstance.instanceValue); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_1.java new file mode 100644 index 0000000000..a361314ffa --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_1.java @@ -0,0 +1,14 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceField_mutation_1 { + + private int instanceValue; + + public static void main(String[] args) { + InstanceField_mutation_1 testInstance = new InstanceField_mutation_1(); + int value = 42; + testInstance.instanceValue = value; + System.out.println("Instance field value: " + testInstance.instanceValue); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_2.java new file mode 100644 index 0000000000..c885542929 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_2.java @@ -0,0 +1,16 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceField_mutation_2 { + + private int instanceValue; + + public InstanceField_mutation_2(int value) { + this.instanceValue = value; + } + + public static void main(String[] args) { + InstanceField_mutation_2 testInstance = new InstanceField_mutation_2(42); + System.out.println("Instance field value: " + testInstance.instanceValue); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_3.java new file mode 100644 index 0000000000..f4439f6677 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_3.java @@ -0,0 +1,17 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceField_mutation_3 { + + private int instanceValue; + + public static void main(String[] args) { + InstanceField_mutation_3 testInstance = new InstanceField_mutation_3(); + testInstance.assignValue(42); + System.out.println("Instance field value: " + testInstance.instanceValue); + } + + public void assignValue(int value) { + this.instanceValue = value; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_4.java new file mode 100644 index 0000000000..cc6f7278bd --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_4.java @@ -0,0 +1,17 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceField_mutation_4 { + + private int instanceValue; + + public static void main(String[] args) { + InstanceField_mutation_4 testInstance = new InstanceField_mutation_4(); + initializeField(testInstance, 42); + System.out.println("Instance field value: " + testInstance.instanceValue); + } + + private static void initializeField(InstanceField_mutation_4 instance, int value) { + instance.instanceValue = value; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_5.java new file mode 100644 index 0000000000..5a9c65cdf4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceField/InstanceField_mutation_5.java @@ -0,0 +1,13 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceField_mutation_5 { + + private Integer instanceValue; + + public static void main(String[] args) { + InstanceField_mutation_5 testInstance = new InstanceField_mutation_5(); + testInstance.instanceValue = Integer.valueOf(42); + System.out.println("Instance field value: " + testInstance.instanceValue); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf.java new file mode 100644 index 0000000000..aba2087048 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf.java @@ -0,0 +1,14 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceOf { + + public static void main(String[] args) { + // Test with String + Object obj = "Hello, World!"; + System.out.println("obj is an instance of String: " + (obj instanceof String)); // true + System.out.println("obj is an instance of CharSequence: " + (obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // false + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_1.java new file mode 100644 index 0000000000..d8a57e7e9e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_1.java @@ -0,0 +1,15 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceOf_mutation_1 { + + public static void main(String[] args) { + // Test with String + Object obj = "Hello, World!"; + boolean isString = obj instanceof String; + System.out.println("obj is an instance of String: " + isString); + System.out.println("obj is an instance of CharSequence: " + (obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // false + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_2.java new file mode 100644 index 0000000000..b37f369957 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_2.java @@ -0,0 +1,19 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceOf_mutation_2 { + + public static void main(String[] args) { + // Create a class with static fields + class MyClass { + static Object obj = "Hello, World!"; + static String str = "Hello, World!"; + static Integer integer = new Integer(5); + } + // Test with String + System.out.println("obj is an instance of String: " + (MyClass.obj instanceof String)); // true + System.out.println("obj is an instance of CharSequence: " + (MyClass.obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (MyClass.obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (MyClass.obj instanceof Integer)); // false + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_3.java new file mode 100644 index 0000000000..78b2d38928 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_3.java @@ -0,0 +1,16 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceOf_mutation_3 { + + public static final Object INSTANCE = new Object(); + + public static void main(String[] args) { + // Test with String + Object obj = INSTANCE; + System.out.println("obj is an instance of String: " + (obj instanceof String)); // true + System.out.println("obj is an instance of CharSequence: " + (obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // false + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_4.java new file mode 100644 index 0000000000..10b01cfbfb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_4.java @@ -0,0 +1,16 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceOf_mutation_4 { + + public static String mystaticstring = "Hello, World!"; + + public static void main(String[] args) { + // Test with String + Object obj = mystaticstring; + System.out.println("obj is an instance of String: " + (obj instanceof String)); // true + System.out.println("obj is an instance of CharSequence: " + (obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // false + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_5.java new file mode 100644 index 0000000000..a559572bfe --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InstanceOf/InstanceOf_mutation_5.java @@ -0,0 +1,15 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InstanceOf_mutation_5 { + + public static void main(String[] args) { + // Test with String + Object[] objArray = {"Hello, World!"}; + Object obj = objArray[0]; + System.out.println("obj is an instance of String: " + (obj instanceof String)); // true + System.out.println("obj is an instance of CharSequence: " + (obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // false + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic.java new file mode 100644 index 0000000000..75d5dcbde1 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InvokeDynamic { + + public static void main(String[] args) { + // Lambda Expression + Runnable r = () -> System.out.println("Running in a lambda!"); + r.run(); + + // String Concatenation + System.out.println("Hello, World!"); + + // Method Reference + new InvokeDynamic().methodReferenceExample(); + } + + public void methodReferenceExample() { + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_1.java new file mode 100644 index 0000000000..930cbff834 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_1.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InvokeDynamic_mutation_1 { + + public static void main(String[] args) { + // Lambda Expression + Runnable r = () -> System.out.println("Running in a lambda expression!"); + r.run(); + + // String Concatenation + String greeting = "Hello"; + String punctuation = "!"; + System.out.println(greeting + ", World" + punctuation); + + // Method Reference + InvokeDynamic_mutation_1 instance = new InvokeDynamic_mutation_1(); + instance.runMethodReference(); + } + + public void runMethodReference() { + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_2.java new file mode 100644 index 0000000000..85238529e7 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_2.java @@ -0,0 +1,30 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InvokeDynamic_mutation_2 { + + public static void main(String[] args) { + // Lambda Expression + Runnable r = () -> printLambdaMessage(); + r.run(); + + // String Concatenation + String message = buildMessage("Hello", "World"); + System.out.println(message); + + // Method Reference + new InvokeDynamic_mutation_2().methodReference(); + } + + private static void printLambdaMessage() { + System.out.println("Running in a lambda!"); + } + + private static String buildMessage(String part1, String part2) { + return part1 + ", " + part2 + "!"; + } + + public void methodReference() { + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_3.java new file mode 100644 index 0000000000..6da0652f0c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_3.java @@ -0,0 +1,30 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InvokeDynamic_mutation_3 { + + public static void main(String[] args) { + // Lambda Expression + Runnable r = () -> printLambdaMessage(); + r.run(); + + // String Concatenation + String message = buildMessage("Hello", "World"); + System.out.println(message); + + // Method Reference + new InvokeDynamic_mutation_3().methodReference(); + } + + private static void printLambdaMessage() { + System.out.println("Running in a lambda!"); + } + + private static String buildMessage(String part1, String part2) { + return part1 + ", " + part2 + "!"; + } + + public void methodReference() { + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_4.java new file mode 100644 index 0000000000..2ab73cbb50 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_4.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InvokeDynamic_mutation_4 { + + public static void main(String[] args) { + // Lambda Expression replaced with Method Reference + Runnable r = InvokeDynamic_mutation_4::printLambdaMessage; + r.run(); + + // String Concatenation using a method + printGreeting("Hello", "World"); + + // Method Reference + new InvokeDynamic_mutation_4().methodReferenceExample(); + } + + private static void printLambdaMessage() { + System.out.println("Running in a lambda!"); + } + + private static void printGreeting(String greeting, String target) { + System.out.println(greeting + ", " + target + "!"); + } + + public void methodReferenceExample() { + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_5.java new file mode 100644 index 0000000000..bb87f4efd2 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeDynamic/InvokeDynamic_mutation_5.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class InvokeDynamic_mutation_5 { + + public static void main(String[] args) { + // Lambda Expression remains the same + Runnable r = () -> System.out.println("Running in a lambda!"); + r.run(); + + // Simplified String Concatenation + String message = "Hello, World!"; + System.out.println(message); + + // Inlined Method Reference Example + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface.java new file mode 100644 index 0000000000..d4e7c13cb5 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Add elements to the list (invokeinterface) + myList.add("Hello"); + myList.add("World"); + + // Get the size of the list (invokeinterface) + int size = myList.size(); + System.out.println("Size of the list: " + size); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_1.java new file mode 100644 index 0000000000..82d306382d --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_1.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface_mutation_1 { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Add elements to the list (invokeinterface) + myList.add("Hello"); + myList.add("World"); + + // Get the size of the list (invokeinterface) + int size = getSize(myList); + System.out.println("Size of the list: " + size); + } + + public static int getSize(List myList) { + return myList.size(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_2.java new file mode 100644 index 0000000000..efa5609a3c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_2.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface_mutation_2 { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Add elements to the list + String[] arr = {"Hello"}; + myList.add(arr[0]); + + // Add elements to the list + String[] arr2 = {"World"}; + myList.add(arr2[0]); + + // Get the size of the list + int[] sizeArr = {myList.size()}; + System.out.println("Size of the list: " + sizeArr[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_3.java new file mode 100644 index 0000000000..5a5eccc40c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_3.java @@ -0,0 +1,27 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface_mutation_3 { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Add elements to the list (invokeinterface) + myList.add("Hello"); + myList.add("World"); + + // Calculate the size of the list + int size = myList.size(); + int calculatedSize = size; // Store the result in a temporary variable + + // Get the size of the list (invokeinterface) + System.out.println("Size of the list: " + calculatedSize); + + // Print the list + System.out.println("Elements of the list: " + myList); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_4.java new file mode 100644 index 0000000000..e1153f3f59 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_4.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface_mutation_4 { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Create an array of elements to be added to the list + String[] elements = {"Hello", "World"}; + + // Add elements to the list (invokeinterface) + for (String element : elements) { + myList.add(element); + } + + // Get the size of the list (invokeinterface) + int[] sizeArray = {myList.size()}; + System.out.println("Size of the list: " + sizeArray[0]); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_5.java new file mode 100644 index 0000000000..e288ceb1c7 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/InvokeInterface/InvokeInterface_mutation_5.java @@ -0,0 +1,27 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface_mutation_5 { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Create a class to hold the list size + class SizeHolder { + static int listSize = 0; + } + + // Add elements to the list + myList.add("Hello"); + myList.add("World"); + SizeHolder.listSize = myList.size(); + + // Get the size of the list from the SizeHolder class + int size = SizeHolder.listSize; + System.out.println("Size of the list: " + size); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr.java b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr.java new file mode 100644 index 0000000000..8408b7a893 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Jsr { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + executeSubroutine(); + System.out.println("After subroutine"); + } + + private static void executeSubroutine() { + System.out.println("In subroutine"); + // Simulating a subroutine with a loop or some operations + for (int i = 0; i < 3; i++) { + System.out.println("Subroutine iteration: " + i); + } + // Return from the subroutine (RET equivalent) + return; // RET is simulated by this return statement in Java + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_1.java new file mode 100644 index 0000000000..846fc6343b --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_1.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Jsr_mutation_1 { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + int[] arr = {3, 6}; + executeSubroutine(arr); + System.out.println("After subroutine"); + } + + private static void executeSubroutine(int[] arr) { + System.out.println("In subroutine"); + // Simulating a subroutine with a loop or some operations + for (int i = arr[0]; i < arr[1]; i++) { + System.out.println("Subroutine iteration: " + i); + } + // Return from the subroutine (RET equivalent) + return; // RET is simulated by this return statement in Java + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_2.java new file mode 100644 index 0000000000..7bf53387b8 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_2.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Jsr_mutation_2 { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + executeSubroutine(); + System.out.println("After subroutine"); + } + + private static void executeSubroutine() { + System.out.println("In subroutine"); + // Simulating a subroutine with a loop or some operations + for (int i = 0; i < 3; i++) { + System.out.println("Subroutine iteration: " + i); + } + if (true) { + return; // RET is simulated by this return statement in Java + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_3.java new file mode 100644 index 0000000000..94dccbb28e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_3.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Jsr_mutation_3 { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + executeSubroutine(); + System.out.println("After subroutine"); + } + + private static void executeSubroutine() { + System.out.println("In subroutine"); + for (int i = 0; i < 3; i++) { + printIteration(i); + System.out.println("Subroutine iteration: " + i); + } + // Return from the subroutine (RET equivalent) + return; // RET is simulated by this return statement in Java + } + + private static void printIteration(int i) { + System.out.println("Subroutine iteration: " + i); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_4.java new file mode 100644 index 0000000000..9ca36809cb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_4.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Jsr_mutation_4 { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + System.out.println("After subroutine"); + executeSubroutine(); + } + + private static void executeSubroutine() { + System.out.println("In subroutine"); + // Simulating a subroutine with a loop or some operations + for (int i = 0; i < 3; i++) { + System.out.println("Subroutine iteration: " + i); + } + // Return from the subroutine (RET equivalent) + return; // RET is simulated by this return statement in Java + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_5.java new file mode 100644 index 0000000000..77772b1aa0 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Jsr/Jsr_mutation_5.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Jsr_mutation_5 { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + executeSubroutine(); + System.out.println("After subroutine"); + } + + private static void executeSubroutine() { + System.out.println("In subroutine"); + for (int i = 0; i < 3; i++) { + printIteration(i); + } + // Return from the subroutine (RET equivalent) + return; // RET is simulated by this return statement in Java + } + + private static void printIteration(int i) { + System.out.println("Subroutine iteration: " + i); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall.java b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall.java new file mode 100644 index 0000000000..007aeba783 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall.java @@ -0,0 +1,17 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class MethodCall { + + public static void main(String[] args) { + // Instance method call + MethodCall instance = new MethodCall(); + int instanceResult = instance.instanceMethod(5, 3); + System.out.println("Instance method result: " + instanceResult); + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_1.java new file mode 100644 index 0000000000..ee6c7b3273 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_1.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class MethodCall_mutation_1 { + + public static void main(String[] args) { + // Instance method call + MethodCall_mutation_1 instance = new MethodCall_mutation_1(); + int instanceResult = instance.instanceMethod(5, 3); + int tempResult = instanceResult; // Temporary variable + System.out.println("Instance method result: " + tempResult); + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_2.java new file mode 100644 index 0000000000..c895d11fc3 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_2.java @@ -0,0 +1,19 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class MethodCall_mutation_2 { + + public static void main(String[] args) { + // Instance method call + MethodCall_mutation_2 instance = new MethodCall_mutation_2(); + int instanceResult = instance.instanceMethod(5, 3); + if (true) { // Redundant if statement + System.out.println("Instance method result: " + instanceResult); + } + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_3.java new file mode 100644 index 0000000000..68bd75e8b6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_3.java @@ -0,0 +1,16 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class MethodCall_mutation_3 { + + public static void main(String[] args) { + // Instance method call inlined + MethodCall_mutation_3 instance = new MethodCall_mutation_3(); + System.out.println("Instance method result: " + instance.instanceMethod(5, 3)); + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_4.java new file mode 100644 index 0000000000..e6fd364fbb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_4.java @@ -0,0 +1,17 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class MethodCall_mutation_4 { + + public static void main(String[] args) { + // Instance method call with parameters swapped + MethodCall_mutation_4 instance = new MethodCall_mutation_4(); + int instanceResult = instance.instanceMethod(3, 5); // Parameters swapped + System.out.println("Instance method result: " + instanceResult); + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_5.java new file mode 100644 index 0000000000..4a64f901d8 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/MethodCall/MethodCall_mutation_5.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class MethodCall_mutation_5 { + + public static void main(String[] args) { + // Instance method call + MethodCall_mutation_5 instance = new MethodCall_mutation_5(); + int instanceResult = instance.instanceMethod(5, 3); + instance.printResult(instanceResult); + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } + + // New method to print the result + public void printResult(int result) { + System.out.println("Instance method result: " + result); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation.java b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation.java new file mode 100644 index 0000000000..b90cd2e866 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation.java @@ -0,0 +1,27 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Negation { + + public static void main(String[] args) { + // Integer negation + int intValue = 42; + int negatedInt = -intValue; + System.out.println("Negated int: " + negatedInt); + + // Long negation + long longValue = 123456789L; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float floatValue = 3.14f; + float negatedFloat = -floatValue; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double doubleValue = 2.71828; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_1.java new file mode 100644 index 0000000000..aeae74109b --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_1.java @@ -0,0 +1,27 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Negation_mutation_1 { + + public static void main(String[] args) { + // Integer negation + int[] intValueArr = {42}; + int negatedInt = -intValueArr[0]; + System.out.println("Negated int: " + negatedInt); + + // Long negation + long longValue = 123456789L; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float[] floatValueArr = {(float) 3.14}; + float negatedFloat = -floatValueArr[0]; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double doubleValue = 2.71828; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_2.java new file mode 100644 index 0000000000..84c7691eb0 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_2.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Negation_mutation_2 { + + public static void main(String[] args) { + // Integer negation + int intValue = 42; + int negatedInt = negate(intValue); + System.out.println("Negated int: " + negatedInt); + + // Long negation + long longValue = 123456789L; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float floatValue = 3.14f; + float negatedFloat = -floatValue; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double doubleValue = 2.71828; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + } + + public static int negate(int value) { + return -value; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_3.java new file mode 100644 index 0000000000..a2f240bc5e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_3.java @@ -0,0 +1,30 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Negation_mutation_3 { + + public static void main(String[] args) { + // Integer negation + int[] intArr = {42}; + int intValue = intArr[0]; + int negatedInt = -intValue; + System.out.println("Negated int: " + negatedInt); + + // Long negation + long longValue = 123456789L; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float[] floatArr = {(float) 3.14}; + float floatValue = floatArr[0]; + float negatedFloat = -floatValue; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double[] doubleArr = {2.71828}; + double doubleValue = doubleArr[0]; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_4.java new file mode 100644 index 0000000000..5d5cc3e1ea --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_4.java @@ -0,0 +1,32 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Negation_mutation_4 { + + private static int INT_FIELD = 42; + private static long LONG_FIELD = 123456789L; + private static float FLOAT_FIELD = 3.14f; + private static double DOUBLE_FIELD = 2.71828; + + public static void main(String[] args) { + // Integer negation + int intValue = INT_FIELD; + int negatedInt = -intValue; + System.out.println("Negated int: " + negatedInt); + + // Long negation + long longValue = LONG_FIELD; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float floatValue = FLOAT_FIELD; + float negatedFloat = -floatValue; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double doubleValue = DOUBLE_FIELD; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_5.java new file mode 100644 index 0000000000..ee8649ec42 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Negation/Negation_mutation_5.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Negation_mutation_5 { + + public static void main(String[] args) { + // Integer negation + int intValue = 42; + if (true) { + int negatedInt = -intValue; + } + System.out.println("Negated int: " + intValue); + + // Long negation + long longValue = 123456789L; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float floatValue = 3.14f; + float negatedFloat = -floatValue; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double doubleValue = 2.71828; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess.java b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess.java new file mode 100644 index 0000000000..e2ccccf735 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ObjectPropertyAccess { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess test = new ObjectPropertyAccess(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.i = 4; // Refers to m[4] = 50 + this.j = 3; // Refers to m[3] = 40 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 1 (m[4] - m[3]): k = " + this.k); // Expected: 10 + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_1.java new file mode 100644 index 0000000000..fc79e71186 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_1.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ObjectPropertyAccess_mutation_1 { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess_mutation_1 test = new ObjectPropertyAccess_mutation_1(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.i = 4; // Refers to m[4] = 50 + this.j = 3; // Refers to m[3] = 40 + int tempResult = this.m[this.i] - this.m[this.j]; // Temporary variable + this.k = tempResult; + System.out.println("Test 1 (m[4] - m[3]): k = " + this.k); // Expected: 10 + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_2.java new file mode 100644 index 0000000000..42adf7c511 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_2.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ObjectPropertyAccess_mutation_2 { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess_mutation_2 test = new ObjectPropertyAccess_mutation_2(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.i = 4; // Refers to m[4] = 50 + this.j = 3; // Refers to m[3] = 40 + if (true) { // Redundant if statement + this.k = this.m[this.i] - this.m[this.j]; + } + System.out.println("Test 1 (m[4] - m[3]): k = " + this.k); // Expected: 10 + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_3.java new file mode 100644 index 0000000000..fcd4b765aa --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_3.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ObjectPropertyAccess_mutation_3 { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess_mutation_3 test = new ObjectPropertyAccess_mutation_3(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.i = 4; // Refers to m[4] = 50 + this.j = 3; // Refers to m[3] = 40 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 1 (m[4] - m[3]): k = " + (this.m[this.i] - this.m[this.j])); // Inlined subtraction + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_4.java new file mode 100644 index 0000000000..50a7acad5c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_4.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ObjectPropertyAccess_mutation_4 { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess_mutation_4 test = new ObjectPropertyAccess_mutation_4(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.j = 3; // Refers to m[3] = 40 + this.i = 4; // Refers to m[4] = 50 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 1 (m[4] - m[3]): k = " + this.k); // Expected: 10 + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_5.java new file mode 100644 index 0000000000..c19b6f5ed4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ObjectPropertyAccess/ObjectPropertyAccess_mutation_5.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ObjectPropertyAccess_mutation_5 { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess_mutation_5 test = new ObjectPropertyAccess_mutation_5(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.i = 4; // Refers to m[4] = 50 + this.j = 3; // Refers to m[3] = 40 + this.k = calculateDifference(this.i, this.j); + System.out.println("Test 1 (m[4] - m[3]): k = " + this.k); // Expected: 10 + } + + // New method to calculate the difference + private int calculateDifference(int i, int j) { + return this.m[i] - this.m[j]; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters.java b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters.java new file mode 100644 index 0000000000..8dfe1d1c11 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Parameters { + + public static void main(String[] args) { + // Test with primitive types + int a = 10; + double b = 20.5; + char c = 'A'; + + System.out.println("Sum of int and double: " + sum(a, b)); + } + + // Method with primitive parameters + public static double sum(int x, double y) { + return x + y; + } + +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_1.java new file mode 100644 index 0000000000..8724bf62c2 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_1.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Parameters_mutation_1 { + + public static void main(String[] args) { + // Test with primitive types + int a = 10; + double b = 20.5; + char c = 'A'; + + double sumResult = sum(a, b); + System.out.println("Sum of int and double: " + sumResult); + } + + // Method with primitive parameters + public static double sum(int x, double y) { + return x + y; + } + +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_2.java new file mode 100644 index 0000000000..4024319963 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_2.java @@ -0,0 +1,19 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Parameters_mutation_2 { + + public static void main(String[] args) { + // Test with primitive types + int[] aArray = {10}; + double b = 20.5; + char c = 'A'; + + System.out.println("Sum of int and double: " + sum(aArray[0], b)); + } + + // Method with primitive parameters + public static double sum(int x, double y) { + return x + y; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_3.java new file mode 100644 index 0000000000..062bbd1f06 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_3.java @@ -0,0 +1,27 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Parameters_mutation_3 { + + public static void main(String[] args) { + // Create a class with static fields + Parameters_mutation_3 myclass = new Parameters_mutation_3(); + + // Test with primitive types + int a = myclass.x; // replaced direct value assignment with an assignment through a new instance + double b = myclass.y; + char c = myclass.charValue; + + System.out.println("Sum of int and double: " + sum(a, b)); + } + + // Method with primitive parameters + public static double sum(int x, double y) { + return x + y; + } + + // Static fields + public static int x = 10; + public static double y = 20.5; + public static char charValue = 'A'; +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_4.java new file mode 100644 index 0000000000..da830cddcb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_4.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Parameters_mutation_4 { + + public static void main(String[] args) { + // Test with primitive types + int a = 10; + double b = 20.5; + char c = 'A'; + + // Create a new instance of Parameters + Parameters_mutation_4 myclass = new Parameters_mutation_4(); + + System.out.println("Sum of int and double: " + sum(a, myclass.myDouble)); + } + + // Method with primitive parameters + public double myDouble = 0.0; + + public static double sum(int x, double y) { + return x + y; + } + +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_5.java new file mode 100644 index 0000000000..dc8e916a93 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Parameters/Parameters_mutation_5.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Parameters_mutation_5{ + + public static void main(String[] args) { + // Test with primitive types + int a = Parameters_mutation_5.fieldInt; + double b = Parameters_mutation_5.fieldDouble; + char c = Parameters_mutation_5.fieldChar; + + System.out.println("Sum of int and double: " + sum(a, b)); + } + + // Method with primitive parameters + public static double sum(int x, double y) { + return x + y; + } + + static { + fieldInt = 10; + fieldDouble = 20.5; + fieldChar = 'A'; + } + + static int fieldInt; + static double fieldDouble; + static char fieldChar; +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast.java b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast.java new file mode 100644 index 0000000000..729173f0d5 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class PrimitiveTypeCast { + + public static void main(String[] args) { + // Initial values + int intValue = 100; + + //Cast to different types + + // int to byte, short, char + byte byteValue = (byte) intValue; + + // Output the results + System.out.println("int to byte: " + byteValue); + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_1.java new file mode 100644 index 0000000000..c642d9612c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_1.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class PrimitiveTypeCast_mutation_1 { + + public static void main(String[] args) { + // Initial values + int intValue = 100; + + // Calculate the result + int intermediateValue = intValue - 50; + + //Cast to different types + + // int to byte, short, char + byte byteValue = (byte) intermediateValue; + + // Output the results + System.out.println("int to byte: " + byteValue); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_2.java new file mode 100644 index 0000000000..f68af16ddd --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_2.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class PrimitiveTypeCast_mutation_2 { + + public static void main(String[] args) { + // Initial values + int intValue = 100; + + //Cast to different types + + // int to byte, short, char + if (true) { + byte byteValue = (byte) intValue; + } + + // Output the results + System.out.println("int to byte: " + (byte) intValue); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_3.java new file mode 100644 index 0000000000..234303dea3 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_3.java @@ -0,0 +1,18 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class PrimitiveTypeCast_mutation_3 { + + public static void main(String[] args) { + // Initial values + int[] intValueArr = {100}; + + //Cast to different types + + // int to byte, short, char + byte byteValue = (byte) intValueArr[0]; + + // Output the results + System.out.println("int to byte: " + byteValue); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_4.java new file mode 100644 index 0000000000..717a16041e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_4.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class PrimitiveTypeCast_mutation_4 { + + public static void main(String[] args) { + // Initial values + int intValue = 100; + + // Perform a calculation + int calculationResult = intValue * 2; + + //Cast to different types + + // Store the result in a temporary variable + byte byteValue = (byte) calculationResult; + + // Output the results + System.out.println("int to byte: " + byteValue); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_5.java new file mode 100644 index 0000000000..1f604a545b --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/PrimitiveTypeCast/PrimitiveTypeCast_mutation_5.java @@ -0,0 +1,16 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class PrimitiveTypeCast_mutation_5 { + + public static void main(String[] args) { + // Initial values + int intValue = 100; + + // Output the results + System.out.println("int to byte: " + (byte) intValue); + + // int to byte, short, char + byte byteValue = (byte) intValue; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment.java b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment.java new file mode 100644 index 0000000000..4de4b36d07 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment.java @@ -0,0 +1,20 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Reassignment { + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Integer.MAX_VALUE; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + // Conditional reassignment + if (-3< 0) { + x = Integer.MAX_VALUE+5; + System.out.println("After conditional reassignment, x: " + x); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_1.java new file mode 100644 index 0000000000..c4abdf4cf1 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_1.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Reassignment_mutation_1 { + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Integer.MAX_VALUE; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + // Conditional reassignment + int[] arr = {Integer.MAX_VALUE+5}; + if (-3< 0) { + x = arr[0]; + System.out.println("After conditional reassignment, x: " + x); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_2.java new file mode 100644 index 0000000000..c7ce56effd --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_2.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Reassignment_mutation_2 { + + public static class Myclass { + public static int field = Integer.MAX_VALUE; + } + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Myclass.field; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + // Conditional reassignment + if (-3< 0) { + x = Myclass.field + 5; + System.out.println("After conditional reassignment, x: " + x); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_3.java new file mode 100644 index 0000000000..b79f1cc5d5 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_3.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Reassignment_mutation_3 { + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Integer.MAX_VALUE; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + // Conditional reassignment + x = performCalculation(x); + System.out.println("After conditional reassignment, x: " + x); + } + + public static int performCalculation(int x) { + if (-3 < 0) { + return Integer.MAX_VALUE + 5; + } + return x; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_4.java new file mode 100644 index 0000000000..b177542cf0 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_4.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Reassignment_mutation_4 { + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Integer.MAX_VALUE; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + System.out.println("After conditional reassignment, x: " + x); + + // Conditional reassignment + if (-3< 0) { + x = Integer.MAX_VALUE+5; + } + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_5.java new file mode 100644 index 0000000000..3ce925c6e3 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Reassignment/Reassignment_mutation_5.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Reassignment_mutation_5 { + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Integer.MAX_VALUE; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + // Conditional reassignment + if (-3< 0) { + int temp = Integer.MAX_VALUE+5; + x = temp; + System.out.println("After conditional reassignment, x: " + x); + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField.java b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField.java new file mode 100644 index 0000000000..c0710e59dc --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class StaticField { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Set the static field + setStaticValue(42); + + // Get the static field value and print it + System.out.println("Static field value: " + getStaticValue()); + } + + // Method to set the static field + public static void setStaticValue(int value) { + staticValue = value; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_1.java new file mode 100644 index 0000000000..2a7abc501e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_1.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class StaticField_mutation_1 { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Perform a calculation and store the result in a temporary variable + int temp = 42; + + // Set the static field + setStaticValue(temp); + + // Get the static field value and print it + System.out.println("Static field value: " + getStaticValue()); + } + + // Method to set the static field + public static void setStaticValue(int value) { + staticValue = value; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_2.java new file mode 100644 index 0000000000..32259fcb55 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_2.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class StaticField_mutation_2 { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Set the static field + StaticField_mutation_2.staticValue = 42; // replaced direct assignment with assignment through a static field + + // Get the static field value and print it + System.out.println("Static field value: " + getStaticValue()); + } + + // Method to set the static field + public static void setStaticValue(int value) { + staticValue = value; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_3.java new file mode 100644 index 0000000000..cbb21852e9 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_3.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class StaticField_mutation_3 { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Set the static field + staticValue = 42; // replaced setStaticValue(42) with staticValue = 42 + + // Get the static field value and print it + System.out.println("Static field value: " + staticValue); + } + + // Method to set the static field + public static void setStaticValue(int value) { + staticValue = value; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_4.java new file mode 100644 index 0000000000..218182fbaf --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_4.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class StaticField_mutation_4 { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Set the static field + setStaticValue(42); + + // Print the static field value + printStaticFieldValue(); + } + + // Method to set the static field + public static void setStaticValue(int value) { + staticValue = value; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } + + // Method to print the static field value + public static void printStaticFieldValue() { + System.out.println("Static field value: " + getStaticValue()); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_5.java new file mode 100644 index 0000000000..a0ccb9fa05 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/StaticField/StaticField_mutation_5.java @@ -0,0 +1,32 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class StaticField_mutation_5 { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Set the static field + setStaticValue(42); + + // Get the static field value and print it + System.out.println("Static field value: " + getStaticValue()); + } + + // Method to set the static field + public static void setStaticValue(int value) { + calculateStaticValue(value); + staticValue = value; + } + + // Method to calculate and set the static field value + public static void calculateStaticValue(int value) { + value = value * 2; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch.java b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch.java new file mode 100644 index 0000000000..1ca714a796 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Switch { + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + + // Loop through all possible fruits + for (String fruit : fruits) { + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + switch (fruit) { + case "Banana": + System.out.println(fruit + " is a fruit"); + break; + case "Brocoli": + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_1.java new file mode 100644 index 0000000000..9e58edd406 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_1.java @@ -0,0 +1,31 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Switch_mutation_1 { + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + + // Loop through all possible fruits + for (String fruit : fruits) { + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + switch (fruit) { + case "Banana": + if (true) { + System.out.println(fruit + " is a fruit"); + } + break; + case "Brocoli": + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_2.java new file mode 100644 index 0000000000..e528e85296 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_2.java @@ -0,0 +1,36 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Switch_mutation_2 { + + static class Myclass { + static int field = 5; + } + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + Myclass myclass = new Myclass(); + + // Loop through all possible fruits + for (String fruit : fruits) { + int x = myclass.field; + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + switch (fruit) { + case "Banana": + System.out.println(fruit + " is a fruit"); + break; + case "Brocoli": + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } + +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_3.java new file mode 100644 index 0000000000..63e9e08f21 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_3.java @@ -0,0 +1,30 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Switch_mutation_3 { + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + + // Loop through all possible fruits + for (String fruit : fruits) { + System.out.println(fruit); + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + switch (fruit) { + case "Banana": + System.out.println(fruit + " is a fruit"); + break; + case "Brocoli": + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_4.java new file mode 100644 index 0000000000..1e8c7ff973 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_4.java @@ -0,0 +1,30 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Switch_mutation_4 { + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + + // Loop through all possible fruits + for (String fruit : fruits) { + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + switch (fruit) { + case "Banana": + System.out.println(fruit + " is a fruit"); + break; + case "Brocoli": + System.out.println("is not valid."); + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_5.java new file mode 100644 index 0000000000..1a83982197 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/Switch/Switch_mutation_5.java @@ -0,0 +1,43 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class Switch_mutation_5 { + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + + // Loop through all possible fruits + for (String fruit : fruits) { + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + if(isValidFruit(fruit)) { + switch (fruit) { + case "Banana": + System.out.println(fruit + " is a fruit"); + break; + case "Brocoli": + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } else { + System.out.println(fruit + " is not valid."); + } + } + + public static boolean isValidFruit(String fruit) { + switch (fruit) { + case "Banana": + case "Brocoli": + return true; + default: + return false; + } + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException.java b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException.java new file mode 100644 index 0000000000..ad06d956c2 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException.java @@ -0,0 +1,66 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ThrowException { + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + throw new Exception("Test1 - Exception"); + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception *SHOULD NOT EXECUTE*"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_1.java new file mode 100644 index 0000000000..d62c5ea41b --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_1.java @@ -0,0 +1,67 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ThrowException_mutation_2 { + + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + throw new Exception("Test1 - Exception", new Exception("Second Exception")); + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new NullPointerException("Test5 - NullPointerException"); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_2.java new file mode 100644 index 0000000000..b8a99e2696 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_2.java @@ -0,0 +1,67 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ThrowException_mutation_2 { + + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + throw new RuntimeException("Test1 - Exception"); + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception *SHOULD NOT EXECUTE*"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_3.java new file mode 100644 index 0000000000..c0855857bb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_3.java @@ -0,0 +1,69 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ThrowException_mutation_3 { + + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + Object[] objArr = new Object[1]; + objArr[0] = new Exception("Test1 - Exception"); + throw (Exception) objArr[0]; + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception *SHOULD NOT EXECUTE*"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_4.java new file mode 100644 index 0000000000..90f2b812f2 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_4.java @@ -0,0 +1,69 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ThrowException_mutation_4 { + + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + if (true) { + throw new Exception("Test1 - Exception"); + } + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception *SHOULD NOT EXECUTE*"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_5.java new file mode 100644 index 0000000000..73c055623c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/ThrowException/ThrowException_mutation_5.java @@ -0,0 +1,69 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class ThrowException_mutation_5 { + + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + if (true) { + throw new Exception("Test1 - Exception"); + } + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception *SHOULD NOT EXECUTE*"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop.java b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop.java new file mode 100644 index 0000000000..fad8c8e0b4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class WhileLoop { + + public static void main(String[] args) { + // Simple while loop + int counter = 0; + while (counter < 5) { + System.out.println("Simple while loop: counter = " + counter); + counter++; + } + + // Do-while loop + int z = 0; + do { + System.out.println("Do-while loop: z = " + z); + z++; + } while (z < 3); + + } +} diff --git a/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_1.java b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_1.java new file mode 100644 index 0000000000..6026749e6e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_1.java @@ -0,0 +1,25 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class WhileLoop_mutation_1 { + + public static void main(String[] args) { + // Simple while loop + int counter = 0; + WhileLoop_mutation_1 myclass = new WhileLoop_mutation_1(); + while (counter < myclass.staticValue) { + System.out.println("Simple while loop: counter = " + counter); + counter++; + } + + // Do-while loop + int z = 0; + do { + System.out.println("Do-while loop: z = " + z); + z++; + } while (z < 3); + + } + + public static int staticValue = 5; +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_2.java b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_2.java new file mode 100644 index 0000000000..929017b52c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_2.java @@ -0,0 +1,23 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class WhileLoop_mutation_2 { + + public static void main(String[] args) { + // Simple while loop + int counter = 0; + counter++; + while (counter < 5) { + System.out.println("Simple while loop: counter = " + counter); + counter++; + } + + // Do-while loop + int z = 0; + do { + System.out.println("Do-while loop: z = " + z); + z++; + } while (z < 3); + + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_3.java b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_3.java new file mode 100644 index 0000000000..e88750b2f4 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_3.java @@ -0,0 +1,22 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class WhileLoop_mutation_3 { + + public static void main(String[] args) { + // Simple while loop + int[] counterArr = {0}; + while (counterArr[0] < 5) { + System.out.println("Simple while loop: counter = " + counterArr[0]); + counterArr[0]++; + } + + // Do-while loop + int z = 0; + do { + System.out.println("Do-while loop: z = " + z); + z++; + } while (z < 3); + + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_4.java b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_4.java new file mode 100644 index 0000000000..988d707c06 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_4.java @@ -0,0 +1,24 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class WhileLoop_mutation_4 { + + public static void main(String[] args) { + // Simple while loop + int counter = 0; + System.out.println("Simple while loop: counter = " + counter); + while (counter < 5) { + System.out.println("Simple while loop: counter = " + counter); + counter++; + } + + // Do-while loop + int z = 0; + z++; + do { + System.out.println("Do-while loop: z = " + z); + z++; + } while (z < 3); + + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_5.java b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_5.java new file mode 100644 index 0000000000..a0c1fcb8e5 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/mutation/WhileLoop/WhileLoop_mutation_5.java @@ -0,0 +1,23 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.mutation; + +public class WhileLoop_mutation_5 { + + public static void main(String[] args) { + // Simple while loop + int[] counterArray = {0}; + while (counterArray[0] < 5) { + System.out.println("Simple while loop: counter = " + counterArray[0]); + counterArray[0]++; + } + + // Do-while loop + int z = 0; + int[] zArray = {z}; + do { + System.out.println("Do-while loop: z = " + zArray[0]); + zArray[0]++; + } while (zArray[0] < 3); + + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/single/ArithmeticOperations.java b/OPAL/tac2bc/src/test/resources/single/ArithmeticOperations.java new file mode 100644 index 0000000000..f9cad1ac12 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/ArithmeticOperations.java @@ -0,0 +1,87 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class ArithmeticOperations { + + public static void main(String[] args) { + // Integer Arithmetic Operations + int a = 10; + int b = 5; + int additionResult = a + b; + int subtractionResult = a - b; + int multiplicationResult = a * b; + int divisionResult = a / b; + int modulusResult = a % b; + + System.out.println("Integer Addition: " + additionResult); + System.out.println("Integer Subtraction: " + subtractionResult); + System.out.println("Integer Multiplication: " + multiplicationResult); + System.out.println("Integer Division: " + divisionResult); + System.out.println("Integer Modulus: " + modulusResult); + + // Floating-Point Arithmetic Operations + double x = 5.5; + double y = 2.5; + double additionDoubleResult = x + y; + double subtractionDoubleResult = x - y; + double multiplicationDoubleResult = x * y; + double divisionDoubleResult = x / y; + + System.out.println("Double Addition: " + additionDoubleResult); + System.out.println("Double Subtraction: " + subtractionDoubleResult); + System.out.println("Double Multiplication: " + multiplicationDoubleResult); + System.out.println("Double Division: " + divisionDoubleResult); + + // Mixed Operations (int and double) + double mixedAdditionResult = a + x; + double mixedMultiplicationResult = b * y; + + System.out.println("Mixed Addition (int + double): " + mixedAdditionResult); + System.out.println("Mixed Multiplication (int * double): " + mixedMultiplicationResult); + + // Long Arithmetic Operations + long p = 100000L; + long q = 50000L; + long longAdditionResult = p + q; + long longSubtractionResult = p - q; + long longMultiplicationResult = p * q; + long longDivisionResult = p / q; + long longModulusResult = p % q; + + System.out.println("Long Addition: " + longAdditionResult); + System.out.println("Long Subtraction: " + longSubtractionResult); + System.out.println("Long Multiplication: " + longMultiplicationResult); + System.out.println("Long Division: " + longDivisionResult); + System.out.println("Long Modulus: " + longModulusResult); + + // Bitwise Operations with Longs + long longAndResult = p & q; + long longOrResult = p | q; + long longXorResult = p ^ q; + + System.out.println("Long AND: " + longAndResult); + System.out.println("Long OR: " + longOrResult); + System.out.println("Long XOR: " + longXorResult); + + // Shift Operations with Longs + long longShiftLeftResult = p << 2; + long longShiftRightResult = p >> 2; + long longUnsignedShiftRightResult = p >>> 2; + + System.out.println("Long Shift Left: " + longShiftLeftResult); + System.out.println("Long Shift Right: " + longShiftRightResult); + System.out.println("Long Unsigned Shift Right: " + longUnsignedShiftRightResult); + + // Short and Byte Operations + short s1 = 10; + short s2 = 20; + byte b1 = 2; + byte b2 = 3; + + int shortAdditionResult = s1 + s2; + int byteAdditionResult = b1 + b2; + + System.out.println("Short Addition: " + shortAdditionResult); + System.out.println("Byte Addition: " + byteAdditionResult); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Array.java b/OPAL/tac2bc/src/test/resources/single/Array.java new file mode 100644 index 0000000000..e3e096255e --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Array.java @@ -0,0 +1,64 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Array { + + public static void main(String[] args) { + // Single-Dimensional Array + int[] singleArray = new int[5]; + + // Assign values to the single-dimensional array + singleArray[0] = 10; + singleArray[1] = 20; + singleArray[2] = 30; + singleArray[3] = 40; + singleArray[4] = 50; + + // Access and print the values in the single-dimensional array + System.out.println("Single Array Elements:"); + for (int i = 0; i < singleArray.length; i++) { + System.out.println("Element at index " + i + ": " + singleArray[i]); + } + + // Multi-Dimensional Array + int[][] multiArray = new int[2][3]; + + // Assign values to the multi-dimensional array + multiArray[0][0] = 1; + multiArray[0][1] = 2; + multiArray[0][2] = 3; + multiArray[1][0] = 4; + multiArray[1][1] = 5; + multiArray[1][2] = 6; + + // Access and print the values in the multi-dimensional array + System.out.println("\nMulti-Dimensional Array Elements:"); + for (int i = 0; i < multiArray.length; i++) { + for (int j = 0; j < multiArray[i].length; j++) { + System.out.println("Element at index [" + i + "][" + j + "]: " + multiArray[i][j]); + } + } + + // Array of Strings + String[] stringArray = {"Apple", "Banana", "Cherry"}; + + // Access and print the values in the string array + System.out.println("\nString Array Elements:"); + for (int i = 0; i < stringArray.length; i++) { + System.out.println("Element at index " + i + ": " + stringArray[i]); + } + + // Array Length Test + System.out.println("\nArray Lengths:"); + System.out.println("Length of singleArray: " + singleArray.length); + System.out.println("Length of multiArray: " + multiArray.length); + System.out.println("Length of stringArray: " + stringArray.length); + + // Modify and reprint the single-dimensional array + singleArray[2] = 100; + System.out.println("\nModified Single Array Elements:"); + for (int i = 0; i < singleArray.length; i++) { + System.out.println("Element at index " + i + ": " + singleArray[i]); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Assignment.java b/OPAL/tac2bc/src/test/resources/single/Assignment.java new file mode 100644 index 0000000000..699a06af0b --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Assignment.java @@ -0,0 +1,65 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Assignment { + + public static void main(String[] args) { + // Test integer assignment + int a = 10; + int b = 20; + int sum = a + b; + + // Test double assignment + double x = 3.14; + double y = 2.71; + double product = x * y; + + // Test string assignment + String firstName = "John"; + String lastName = "Doe"; + String fullName = firstName + " " + lastName; + + // Test boolean assignment + boolean isTrue = true; + boolean isFalse = false; + boolean andResult = isTrue && isFalse; + + // Test char assignment + char letter = 'A'; + char nextLetter = (char) (letter + 1); + + // Test long assignment + long largeNumber = 123456789L; + long result = largeNumber * 2; + + // Test float assignment + float pi = 3.14f; + float halfPi = pi / 2; + + // Test short assignment + short smallNumber = 100; + short smallerNumber = (short) (smallNumber - 10); + + // Test byte assignment + byte byteValue = 10; + byte incrementedByte = (byte) (byteValue + 1); + + // Test array assignment + int[] numbers = {1, 2, 3, 4, 5}; + int firstNumber = numbers[0]; + numbers[0] = firstNumber + 10; + + + // Print the results + System.out.println("Sum of integers: " + sum); // 30 + System.out.println("Product of doubles: " + product); // 8.5094 + System.out.println("Full name: " + fullName); // John Doe + System.out.println("Boolean AND result: " + andResult); // false + System.out.println("Next letter after 'A': " + nextLetter); // B + System.out.println("Result of long operation: " + result); // 246913578 + System.out.println("Half of pi (float): " + halfPi); // 1.57 + System.out.println("Smaller short number: " + smallerNumber); // 90 + System.out.println("Incremented byte value: " + incrementedByte); // 11 + System.out.println("First number in array after update: " + numbers[0]); // 11 + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/single/BigNumbers.java b/OPAL/tac2bc/src/test/resources/single/BigNumbers.java new file mode 100644 index 0000000000..febdb96c3d --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/BigNumbers.java @@ -0,0 +1,135 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class BigNumbers { + + public static void main(String[] args) { + // Testing with Integer.MAX_VALUE and Integer.MIN_VALUE + int maxValueInt = Integer.MAX_VALUE; + int minValueInt = Integer.MIN_VALUE; + int largeValueInt = 1_000_000_000; + int largeNegativeValueInt = -1_000_000_000; + + // Testing with Long.MAX_VALUE and Long.MIN_VALUE + long maxValueLong = Long.MAX_VALUE; + long minValueLong = Long.MIN_VALUE; + long largeValueLong = 1_000_000_000_000L; + long largeNegativeValueLong = -1_000_000_000_000L; + + // Testing with Double.MAX_VALUE and Double.MIN_VALUE + double maxValueDouble = Double.MAX_VALUE; + double minValueDouble = Double.MIN_VALUE; + double largeValueDouble = 1e100; + double largeNegativeValueDouble = -1e100; + + // Testing with Float.MAX_VALUE and Float.MIN_VALUE + float maxValueFloat = Float.MAX_VALUE; + float minValueFloat = Float.MIN_VALUE; + float largeValueFloat = 1e30f; + float largeNegativeValueFloat = -1e30f; + + // Arithmetic operations for int + int sumInt = maxValueInt + largeValueInt; // May cause overflow + int diffInt = minValueInt - largeValueInt; // May cause underflow + int productInt = maxValueInt * 2; // Likely overflow + int quotientInt = maxValueInt / 2; // Safe operation + int remainderInt = maxValueInt % largeValueInt; // Safe operation + + // Arithmetic operations for long + long sumLong = maxValueLong + largeValueLong; // May cause overflow + long diffLong = minValueLong - largeValueLong; // May cause underflow + long productLong = maxValueLong * 2; // Likely overflow + long quotientLong = maxValueLong / 2; // Safe operation + long remainderLong = maxValueLong % largeValueLong; // Safe operation + + // Arithmetic operations for double + double sumDouble = maxValueDouble + largeValueDouble; // Large sum + double diffDouble = minValueDouble - largeValueDouble; // Small difference + double productDouble = maxValueDouble * 2; // Large product + double quotientDouble = maxValueDouble / 2; // Safe operation + double remainderDouble = maxValueDouble % largeValueDouble; // Remainder + + // Arithmetic operations for float + float sumFloat = maxValueFloat + largeValueFloat; // Large sum + float diffFloat = minValueFloat - largeValueFloat; // Small difference + float productFloat = maxValueFloat * 2; // Large product + float quotientFloat = maxValueFloat / 2; // Safe operation + float remainderFloat = maxValueFloat % largeValueFloat; // Remainder + + // Print results for int + System.out.println("Int Sum (maxValue + largeValue): " + sumInt); + System.out.println("Int Difference (minValue - largeValue): " + diffInt); + System.out.println("Int Product (maxValue * 2): " + productInt); + System.out.println("Int Quotient (maxValue / 2): " + quotientInt); + System.out.println("Int Remainder (maxValue % largeValue): " + remainderInt); + + // Print results for long + System.out.println("Long Sum (maxValue + largeValue): " + sumLong); + System.out.println("Long Difference (minValue - largeValue): " + diffLong); + System.out.println("Long Product (maxValue * 2): " + productLong); + System.out.println("Long Quotient (maxValue / 2): " + quotientLong); + System.out.println("Long Remainder (maxValue % largeValue): " + remainderLong); + + // Print results for double + System.out.println("Double Sum (maxValue + largeValue): " + sumDouble); + System.out.println("Double Difference (minValue - largeValue): " + diffDouble); + System.out.println("Double Product (maxValue * 2): " + productDouble); + System.out.println("Double Quotient (maxValue / 2): " + quotientDouble); + System.out.println("Double Remainder (maxValue % largeValue): " + remainderDouble); + + // Print results for float + System.out.println("Float Sum (maxValue + largeValue): " + sumFloat); + System.out.println("Float Difference (minValue - largeValue): " + diffFloat); + System.out.println("Float Product (maxValue * 2): " + productFloat); + System.out.println("Float Quotient (maxValue / 2): " + quotientFloat); + System.out.println("Float Remainder (maxValue % largeValue): " + remainderFloat); + + // Comparisons for int + boolean isMaxGreaterThanMinInt = maxValueInt > minValueInt; + boolean isLargeValueGreaterThanMaxInt = largeValueInt > maxValueInt; + boolean isMinLessThanLargeNegativeValueInt = minValueInt < largeNegativeValueInt; + boolean isEqualInt = maxValueInt == Integer.MAX_VALUE; + + // Print comparison results for int + System.out.println("Is maxValue > minValue? (int) " + isMaxGreaterThanMinInt); + System.out.println("Is largeValue > maxValue? (int) " + isLargeValueGreaterThanMaxInt); + System.out.println("Is minValue < largeNegativeValue? (int) " + isMinLessThanLargeNegativeValueInt); + System.out.println("Is maxValue equal to Integer.MAX_VALUE? (int) " + isEqualInt); + + // Comparisons for long + boolean isMaxGreaterThanMinLong = maxValueLong > minValueLong; + boolean isLargeValueGreaterThanMaxLong = largeValueLong > maxValueLong; + boolean isMinLessThanLargeNegativeValueLong = minValueLong < largeNegativeValueLong; + boolean isEqualLong = maxValueLong == Long.MAX_VALUE; + + // Print comparison results for long + System.out.println("Is maxValue > minValue? (long) " + isMaxGreaterThanMinLong); + System.out.println("Is largeValue > maxValue? (long) " + isLargeValueGreaterThanMaxLong); + System.out.println("Is minValue < largeNegativeValue? (long) " + isMinLessThanLargeNegativeValueLong); + System.out.println("Is maxValue equal to Long.MAX_VALUE? (long) " + isEqualLong); + + // Comparisons for double + boolean isMaxGreaterThanMinDouble = maxValueDouble > minValueDouble; + boolean isLargeValueGreaterThanMaxDouble = largeValueDouble > maxValueDouble; + boolean isMinLessThanLargeNegativeValueDouble = minValueDouble < largeNegativeValueDouble; + boolean isEqualDouble = maxValueDouble == Double.MAX_VALUE; + + // Print comparison results for double + System.out.println("Is maxValue > minValue? (double) " + isMaxGreaterThanMinDouble); + System.out.println("Is largeValue > maxValue? (double) " + isLargeValueGreaterThanMaxDouble); + System.out.println("Is minValue < largeNegativeValue? (double) " + isMinLessThanLargeNegativeValueDouble); + System.out.println("Is maxValue equal to Double.MAX_VALUE? (double) " + isEqualDouble); + + // Comparisons for float + boolean isMaxGreaterThanMinFloat = maxValueFloat > minValueFloat; + boolean isLargeValueGreaterThanMaxFloat = largeValueFloat > maxValueFloat; + boolean isMinLessThanLargeNegativeValueFloat = minValueFloat < largeNegativeValueFloat; + boolean isEqualFloat = maxValueFloat == Float.MAX_VALUE; + + // Print comparison results for float + System.out.println("Is maxValue > minValue? (float) " + isMaxGreaterThanMinFloat); + System.out.println("Is largeValue > maxValue? (float) " + isLargeValueGreaterThanMaxFloat); + System.out.println("Is minValue < largeNegativeValue? (float) " + isMinLessThanLargeNegativeValueFloat); + System.out.println("Is maxValue equal to Float.MAX_VALUE? (float) " + isEqualFloat); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/CaughtException.java b/OPAL/tac2bc/src/test/resources/single/CaughtException.java new file mode 100644 index 0000000000..75fd0984c5 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/CaughtException.java @@ -0,0 +1,78 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class CaughtException { + public static void main(String[] args) throws Exception { + + // 1. Try-catch where no error occurs + try { + System.out.println("Test 1: No error occurs"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } + + // 2. Try-catch where an error occurs + try { + System.out.println("Test 2: An error will occur"); + int result = 10 / 0; // This causes an ArithmeticException + } catch (Exception e) { + System.out.println("Caught an exception in Test 2"); + } + + // 3. Try-catch-finally where no error occurs + try { + System.out.println("Test 3: No error, but with finally"); + } catch (Exception e) { + System.out.println("This won't be printed since no exception occurs."); + } finally { + System.out.println("Test 3: Finally block executed"); + } + + // 4. Try-catch-finally with error from external method + try { + System.out.println("Test 4: An error will occur, with finally"); + exception(); + } catch (Exception e) { + System.out.println("Caught an exception in Test 4"); + } finally { + System.out.println("Test 4: Finally block executed"); + } + + // 5. Multiple catch blocks (wrong order test) + try { + System.out.println("Test 6: Multiple catch blocks with wrong order"); + int result = 10 / 0; // Causes ArithmeticException + } catch (NullPointerException e) { + System.out.println("Caught NullPointerException in Test 6 (should not be printed)"); + } catch (ArithmeticException e) { + System.out.println("Caught ArithmeticException in Test 6 (correct)"); + } catch (Exception e) { + System.out.println("Caught general Exception in Test 6 (should not be printed)"); + } finally { + System.out.println("Test 6: Finally block executed"); + } + + // 6. inner try-catch + caused by method + try { + System.out.println("Test3 - outer try 1/6"); + try { + System.out.println("Test3 - inner try 2/6"); + exception(); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception 3/6"); + } finally { + System.out.println("Test3 - inner finally 4/6"); + exception(); + } + } catch (Exception e) { + System.out.println("Test3- Caught Exception 5/6"); + } finally { + System.out.println("Test3 - Finally 6/6"); + } + + } + + public static void exception() throws Exception { + int result = 10 / 0; + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/CheckCast.java b/OPAL/tac2bc/src/test/resources/single/CheckCast.java new file mode 100644 index 0000000000..c61f0a020a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/CheckCast.java @@ -0,0 +1,23 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class CheckCast { + + public static void main(String[] args) { + // Test case 1: Valid cast + Object obj = "This is a string"; + String str = (String) obj; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + str); + + + // Test case 2: Null reference casting + Object nullObj = null; + String nullCast = (String) nullObj; // Valid CHECKCAST, null can be cast to any reference type + System.out.println("Successfully casted null reference to String"); + + // Test case 3: Casting within the same type + Object anotherString = "Another string"; + String sameTypeCast = (String) anotherString; // Valid CHECKCAST + System.out.println("Successfully casted to String: " + sameTypeCast); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Compare.java b/OPAL/tac2bc/src/test/resources/single/Compare.java new file mode 100644 index 0000000000..6482380e85 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Compare.java @@ -0,0 +1,57 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Compare { + + public static void main(String[] args) { + // Test case 1: Float comparison + float f1 = 10.5f; + float f2 = 20.5f; + + int floatComparisonResult; + if (f1 > f2) { + floatComparisonResult = 1; + } else if (f1 < f2) { + floatComparisonResult = -1; + } else { + floatComparisonResult = 0; + } + System.out.println("Float comparison result: " + floatComparisonResult); + + // Test case 2: Double comparison + double d1 = 100.123; + double d2 = 100.456; + + int doubleComparisonResult; + if (d1 > d2) { + doubleComparisonResult = 1; + } else if (d1 < d2) { + doubleComparisonResult = -1; + } else { + doubleComparisonResult = 0; + } + System.out.println("Double comparison result: " + doubleComparisonResult); + + // Test case 3: Long comparison + long l1 = 123456789L; + long l2 = 987654321L; + + int longComparisonResult = (l1 < l2) ? -1 : ((l1 > l2) ? 1 : 0); + System.out.println("Long comparison result: " + longComparisonResult); + + // Combining results to ensure they are used in further logic + int combinedResult = floatComparisonResult + doubleComparisonResult + longComparisonResult; + if (combinedResult > 0) { + System.out.println("Overall: positive result"); + } else if (combinedResult < 0) { + System.out.println("Overall: negative result"); + } else { + System.out.println("Overall: zero result"); + } + + // Complex usage: Looping based on comparisons + for (int i = 0; i < combinedResult; i++) { + System.out.println("Loop iteration: " + i); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Constants.java b/OPAL/tac2bc/src/test/resources/single/Constants.java new file mode 100644 index 0000000000..4e2d6a4c5a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Constants.java @@ -0,0 +1,58 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Constants { + + public static void main(String[] args) { + // Integer constants + int intMin1 = -1; + int int0 = 0; + int int1 = 1; + int int2 = 2; + int int3 = 3; + int int4 = 4; + int int5 = 5; + int int127 = 127; // Should use BIPUSH + int int128 = 128; // Should use SIPUSH + int int32767 = 32767; // Maximum short value + int intBig = 100000; // Should use LDC + + System.out.println("Integer Constants:"); + System.out.println(intMin1 + ", " + int0 + ", " + int1 + ", " + int2 + ", " + int3 + ", " + int4 + ", " + int5); + System.out.println(int127 + ", " + int128 + ", " + int32767 + ", " + intBig); + + // Float constants + float float0 = 0.0f; + float float1 = 1.0f; + float float2 = 2.0f; + float float3Point5 = 3.5f; // Should use LDC + + System.out.println("Float Constants:"); + System.out.println(float0 + ", " + float1 + ", " + float2 + ", " + float3Point5); + + // Double constants + double double0 = 0.0; + double double1 = 1.0; + double double1Point5 = 1.5; // Should use LDC + + System.out.println("Double Constants:"); + System.out.println(double0 + ", " + double1 + ", " + double1Point5); + + // Long constants + long long0 = 0L; + long long1 = 1L; + long longBig = 100000L; // Should use LDC2_W + + System.out.println("Long Constants:"); + System.out.println(long0 + ", " + long1 + ", " + longBig); + + // String constants + String stringConst = "Hello, World!"; + String stringEmpty = ""; + String stringNull = null; // Should use ACONST_NULL + + System.out.println("String Constants:"); + System.out.println(stringConst + ", " + stringEmpty); + System.out.println(stringNull); // This will print "null" + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/ForLoop.java b/OPAL/tac2bc/src/test/resources/single/ForLoop.java new file mode 100644 index 0000000000..d392c98748 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/ForLoop.java @@ -0,0 +1,38 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class ForLoop { + + public static void main(String[] args) { + // Simple for loop with int + int sum = 0; + for (int i = 0; i < 10; i++) { + sum += i; + } + System.out.println("Sum of first 10 numbers: " + sum); + + // For loop with an array of integers + int[] numbers = {1, 2, 3, 4, 5}; + int arraySum = 0; + for (int i = 0; i < numbers.length; i++) { + arraySum += numbers[i]; + } + System.out.println("Sum of array elements: " + arraySum); + + // For loop with a double type + double product = 1.0; + for (int i = 1; i <= 5; i++) { + product *= i * 1.5; + } + System.out.println("Product of first 5 numbers multiplied by 1.5: " + product); + + // Nested for loops + int multiplicationTableSum = 0; + for (int i = 1; i <= 3; i++) { + for (int j = 1; j <= 3; j++) { + multiplicationTableSum += i * j; + } + } + System.out.println("Sum of 3x3 multiplication table: " + multiplicationTableSum); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/If.java b/OPAL/tac2bc/src/test/resources/single/If.java new file mode 100644 index 0000000000..90bb5da5c0 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/If.java @@ -0,0 +1,86 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class If { + + public static void main(String[] args) { + // Test simple if statement with a loop + int a = 10; + int b = 20; + for (int i = 0; i < 5; i++) { + if (a + i < b) { + System.out.println("Iteration " + i + ": a + i is less than b"); + } + } + + // Test if-else statement with a loop + for (int i = 5; i > 0; i--) { + if (a * i > b) { + System.out.println("Iteration " + i + ": a * i is greater than b"); + } else { + System.out.println("Iteration " + i + ": a * i is not greater than b"); + } + } + + // Test if-else if-else statement with a loop + int c = 15; + for (int i = 0; i < 5; i++) { + if (a + i > c) { + System.out.println("Iteration " + i + ": a + i is greater than c"); + } else if (b - i > c) { + System.out.println("Iteration " + i + ": b - i is greater than c"); + } else { + System.out.println("Iteration " + i + ": c is greater than or equal to both a + i and b - i"); + } + } + + // Test nested if statement with a loop + for (int i = 0; i < 5; i++) { + if (a < b) { + if (c + i < b) { + System.out.println("Iteration " + i + ": c + i is less than b"); + } else { + System.out.println("Iteration " + i + ": c + i is greater than or equal to b"); + } + } + } + + // Test if with multiple conditions inside a loop + boolean x = true; + boolean y = false; + for (int i = 0; i < 5; i++) { + if (x && !y && i % 2 == 0) { + System.out.println("Iteration " + i + ": x is true, y is false, and i is even"); + } + } + + // Test if with variables being reassigned inside a loop + int d = 5; + for (int i = 0; i < 3; i++) { + if (d == 5 + i) { + d = 10 + i; + System.out.println("Iteration " + i + ": d was " + (5 + i) + ", now it's " + d); + } + } + if (d == 12) { + System.out.println("After the loop, d is now 12"); + } + + // Object comparison using == (reference comparison) + String str1 = "Hello"; + String str2 = "Hello"; + + if (str1 == str2) { + System.out.println("str1 == str2: Both references are the same"); + } + + String s1 = new String("test"); + String s2 = new String("test"); + + if (s1.equals(s2)) { + System.out.println("Equal strings"); + } else { + System.out.println("Not equal strings"); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/IfZero.java b/OPAL/tac2bc/src/test/resources/single/IfZero.java new file mode 100644 index 0000000000..e5125a6586 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/IfZero.java @@ -0,0 +1,62 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class IfZero { + + public static void main(String[] args) { + IfZero test = new IfZero(); + + // Test with a positive number, zero, and a negative number + int[] testValues = {10, 0, -5}; + + for (int value : testValues) { + System.out.println("Testing with k = " + value); + test.compareWithZero(value); + System.out.println(); + } + } + + public void compareWithZero(int k) { + // Equal to zero + if (k == 0) { + System.out.println("k is equal to zero."); + } else { + System.out.println("k is not equal to zero."); + } + + // Not equal to zero + if (k != 0) { + System.out.println("k is not equal to zero."); + } else { + System.out.println("k is equal to zero."); + } + + // Less than zero + if (k < 0) { + System.out.println("k is less than zero."); + } else { + System.out.println("k is not less than zero."); + } + + // Greater than zero + if (k > 0) { + System.out.println("k is greater than zero."); + } else { + System.out.println("k is not greater than zero."); + } + + // Less than or equal to zero + if (k <= 0) { + System.out.println("k is less than or equal to zero."); + } else { + System.out.println("k is greater than zero."); + } + + // Greater than or equal to zero + if (k >= 0) { + System.out.println("k is greater than or equal to zero."); + } else { + System.out.println("k is less than zero."); + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/InstanceField.java b/OPAL/tac2bc/src/test/resources/single/InstanceField.java new file mode 100644 index 0000000000..c4a2d38609 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/InstanceField.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class InstanceField { + + // An instance field + private int instanceValue; + + public static void main(String[] args) { + // Create an instance of the class + InstanceField testInstance = new InstanceField(); + + // Set the instance field + testInstance.setInstanceValue(42); + + // Get the instance field value and print it + System.out.println("Instance field value: " + testInstance.getInstanceValue()); + } + + // Method to set the instance field + public void setInstanceValue(int value) { + this.instanceValue = value; + } + + // Method to get the instance field value + public int getInstanceValue() { + return this.instanceValue; + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/InstanceOf.java b/OPAL/tac2bc/src/test/resources/single/InstanceOf.java new file mode 100644 index 0000000000..aaf8ffeaf2 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/InstanceOf.java @@ -0,0 +1,28 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class InstanceOf { + + public static void main(String[] args) { + // Test with String + Object obj = "Hello, World!"; + System.out.println("obj is an instance of String: " + (obj instanceof String)); // true + System.out.println("obj is an instance of CharSequence: " + (obj instanceof CharSequence)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // false + + // Test with Integer + obj = 42; + System.out.println("obj is an instance of Integer: " + (obj instanceof Integer)); // true + System.out.println("obj is an instance of Number: " + (obj instanceof Number)); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of String: " + (obj instanceof String)); // false + + // Test with Array + obj = new int[]{1, 2, 3}; + System.out.println("obj is an instance of int[]: " + (obj instanceof int[])); // true + System.out.println("obj is an instance of Object: " + (obj instanceof Object)); // true + System.out.println("obj is an instance of String[]: " + (obj instanceof String[])); // false + System.out.println("obj is an instance of Integer[]: " + (obj instanceof Integer[])); // false + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/InvokeDynamic.java b/OPAL/tac2bc/src/test/resources/single/InvokeDynamic.java new file mode 100644 index 0000000000..8f22b574e6 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/InvokeDynamic.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class InvokeDynamic { + + public static void main(String[] args) { + // Test 1: Lambda Expression + Runnable r = () -> System.out.println("Running in a lambda!"); + r.run(); + + // Test 2: String Concatenation with invokedynamic + String str1 = "Hello"; + String str2 = "World"; + String result = str1 + ", " + str2 + "!"; + System.out.println(result); + + // Test 3: Method Reference + InvokeDynamic test = new InvokeDynamic(); + Runnable r2 = test::methodReferenceExample; + r2.run(); + } + + public void methodReferenceExample() { + System.out.println("Method Reference Example"); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/InvokeInterface.java b/OPAL/tac2bc/src/test/resources/single/InvokeInterface.java new file mode 100644 index 0000000000..0b738fa402 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/InvokeInterface.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +import java.util.List; +import java.util.ArrayList; + +public class InvokeInterface { + + public static void main(String[] args) { + // Create an instance of ArrayList, which implements the List interface + List myList = new ArrayList<>(); + + // Add elements to the list (invokeinterface) + myList.add("Hello"); + myList.add("World"); + + // Get the size of the list (invokeinterface) + int size = myList.size(); + System.out.println("Size of the list: " + size); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/single/Jsr.java b/OPAL/tac2bc/src/test/resources/single/Jsr.java new file mode 100644 index 0000000000..f3070f2945 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Jsr.java @@ -0,0 +1,21 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Jsr { + + public static void main(String[] args) { + System.out.println("Before subroutine"); + executeSubroutine(); + System.out.println("After subroutine"); + } + + private static void executeSubroutine() { + System.out.println("In subroutine"); + // Simulating a subroutine with a loop or some operations + for (int i = 0; i < 3; i++) { + System.out.println("Subroutine iteration: " + i); + } + // Return from the subroutine (RET equivalent) + return; // RET is simulated by this return statement in Java + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/MethodCall.java b/OPAL/tac2bc/src/test/resources/single/MethodCall.java new file mode 100644 index 0000000000..a11eb00b20 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/MethodCall.java @@ -0,0 +1,65 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class MethodCall { + + public static void main(String[] args) { + // Instance method call + MethodCall instance = new MethodCall(); + int instanceResult = instance.instanceMethod(5, 3); + System.out.println("Instance method result: " + instanceResult); + + // Static method call + int staticResult = staticMethod(10, 2); + System.out.println("Static method result: " + staticResult); + + // Overloaded method call + String overloadedResult1 = instance.overloadedMethod(5); + String overloadedResult2 = instance.overloadedMethod(5, 3); + System.out.println("Overloaded method result (1 parameter): " + overloadedResult1); + System.out.println("Overloaded method result (2 parameters): " + overloadedResult2); + + // Calling a method that calls another method + int nestedCallResult = instance.nestedMethodCall(7, 3); + System.out.println("Nested method call result: " + nestedCallResult); + + // Method with multiple return statements + int multipleReturnResult = instance.multipleReturnMethod(15); + System.out.println("Multiple return method result: " + multipleReturnResult); + } + + // Instance method + public int instanceMethod(int a, int b) { + return a + b; + } + + // Static method + public static int staticMethod(int x, int y) { + return x * y; + } + + // Overloaded methods + public String overloadedMethod(int a) { + return "Overloaded with one parameter: " + a; + } + + public String overloadedMethod(int a, int b) { + return "Overloaded with two parameters: " + (a + b); + } + + // Method that calls another method + public int nestedMethodCall(int a, int b) { + return instanceMethod(a, b) * staticMethod(a, b); + } + + // Method with multiple return statements + public int multipleReturnMethod(int value) { + if (value > 10) { + return value * 2; + } else if (value == 10) { + return value * 3; + } else { + return value * 4; + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Negation.java b/OPAL/tac2bc/src/test/resources/single/Negation.java new file mode 100644 index 0000000000..3d3a15e7bc --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Negation.java @@ -0,0 +1,38 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Negation { + + public static void main(String[] args) { + // Integer negation + int intValue = 42; + int negatedInt = -intValue; + System.out.println("Negated int: " + negatedInt); + + // Long negation + long longValue = 123456789L; + long negatedLong = -longValue; + System.out.println("Negated long: " + negatedLong); + + // Float negation + float floatValue = 3.14f; + float negatedFloat = -floatValue; + System.out.println("Negated float: " + negatedFloat); + + // Double negation + double doubleValue = 2.71828; + double negatedDouble = -doubleValue; + System.out.println("Negated double: " + negatedDouble); + + // Test negation in expressions + int exprInt = -(intValue + 10); + long exprLong = -(longValue * 2); + float exprFloat = -(floatValue / 2.0f); + double exprDouble = -(doubleValue - 1.0); + + System.out.println("Negated int in expression: " + exprInt); + System.out.println("Negated long in expression: " + exprLong); + System.out.println("Negated float in expression: " + exprFloat); + System.out.println("Negated double in expression: " + exprDouble); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/ObjectPropertyAccess.java b/OPAL/tac2bc/src/test/resources/single/ObjectPropertyAccess.java new file mode 100644 index 0000000000..b9cf7ffb5a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/ObjectPropertyAccess.java @@ -0,0 +1,56 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class ObjectPropertyAccess { + + // Object attributes + private int[] m = {10, 20, 30, 40, 50}; // Example array + private int i; // Index i + private int j; // Index j + private int k; // Result of subtraction + + public static void main(String[] args) { + ObjectPropertyAccess test = new ObjectPropertyAccess(); + test.runTests(); + } + + public void runTests() { + // Test case 1: Normal subtraction + this.i = 4; // Refers to m[4] = 50 + this.j = 3; // Refers to m[3] = 40 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 1 (m[4] - m[3]): k = " + this.k); // Expected: 10 + + // Test case 2: Subtraction leading to zero + this.i = 2; // Refers to m[2] = 30 + this.j = 2; // Refers to m[2] = 30 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 2 (m[2] - m[2]): k = " + this.k); // Expected: 0 + + // Test case 3: Subtraction leading to a negative result + this.i = 1; // Refers to m[1] = 20 + this.j = 4; // Refers to m[4] = 50 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 3 (m[1] - m[4]): k = " + this.k); // Expected: -30 + + // Test case 4: Subtraction at boundary values (first element) + this.i = 0; // Refers to m[0] = 10 + this.j = 4; // Refers to m[4] = 50 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 4 (m[0] - m[4]): k = " + this.k); // Expected: -40 + + // Test case 5: Subtraction at boundary values (last element) + this.i = 4; // Refers to m[4] = 50 + this.j = 0; // Refers to m[0] = 10 + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 5 (m[4] - m[0]): k = " + this.k); // Expected: 40 + + // Test case 6: Subtraction leading to potential overflow/underflow + this.m = new int[]{Integer.MAX_VALUE, Integer.MIN_VALUE}; + this.i = 0; // Refers to Integer.MAX_VALUE + this.j = 1; // Refers to Integer.MIN_VALUE + this.k = this.m[this.i] - this.m[this.j]; + System.out.println("Test 6 (Integer.MAX_VALUE - Integer.MIN_VALUE): k = " + this.k); + // Expected: Large positive value, may demonstrate overflow behavior + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Parameters.java b/OPAL/tac2bc/src/test/resources/single/Parameters.java new file mode 100644 index 0000000000..10263758fb --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Parameters.java @@ -0,0 +1,58 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Parameters { + + public static void main(String[] args) { + // Test with primitive types + int a = 10; + double b = 20.5; + char c = 'A'; + + System.out.println("Sum of int and double: " + sum(a, b)); + System.out.println("Character to int: " + charToInt(c)); + + // Test with array parameters + int[] numbers = {1, 2, 3, 4, 5}; + System.out.println("Sum of array elements: " + sumArray(numbers)); + + // Test with varargs + System.out.println("Sum with varargs: " + sumVarArgs(1, 2, 3, 4, 5)); + + // Test with multiple primitive parameters + System.out.println("Average of three numbers: " + average(5, 10, 15)); + } + + // Method with primitive parameters + public static double sum(int x, double y) { + return x + y; + } + + // Method with a char parameter + public static int charToInt(char ch) { + return ch; + } + + // Method with an array parameter + public static int sumArray(int[] array) { + int sum = 0; + for (int num : array) { + sum += num; + } + return sum; + } + + // Method with varargs parameter + public static int sumVarArgs(int... numbers) { + int sum = 0; + for (int num : numbers) { + sum += num; + } + return sum; + } + + // Method with multiple primitive parameters + public static double average(int x, int y, int z) { + return (x + y + z) / 3.0; + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/PrimitiveTypeCast.java b/OPAL/tac2bc/src/test/resources/single/PrimitiveTypeCast.java new file mode 100644 index 0000000000..57361dce55 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/PrimitiveTypeCast.java @@ -0,0 +1,49 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class PrimitiveTypeCast { + + public static void main(String[] args) { + // Initial values + int intValue = 100; + double doubleValue = 123.456; + long longValue = 9876543210L; + float floatValue = 3.14f; + + //Cast to different types + + // int to byte, short, char + byte byteValue = (byte) intValue; + short shortValue = (short) intValue; + char charValue = (char) intValue; + + // long to int, float, double + int intFromLong = (int) longValue; + float floatFromLong = (float) longValue; + double doubleFromLong = (double) longValue; + + // double to int, long, float + int intFromDouble = (int) doubleValue; + long longFromDouble = (long) doubleValue; + float floatFromDouble = (float) doubleValue; + + // float to int, long, double + int intFromFloat = (int) floatValue; + long longFromFloat = (long) floatValue; + double doubleFromFloat = (double) floatValue; + + // Output the results + System.out.println("int to byte: " + byteValue); + System.out.println("int to short: " + shortValue); + System.out.println("int to char: " + (int) charValue); // Print char as int to show ASCII value + System.out.println("long to int: " + intFromLong); + System.out.println("long to float: " + floatFromLong); + System.out.println("long to double: " + doubleFromLong); + System.out.println("double to int: " + intFromDouble); + System.out.println("double to long: " + longFromDouble); + System.out.println("double to float: " + floatFromDouble); + System.out.println("float to int: " + intFromFloat); + System.out.println("float to long: " + longFromFloat); + System.out.println("float to double: " + doubleFromFloat); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Reassignment.java b/OPAL/tac2bc/src/test/resources/single/Reassignment.java new file mode 100644 index 0000000000..16bb0de24a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Reassignment.java @@ -0,0 +1,44 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Reassignment { + + public static void main(String[] args) { + int x = 10; + int y = 5; + int z = Integer.MAX_VALUE; + double test = 2.3d; + + System.out.println("Initial values - x: " + x + ", y: " + y + ", z: " + z); + + // Conditional reassignment + if (-3< 0) { + x = Integer.MAX_VALUE+5; + System.out.println("After conditional reassignment, x: " + x); + } + + // Loop with reassignment + for (int i = 0; i < 3; i++) { + z = z + (x * i) - y; + System.out.println("After loop iteration " + i + ", z: " + z); + } + + // Nested reassignments + if (z > 10) { + x = x * 2; + y = y + z; + z = x - y; + System.out.println("After nested reassignment, x: " + x + ", y: " + y + ", z: " + z); + } + + // Reassign using previous values + z = (x * y) + z; + System.out.println("Final value of z after using previous values: " + z); + + // Complex reassignments with multiple operations + x = x + (y - z) * 2; + y = y * 3 + z - x; + z = x - y + z; + System.out.println("Complex final values - x: " + x + ", y: " + y + ", z: " + z); + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/StaticField.java b/OPAL/tac2bc/src/test/resources/single/StaticField.java new file mode 100644 index 0000000000..ed55e78b04 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/StaticField.java @@ -0,0 +1,26 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class StaticField { + + // A static field + private static int staticValue; + + public static void main(String[] args) { + // Set the static field + setStaticValue(42); + + // Get the static field value and print it + System.out.println("Static field value: " + getStaticValue()); + } + + // Method to set the static field + public static void setStaticValue(int value) { + staticValue = value; + } + + // Method to get the static field value + public static int getStaticValue() { + return staticValue; + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/Switch.java b/OPAL/tac2bc/src/test/resources/single/Switch.java new file mode 100644 index 0000000000..d75d978936 --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/Switch.java @@ -0,0 +1,29 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class Switch { + + public static void main(String[] args) { + // Array of fruits to ensure all cases are covered + String[] fruits = {"Banana", "Brocoli", "Wednesday"}; + + // Loop through all possible fruits + for (String fruit : fruits) { + printFruit(fruit); + } + } + + public static void printFruit(String fruit) { + switch (fruit) { + case "Banana": + System.out.println(fruit + " is a fruit"); + break; + case "Brocoli": + System.out.println(fruit + " is a vegetable."); + break; + default: + System.out.println(fruit + " is not valid."); + break; + } + } +} diff --git a/OPAL/tac2bc/src/test/resources/single/ThrowException.java b/OPAL/tac2bc/src/test/resources/single/ThrowException.java new file mode 100644 index 0000000000..3b510b841a --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/ThrowException.java @@ -0,0 +1,66 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class ThrowException { + public static void main(String[] args) { + + // 1. new Exception + try { + System.out.println("Test1 - Try"); + throw new Exception("Test1 - Exception"); + } catch (Exception e) { + System.out.println("Test1 - Caught Exception"); + } + + // 2. same Exception object twice + Exception exc = new Exception("Test2 - Exception"); + try { + System.out.println("Test2 - Try"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception"); + } + try { + System.out.println("Test2 - Try2"); + throw exc; + } catch (Exception e) { + System.out.println("Test2 - Caught Exception2"); + } + + // 3. new Exception + finally + try { + System.out.println("Test3 - Try"); + throw new Exception("Test3 - Exception"); + } catch (Exception e) { + System.out.println("Test3 - Caught Exception"); + } finally { + System.out.println("Test3 - Finally"); + } + + // 4. new Exception + multiple catch blocks + try { + System.out.println("Test4 - Try"); + throw new ArithmeticException("Test4 - ArithmeticException"); + } catch (NullPointerException e) { + System.out.println("Test4 - NullPointerException *SHOULD NOT EXECUTE*"); + } catch (ArithmeticException e) { + System.out.println("Test4 - ArithmeticException"); + } catch (Exception e) { + System.out.println("Test4 - Caught Exception *SHOULD NOT EXECUTE*"); + } finally { + System.out.println("Test4 - Finally"); + } + + // 5. method external exception with throw + try { + System.out.println("Test5 - Try"); + exception(); + } catch (Exception e) { + System.out.println("Test5 - Caught Exception"); + } + } + + public static void exception() throws Exception { + throw new Exception(); + } +} \ No newline at end of file diff --git a/OPAL/tac2bc/src/test/resources/single/WhileLoop.java b/OPAL/tac2bc/src/test/resources/single/WhileLoop.java new file mode 100644 index 0000000000..9a7724307c --- /dev/null +++ b/OPAL/tac2bc/src/test/resources/single/WhileLoop.java @@ -0,0 +1,67 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj.tac2bc.single; + +public class WhileLoop { + + public static void main(String[] args) { + // Simple while loop + int counter = 0; + while (counter < 5) { + System.out.println("Simple while loop: counter = " + counter); + counter++; + } + + // While loop with multiple conditions + int a = 10; + int b = 20; + while (a < b && a % 2 == 0) { + System.out.println("While loop with multiple conditions: a = " + a); + a += 2; + } + + // Nested while loop + int outer = 1; + while (outer <= 3) { + int inner = 1; + while (inner <= 2) { + System.out.println("Nested while loop: outer = " + outer + ", inner = " + inner); + inner++; + } + outer++; + } + + // While loop with break + int x = 0; + while (true) { + System.out.println("While loop with break: x = " + x); + if (x >= 3) { + break; + } + x++; + } + + // While loop with continue + int y = 0; + while (y < 5) { + y++; + if (y % 2 == 0) { + continue; + } + System.out.println("While loop with continue: y = " + y); + } + + // Do-while loop + int z = 0; + do { + System.out.println("Do-while loop: z = " + z); + z++; + } while (z < 3); + + // Do-while loop with complex condition + int m = 10; + do { + System.out.println("Do-while loop with complex condition: m = " + m); + m--; + } while (m > 0 && m % 3 != 0); + } +} diff --git a/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/MutatedClassFileTACtoBCTest.scala b/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/MutatedClassFileTACtoBCTest.scala new file mode 100644 index 0000000000..6669594922 --- /dev/null +++ b/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/MutatedClassFileTACtoBCTest.scala @@ -0,0 +1,48 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj +package tac2bc + +import java.io.File + +class MutatedClassFileTACtoBCTest extends TACtoBCTest { + + val dirName: String = "mutation" + val packageName: String = "org/opalj/tac2bc/mutation" + + describe("TACtoBC Mutation Testing") { + executeTest("mutated") + } + + def getSourceDir(originalFileName: String): String = s"/${originalFileName.replace(".java", "")}" + + def description(originalFileName: String, testFileName: String): String = { + s"should compile $originalFileName, generate TAC, convert back to bytecode," + + s" and compare with the mutated class file $testFileName" + } + + def getTestFiles(file: File, fileName: String): IterableOnce[(String, String)] = { + if (file.isDirectory) { + for { + subFile <- file.listFiles() + subFileName = subFile.getName + if subFileName.endsWith(".java") && subFileName.startsWith(s"${fileName}_mutation") + } yield (subFileName, s"$fileName.java") + } else Iterator.empty + } + + override def extraFilesToLoad( + testClassFileName: String, + testInputDir: String + ): List[String] = { + val baseFileName = testClassFileName.replace(".class", "$") + val directory = new File(testInputDir) + + val extraFiles = if (directory.exists && directory.isDirectory) { + directory.listFiles((_, name) => name.startsWith(baseFileName)) + } else { + Array.empty + } + + extraFiles.iterator.map(file => file.getName).toList + } +} diff --git a/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/SingleClassFileTACtoBCTest.scala b/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/SingleClassFileTACtoBCTest.scala new file mode 100644 index 0000000000..22614710da --- /dev/null +++ b/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/SingleClassFileTACtoBCTest.scala @@ -0,0 +1,27 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj +package tac2bc + +import java.io.File + +class SingleClassFileTACtoBCTest extends TACtoBCTest { + + val dirName: String = "single" + val packageName: String = "org/opalj/tac2bc/single" + + describe("TACtoBC Single Class File Generation") { + executeTest("original") + } + + def getSourceDir(originalFileName: String): String = "" + + def description(originalFileName: String, testFileName: String): String = { + s"should compile and generate class file for $testFileName, create the TAC representation of it, convert it back to bytecode, generate a new .class file and compare the output of both original and generated .class files" + } + + def getTestFiles(file: File, fileName: String): IterableOnce[(String, String)] = { + if (fileName.endsWith(".java")) + Iterator((fileName, fileName)) + else Iterator.empty + } +} diff --git a/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/TACtoBCTest.scala b/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/TACtoBCTest.scala new file mode 100644 index 0000000000..691cf5dc2b --- /dev/null +++ b/OPAL/tac2bc/src/test/scala/org/opalj/tac2bc/TACtoBCTest.scala @@ -0,0 +1,191 @@ +/* BSD 2-Clause License - see OPAL/LICENSE for details. */ +package org.opalj +package tac2bc + +import java.io.ByteArrayOutputStream +import java.io.File +import java.net.URL +import java.nio.file.Files +import java.nio.file.Paths +import scala.sys.process._ + +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers + +import com.typesafe.config.Config +import com.typesafe.config.ConfigValueFactory + +import org.opalj.ba.CODE +import org.opalj.ba.CodeElement +import org.opalj.ba.toDA +import org.opalj.bc.Assembler +import org.opalj.bi.TestResources +import org.opalj.br.BaseConfig +import org.opalj.br.ClassFile +import org.opalj.br.Code +import org.opalj.br.Method +import org.opalj.br.analyses.Project +import org.opalj.br.reader.InvokedynamicRewriting +import org.opalj.log.OPALLogger +import org.opalj.log.StandardLogContext +import org.opalj.tac.LazyDetachedTACAIKey +import org.opalj.util.InMemoryClassLoader + +trait TACtoBCTest extends AnyFunSpec with Matchers { + + val testRoot: String = s"${System.getProperty("user.dir")}/OPAL/tac2bc/src/test/resources" + + def dirName: String + def packageName: String + + def getSourceDir(originalFileName: String): String + + def description(originalFileName: String, testFileName: String): String + + def getTestFiles(file: File, fileName: String): IterableOnce[(String, String)] + + def extraFilesToLoad(testClassFileName: String, testInputDir: String): List[String] = List.empty + + def executeTest( + testInputDirName: String + ): Unit = { + // define paths + val javaFileDir = s"$testRoot/$dirName" + val originalInputDir: String = s"$testRoot/generatedClassFiles/$dirName/original" + val testInputDir: String = s"$testRoot/generatedClassFiles/$dirName/$testInputDirName" + val outputDir: String = s"$testRoot/generatedClassFiles/$dirName/generated" + + val resourcesDir: File = TestResources.locateTestResources(dirName, "tac2bc") + + // load test files from directory + val testFiles = for { + file <- resourcesDir.listFiles() + fileName = file.getName + testFile <- getTestFiles(file, fileName).iterator + } yield testFile + + testFiles.foreach { case (testFileName, originalFileName) => + val originalClassPath = s"$packageName/${originalFileName.replace(".java", ".class")}" + val testClassFileName = testFileName.replace(".java", ".class") + val testClassPath = s"$packageName/$testClassFileName" + + it(description(originalFileName, testFileName)) { + + // (1) Compile the original Java file to generate its .class file + compileJavaFile(getSourceDir(originalFileName), originalFileName, javaFileDir, originalInputDir) + + // (2) Compile the test Java file to generate its .class file if it is not the same as the original + if (testInputDir != originalInputDir) { + compileJavaFile(getSourceDir(originalFileName), testFileName, javaFileDir, testInputDir) + } + + val config: Config = BaseConfig.withValue( + InvokedynamicRewriting.InvokedynamicRewritingConfigKey, + ConfigValueFactory.fromAnyRef(false) + ) + val logContext = new StandardLogContext() + OPALLogger.register(logContext) + implicit val project: Project[URL] = + Project(Paths.get(testInputDir, testClassPath).toFile, logContext, config) + + // Load the test class file + val classFile = project.allClassFiles.head + + // Compile the TAC from the test class file + val tacProvider = project.get(LazyDetachedTACAIKey) + val byteCodes = for { + m <- classFile.methods + if m.body.isDefined + } yield { + val tac = tacProvider(m) + val bytecodeInstructions = TACtoBC.translateTACtoBC(m.descriptor, m.isStatic, tac) + m -> bytecodeInstructions + } + + // Generate the new class file + generateClassFile( + classFile, + byteCodes.toMap, + outputDir, + testClassPath + ) + + // Load the original class and the generated class + val originalClass = loadClasses(List((originalInputDir, originalClassPath))).head + val classesToLoad = (outputDir, testClassPath) +: extraFilesToLoad( + testClassFileName, + s"$testInputDir/$packageName" + ).map(fileName => (testInputDir, s"$packageName/$fileName")) + val generatedClass = loadClasses(classesToLoad).head + + // Compare the output of the main method in the original and generated classes + val originalOutput = invokeMainMethod(originalClass) + val generatedOutput = invokeMainMethod(generatedClass) + + // Assert that the outputs are the same + originalOutput shouldEqual generatedOutput + } + } + } + + def generateClassFile( + classFile: ClassFile, + byteCodes: Map[Method, IndexedSeq[CodeElement[Nothing]]], + outputDirPath: String, + classFileName: String + ): Unit = { + val outputFile = Paths.get(outputDirPath, classFileName) + + val newMethods = for (m <- classFile.methods) yield { + m.body match { + case None => + m.copy() // methods which are native or abstract + case _: Some[Code] => + val codeAttrBuilder = CODE(byteCodes(m)) + val newBody = codeAttrBuilder(classFile.version, m) + m.copy(body = Some(newBody._1)) + } + } + + val cfWithNewInstructions = classFile.copy(methods = newMethods) + val daClassFile = toDA(cfWithNewInstructions) + val newRawCF = Assembler(daClassFile) + Files.createDirectories(outputFile.getParent) + Files.write(outputFile, newRawCF) + } + + def compileJavaFile( + sourceFolder: String, + fileName: String, + javaFileDir: String, + inputDir: String + ): Unit = { + val javaFilePath = Paths.get(javaFileDir, sourceFolder, fileName).toString + val command = s"javac -d $inputDir $javaFilePath" + val result = command.! + + if (result != 0) + throw new RuntimeException(s"Compilation of Java file ($fileName) failed.") + } + + def invokeMainMethod(clazz: Class[_]): String = { + val outputStream = new ByteArrayOutputStream() + Console.withOut(outputStream) { + clazz.getMethod("main", classOf[Array[String]]).invoke(null, Array[String]()) + } + outputStream.toString.trim + } + + def loadClasses(files: List[(String, String)]): Iterable[Class[_]] = { + val classes = files.map { case (dir, file) => + val className = file.replace(".class", "").replace('/', '.') + className -> Files.readAllBytes(Paths.get(dir, file)) + } + + val classLoader = new InMemoryClassLoader(classes.toMap) + + classes.map { case (className, _) => + classLoader.findClass(className) + } + } +} diff --git a/build.sbt b/build.sbt index 07e8754565..67901f9f49 100644 --- a/build.sbt +++ b/build.sbt @@ -173,6 +173,7 @@ lazy val `OPAL` = (project in file(".")) ifds, ide, tac, + tac2bc, de, av, apk, @@ -346,6 +347,38 @@ lazy val `ThreeAddressCode` = (project in file("OPAL/tac")) .dependsOn(ifds % "it->it;it->test;test->test;compile->compile") .configs(IntegrationTest) +lazy val tac2bc = `ThreeAddressCodeToBytecode` +lazy val `ThreeAddressCodeToBytecode` = (project in file("OPAL/tac2bc")) + .settings(buildSettings: _*) + .settings( + name := "Three Address Code to Bytecode", + Compile / doc / scalacOptions := (Opts.doc + .title("OPAL - Three Address Code to Bytecode") ++ Seq("-groups", "-implicits")), + assembly / mainClass := Some("org.opalj.tac2bc.TACtoBC"), + run / fork := true, + + // Ensure resources directory is included in the classpath + Compile / resourceDirectory := baseDirectory.value / "src" / "main" / "resources", + Test / resourceDirectory := baseDirectory.value / "src" / "test" / "resources", + + // Include resources in the classpath + Compile / resourceGenerators += Def.task { + val resources = (Compile / resourceDirectory).value + val targetDir = (Compile / classDirectory).value / "resources" + IO.copyDirectory(resources, targetDir) + Seq(targetDir) + }, + Test / resourceGenerators += Def.task { + val resources = (Test / resourceDirectory).value + val targetDir = (Test / classDirectory).value / "resources" + IO.copyDirectory(resources, targetDir) + Seq(targetDir) + } + ) + .dependsOn(ba % "it->it;it->test;test->test;compile->compile") + .dependsOn(tac % "it->it;it->test;test->test;compile->compile") + .configs(IntegrationTest) + lazy val ba = `BytecodeAssembler` lazy val `BytecodeAssembler` = (project in file("OPAL/ba")) @@ -409,9 +442,8 @@ lazy val `Framework` = (project in file("OPAL/framework")) run / fork := true ) .dependsOn( - ba % "it->it;it->test;test->test;compile->compile", - av % "it->it;it->test;test->test;compile->compile", - tac % "it->it;it->test;test->test;compile->compile" + av % "it->it;it->test;test->test;compile->compile", + tac2bc % "it->it;it->test;test->test;compile->compile" ) .configs(IntegrationTest)
Frameworkframework
Three Address Codetac
APKapk
Dependencies Extraction Libraryde
IDEide
Bytecode Infrastructurebi
Abstract Interpretation Frameworkai
Hermeshermes
Commoncommon
Bytecode Disassemblerda
Static Analysis Infrastructuresi
IFDSifds
Bytecode Representationbr
Bytecode Assemblerba
Architecture Validationav
Demosdemos
Bytecode Creatorbc
Three Address Code to Bytecodetac2bc