diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt index a58b1007b5..cf47bea1ec 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt @@ -5,6 +5,7 @@ import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.FieldId import org.utbot.framework.plugin.api.UtClusterInfo import org.utbot.framework.plugin.api.UtExecution +import org.utbot.framework.plugin.api.UtExecutionFailure import org.utbot.framework.plugin.api.UtExecutionSuccess import org.utbot.framework.plugin.api.UtMethodTestSet import org.utbot.framework.plugin.api.util.executableId @@ -36,12 +37,19 @@ data class CgMethodTestSet private constructor( */ fun splitExecutionsByResult() : List { val successfulExecutions = executions.filter { it.result is UtExecutionSuccess } - val executionsByResult: Map> = - if (successfulExecutions.isNotEmpty()) { - successfulExecutions.groupBy { (it.result as UtExecutionSuccess).model.classId } - } else { - mapOf(objectClassId to executions) - } + val failureExecutions = executions.filter { it.result is UtExecutionFailure } + + val executionsByResult: MutableMap> = + successfulExecutions + .groupBy { (it.result as UtExecutionSuccess).model.classId }.toMutableMap() + + // if we have failure executions, we add them to the first successful executions group + val groupClassId = executionsByResult.keys.firstOrNull() + if (groupClassId != null) { + executionsByResult[groupClassId] = executionsByResult[groupClassId]!! + failureExecutions + } else { + executionsByResult[objectClassId] = failureExecutions + } return executionsByResult.map{ (_, executions) -> substituteExecutions(executions) } } @@ -52,15 +60,8 @@ data class CgMethodTestSet private constructor( * A separate test set is created for each combination of modified statics. */ fun splitExecutionsByChangedStatics(): List { - val successfulExecutions = executions.filter { it.result is UtExecutionSuccess } val executionsByStaticsUsage: Map, List> = - if (successfulExecutions.isNotEmpty()) { - successfulExecutions.groupBy { - it.stateBefore.statics.keys - } - } else { - mapOf(executions.first().stateBefore.statics.keys to executions) - } + executions.groupBy { it.stateBefore.statics.keys } return executionsByStaticsUsage.map { (_, executions) -> substituteExecutions(executions) } } diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt index de071c9eb1..92a8e0320b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt @@ -783,7 +783,7 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c ifStatement( CgEqualTo(expectedNestedElement, nullLiteral()), - trueBranch = { assertions[assertNull](actualNestedElement).toStatement() }, + trueBranch = { +assertions[assertNull](actualNestedElement).toStatement() }, falseBranch = { floatingPointArraysDeepEquals( expectedArrayInfo.getNested(), @@ -1055,7 +1055,7 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c actual.type.isPrimitive -> generateDeepEqualsAssertion(expected, actual) else -> ifStatement( CgEqualTo(expected, nullLiteral()), - trueBranch = { testFrameworkManager.assertions[testFramework.assertNull](actual).toStatement() }, + trueBranch = { +testFrameworkManager.assertions[testFramework.assertNull](actual).toStatement() }, falseBranch = { generateDeepEqualsAssertion(expected, actual) } ) } @@ -1188,7 +1188,8 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c //may be a heuristic to select a model with minimal number of internal nulls should be used val genericExecution = testSet.executions .firstOrNull { it.result is UtExecutionSuccess && (it.result as UtExecutionSuccess).model !is UtNullModel } - ?: testSet.executions.first() + ?: testSet.executions + .firstOrNull { it.result is UtExecutionSuccess } ?: testSet.executions.first() val statics = genericExecution.stateBefore.statics