Skip to content

Commit 331f8e2

Browse files
Disable local memory simplifications
1 parent d3449bd commit 331f8e2

File tree

7 files changed

+49
-41
lines changed

7 files changed

+49
-41
lines changed

utbot-framework-test/src/test/kotlin/org/utbot/examples/collections/SetsTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,17 @@ internal class SetsTest : UtValueTestCaseChecker(
3434
)
3535
}
3636

37+
@Test
38+
fun testSetContains2() {
39+
check(
40+
Sets::setContains2,
41+
eq(3),
42+
{ s, _, _ -> s == null },
43+
{ s, a, r -> r!! && s != null && !s.contains(1 + a) },
44+
{ s, a, r -> !r!! && s != null && s.contains(1 + a) }
45+
)
46+
}
47+
3748
@Test
3849
fun testSetContainsInteger() {
3950
check(

utbot-framework/src/main/kotlin/org/utbot/engine/DataClasses.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.utbot.engine.symbolic.*
1616
import org.utbot.engine.types.TypeResolver
1717
import org.utbot.framework.plugin.api.FieldId
1818
import org.utbot.framework.plugin.api.UtInstrumentation
19+
import soot.RefType
1920
import java.util.Objects
2021
import soot.Scene
2122
import soot.SootMethod

utbot-framework/src/main/kotlin/org/utbot/engine/Traverser.kt

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ import org.utbot.engine.symbolic.asHardConstraint
8484
import org.utbot.engine.symbolic.asSoftConstraint
8585
import org.utbot.engine.symbolic.asAssumption
8686
import org.utbot.engine.symbolic.asUpdate
87-
import org.utbot.engine.symbolic.simplificators.LocalMemoryUpdateSimplificator
8887
import org.utbot.engine.symbolic.simplificators.MemoryUpdateSimplificator
8988
import org.utbot.engine.symbolic.simplificators.simplifySymbolicStateUpdate
9089
import org.utbot.engine.symbolic.simplificators.simplifySymbolicValue
@@ -316,7 +315,6 @@ class Traverser(
316315

317316
private val simplificator = Simplificator()
318317
private val memoryUpdateSimplificator = with(simplificator) { MemoryUpdateSimplificator() }
319-
private val localMemoryUpdateSimplificator = with(simplificator) { LocalMemoryUpdateSimplificator() }
320318

321319
private fun TraversalContext.traverseStmt(current: Stmt) {
322320
if (doPreparatoryWorkIfRequired(current)) return
@@ -998,9 +996,10 @@ class Traverser(
998996
createdValue
999997
}
1000998

999+
10011000
environment.state.parameters += Parameter(localVariable, identityRef.type, value)
10021001

1003-
val nextState = updateQueued(
1002+
val nextState = updateQueuedWithoutSimplification(
10041003
globalGraph.succ(current),
10051004
SymbolicStateUpdate(localMemoryUpdates = localMemoryUpdate(localVariable to value))
10061005
)
@@ -1449,6 +1448,8 @@ class Traverser(
14491448
is ArrayValue -> arrayInstanceOf(value, expr.checkType)
14501449
}
14511450
else -> TODO("$expr")
1451+
}.also {
1452+
with(simplificator) { simplifySymbolicValue(it) }
14521453
}
14531454

14541455
private fun initStringLiteral(stringWrapper: ObjectValue, value: String) {
@@ -3595,9 +3596,7 @@ class Traverser(
35953596

35963597
private fun createExceptionStateQueued(exception: SymbolicFailure, update: SymbolicStateUpdate): ExecutionState {
35973598
val simplifiedUpdates = with (memoryUpdateSimplificator) {
3598-
with(localMemoryUpdateSimplificator) {
3599-
simplifySymbolicStateUpdate(queuedSymbolicStateUpdates + update)
3600-
}
3599+
simplifySymbolicStateUpdate(queuedSymbolicStateUpdates + update)
36013600
}
36023601
val simplifiedResult = with(simplificator) {
36033602
simplifySymbolicValue(exception.symbolic)
@@ -3609,10 +3608,8 @@ class Traverser(
36093608
}
36103609

36113610
private fun updateQueued(update: SymbolicStateUpdate): ExecutionState {
3612-
val symbolicStateUpdate = with(localMemoryUpdateSimplificator) {
3613-
with(memoryUpdateSimplificator) {
3614-
simplifySymbolicStateUpdate(queuedSymbolicStateUpdates + update)
3615-
}
3611+
val symbolicStateUpdate = with(memoryUpdateSimplificator) {
3612+
simplifySymbolicStateUpdate(queuedSymbolicStateUpdates + update)
36163613
}
36173614

36183615
return environment.state.update(
@@ -3625,34 +3622,45 @@ class Traverser(
36253622
update: SymbolicStateUpdate = SymbolicStateUpdate(),
36263623
doesntThrow: Boolean = false
36273624
): ExecutionState {
3628-
val symbolicStateUpdate = with(localMemoryUpdateSimplificator) {
3625+
val simplifiedUpdates =
36293626
with(memoryUpdateSimplificator) {
36303627
simplifySymbolicStateUpdate(queuedSymbolicStateUpdates + update)
36313628
}
3632-
}
36333629

36343630
return environment.state.update(
36353631
edge,
3636-
symbolicStateUpdate,
3632+
simplifiedUpdates,
36373633
doesntThrow
36383634
)
36393635
}
36403636

3637+
private fun updateQueuedWithoutSimplification(
3638+
edge: Edge,
3639+
update: SymbolicStateUpdate = SymbolicStateUpdate(),
3640+
doesntThrow: Boolean = false
3641+
): ExecutionState {
3642+
val updates = queuedSymbolicStateUpdates + update
3643+
3644+
return environment.state.update(
3645+
edge,
3646+
updates,
3647+
doesntThrow
3648+
)
3649+
}
3650+
3651+
36413652
private fun pushQueued(
36423653
graph: ExceptionalUnitGraph,
36433654
parametersWithThis: List<SymbolicValue>,
36443655
constraints: Set<UtBoolExpression>
36453656
): ExecutionState {
3646-
val updates = queuedSymbolicStateUpdates + constraints.asHardConstraint()
3647-
val simplifiedInputArguments = with (simplificator) {
3648-
ArrayDeque(parametersWithThis.map {
3649-
simplifySymbolicValue(it)
3650-
})
3657+
val simplifiedUpdates = with(memoryUpdateSimplificator) {
3658+
simplifySymbolicStateUpdate(queuedSymbolicStateUpdates + constraints.asHardConstraint())
36513659
}
36523660
return environment.state.push(
36533661
graph.head,
3654-
inputArguments = simplifiedInputArguments,
3655-
updates,
3662+
inputArguments = ArrayDeque(parametersWithThis),
3663+
simplifiedUpdates,
36563664
graph.body.method
36573665
)
36583666
}

utbot-framework/src/main/kotlin/org/utbot/engine/state/ExecutionState.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import org.utbot.framework.plugin.api.Step
2222
import soot.SootMethod
2323
import soot.jimple.Stmt
2424
import java.util.Objects
25-
import org.utbot.engine.symbolic.Assumption
2625

2726
const val RETURN_DECISION_NUM = -1
2827
const val CALL_DECISION_NUM = -2

utbot-framework/src/main/kotlin/org/utbot/engine/symbolic/simplificators/LocalMemoryUpdateSimplificator.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

utbot-framework/src/main/kotlin/org/utbot/engine/symbolic/simplificators/Util.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,9 @@ fun simplifySymbolicValue(value: SymbolicValue): SymbolicValue =
6060
}
6161

6262

63-
context(MemoryUpdateSimplificator, LocalMemoryUpdateSimplificator)
63+
context(MemoryUpdateSimplificator)
6464
fun simplifySymbolicStateUpdate(update: SymbolicStateUpdate) =
6565
with(update) {
6666
val memoryUpdates = simplify(memoryUpdates)
67-
val localMemoryUpdates = simplify(localMemoryUpdates)
68-
copy(memoryUpdates = memoryUpdates, localMemoryUpdates = localMemoryUpdates)
67+
copy(memoryUpdates = memoryUpdates)
6968
}

utbot-sample/src/main/java/org/utbot/examples/collections/Sets.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ public Set<Integer> setContainsInteger(Set<Integer> set, Integer a, Integer b) {
3030
}
3131
}
3232

33+
public boolean setContains2(Set<Integer> st, int a) {
34+
if (st.contains(1 + a)) {
35+
return false;
36+
}
37+
return true;
38+
}
39+
3340
@SuppressWarnings("RedundantIfStatement")
3441
public boolean setContains(Set<String> set, String str, String str2) {
3542
if (set.contains("aaa" + str)) {

0 commit comments

Comments
 (0)