@@ -14,10 +14,8 @@ import org.usvm.machine.TsMachine
1414import org.usvm.machine.TsOptions
1515import org.usvm.util.getResourcePath
1616import kotlin.test.Test
17- import kotlin.test.assertEquals
1817import kotlin.test.assertTrue
1918import kotlin.time.Duration
20- import kotlin.time.Duration.Companion.seconds
2119
2220/* *
2321 * Tests for complex reachability scenarios combining multiple language constructions.
@@ -36,7 +34,7 @@ class ComplexReachabilityTest {
3634 pathSelectionStrategies = listOf (PathSelectionStrategy .TARGETED ),
3735 exceptionsPropagation = true ,
3836 stopOnTargetsReached = true ,
39- timeout = 15 .seconds ,
37+ timeout = Duration . INFINITE ,
4038 stepsFromLastCovered = 3500L ,
4139 solverType = SolverType .YICES ,
4240 solverTimeout = Duration .INFINITE ,
@@ -69,10 +67,15 @@ class ComplexReachabilityTest {
6967 target.addChild(TsReachabilityTarget .FinalPoint (returnStmt))
7068
7169 val results = machine.analyze(listOf (method), listOf (initialTarget))
72- assertEquals(
73- 1 ,
74- results.size,
75- " Expected exactly one result for array-object combined reachable path, but got ${results.size} "
70+ assertTrue(
71+ results.isNotEmpty(),
72+ " Expected at least one result" ,
73+ )
74+
75+ val reachedStatements = results.flatMap { it.pathNode.allStatements }.toSet()
76+ assertTrue(
77+ returnStmt in reachedStatements,
78+ " Expected return statement to be reached in execution path"
7679 )
7780 }
7881
@@ -87,23 +90,24 @@ class ComplexReachabilityTest {
8790 val initialTarget = TsReachabilityTarget .InitialPoint (method.cfg.stmts.first())
8891 var target: TsTarget = initialTarget
8992
90- // if (processedArr.length > 0 )
93+ // if (processedArr.length > 1 )
9194 val firstIf = method.cfg.stmts.filterIsInstance<EtsIfStmt >()[0 ]
9295 target = target.addChild(TsReachabilityTarget .IntermediatePoint (firstIf))
9396
94- // if (processedArr[0] > input)
95- val secondIf = method.cfg.stmts.filterIsInstance<EtsIfStmt >()[1 ]
96- target = target.addChild(TsReachabilityTarget .IntermediatePoint (secondIf))
97-
9897 // return 1
9998 val returnStmt = method.cfg.stmts.filterIsInstance<EtsReturnStmt >()[0 ]
10099 target.addChild(TsReachabilityTarget .FinalPoint (returnStmt))
101100
102101 val results = machine.analyze(listOf (method), listOf (initialTarget))
103- assertEquals(
104- 1 ,
105- results.size,
106- " Expected exactly one result for method array manipulation reachable path, but got ${results.size} "
102+ assertTrue(
103+ results.isNotEmpty(),
104+ " Expected at least one result" ,
105+ )
106+
107+ val reachedStatements = results.flatMap { it.pathNode.allStatements }.toSet()
108+ assertTrue(
109+ returnStmt in reachedStatements,
110+ " Expected return statement to be reached in execution path"
107111 )
108112 }
109113
@@ -122,15 +126,24 @@ class ComplexReachabilityTest {
122126 val firstIf = method.cfg.stmts.filterIsInstance<EtsIfStmt >()[0 ]
123127 target = target.addChild(TsReachabilityTarget .IntermediatePoint (firstIf))
124128
129+ // if (calculator.getValue() === 25)
130+ val secondIf = method.cfg.stmts.filterIsInstance<EtsIfStmt >()[1 ]
131+ target = target.addChild(TsReachabilityTarget .IntermediatePoint (secondIf))
132+
125133 // return 1
126134 val returnStmt = method.cfg.stmts.filterIsInstance<EtsReturnStmt >()[0 ]
127135 target.addChild(TsReachabilityTarget .FinalPoint (returnStmt))
128136
129137 val results = machine.analyze(listOf (method), listOf (initialTarget))
130- assertEquals(
131- 1 ,
132- results.size,
133- " Expected exactly one result for object method call reachable path, but got ${results.size} "
138+ assertTrue(
139+ results.isNotEmpty(),
140+ " Expected at least one result" ,
141+ )
142+
143+ val reachedStatements = results.flatMap { it.pathNode.allStatements }.toSet()
144+ assertTrue(
145+ returnStmt in reachedStatements,
146+ " Expected return statement to be reached in execution path"
134147 )
135148 }
136149
@@ -164,12 +177,17 @@ class ComplexReachabilityTest {
164177 val results = machine.analyze(listOf (method), listOf (initialTarget))
165178 assertTrue(
166179 results.isNotEmpty(),
167- " Expected at least one result for conditional object reachable path, but got ${results.size} "
180+ " Expected at least one result" ,
168181 )
182+
169183 val reachedStatements = results.flatMap { it.pathNode.allStatements }.toSet()
170184 assertTrue(
171185 return1 in reachedStatements,
172- " Expected 'return 1' statement to be reached in conditional object reachable path"
186+ " Expected 'return 1' statement to be reached in execution path"
187+ )
188+ assertTrue(
189+ return2 in reachedStatements,
190+ " Expected 'return 2' statement to be reached in execution path"
173191 )
174192 }
175193
@@ -201,10 +219,15 @@ class ComplexReachabilityTest {
201219 target.addChild(TsReachabilityTarget .FinalPoint (returnStmt))
202220
203221 val results = machine.analyze(listOf (method), listOf (initialTarget))
204- assertEquals(
205- 1 ,
206- results.size,
207- " Expected exactly one result for cross-reference reachable path, but got ${results.size} "
222+ assertTrue(
223+ results.isNotEmpty(),
224+ " Expected at least one result" ,
225+ )
226+
227+ val reachedStatements = results.flatMap { it.pathNode.allStatements }.toSet()
228+ assertTrue(
229+ returnStmt in reachedStatements,
230+ " Expected return statement to be reached in execution path"
208231 )
209232 }
210233}
0 commit comments