Invalid `UTestCyclicReferenceDescriptor`
@DaniilStepanov ci sta già lavorando.
Dal 24/11/2023.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Add com.google.common.collect.TreeMultiset$AvlNode to UTBotJava/utbot-junit-contest/src/main/resources/classes/guava/list.
Run ContestEstimator with following settings:
timeLimit = 120
methodFilter = "com.google.common.collect.TreeMultiset\$AvlNode.deleteMe"
projectFilter = listOf("guava")
There's following error in logs:
23:55:01.029 | ERROR | JcToUtExecutionConverter.convert((id:19)com.google.common.collect.TreeMultiset$AvlNode#deleteMe()) failed
java.lang.IllegalStateException: Invalid UTestCyclicReferenceDescriptor: UTestCyclicReferenceDescriptor(refId=903229461, type=org.jacodb.impl.types.JcClassTypeImpl@105962b3)
at org.utbot.contest.usvm.converter.JcToUtModelConverter.convertIgnoringOriginExprForThisModel(JcToUtModelConverter.kt:152) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtModelConverter.convert(JcToUtModelConverter.kt:72) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtModelConverter.convertIgnoringOriginExprForThisModel(JcToUtModelConverter.kt:106) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtModelConverter.convert(JcToUtModelConverter.kt:72) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtModelConverter.convertIgnoringOriginExprForThisModel(JcToUtModelConverter.kt:106) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtModelConverter.convert(JcToUtModelConverter.kt:72) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtExecutionConverter.convertState(JcToUtExecutionConverter.kt:224) ~[main/:?]
at org.utbot.contest.usvm.converter.JcToUtExecutionConverter.convert(JcToUtExecutionConverter.kt:73) ~[main/:?]
at org.utbot.contest.usvm.ContestUsvmKt$runUsvmGeneration$1$9$5.invoke(ContestUsvm.kt:190) [main/:?]
at org.utbot.contest.usvm.ContestUsvmKt$runUsvmGeneration$1$9$5.invoke(ContestUsvm.kt:168) [main/:?]
at org.utbot.contest.usvm.ContestUsvmKt$analyzeAsync$1$1$1.addState(ContestUsvm.kt:275) [main/:?]
at org.utbot.contest.usvm.ContestUsvmKt$analyzeAsync$1$1$1.addState(ContestUsvm.kt:269) [main/:?]
at org.usvm.statistics.collectors.CoveredNewStatesCollector.onStateTerminated(CoveredNewStatesCollector.kt:33) [usvm-core-local24-22-29.jar:?]
at org.usvm.statistics.CompositeUMachineObserver.onStateTerminated(UMachineObserver.kt:48) [usvm-core-local24-22-29.jar:?]
at org.usvm.UMachine.run(Machine.kt:66) [usvm-core-local24-22-29.jar:?]
at org.usvm.machine.JcMachine.analyze(JcMachine.kt:195) [usvm-jvm-local24-22-29.jar:?]
at org.utbot.contest.usvm.ContestUsvmKt$analyzeAsync$1.invoke(ContestUsvm.kt:267) [main/:?]
at org.utbot.contest.usvm.ContestUsvmKt$analyzeAsync$1.invoke(ContestUsvm.kt:265) [main/:?]
at org.utbot.common.ThreadBasedExecutor$invokeWithTimeout$1.invoke(ThreadUtil.kt:75) [utbot-core-2023.11-SNAPSHOT.jar:?]
at org.utbot.common.ThreadBasedExecutor$ensureThreadIsAlive$1.invoke(ThreadUtil.kt:129) [utbot-core-2023.11-SNAPSHOT.jar:?]
at org.utbot.common.ThreadBasedExecutor$ensureThreadIsAlive$1.invoke(ThreadUtil.kt:125) [utbot-core-2023.11-SNAPSHOT.jar:?]
at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30) [kotlin-stdlib-1.8.22.jar:1.8.22-release-407(1.8.22)]
The issue is that in the instrumentation output there is UTestCyclicReferenceDescriptor with refId=903229461 in such place that no UTestObjectDescriptor containing it has refId=903229461.
Note, that is generally impossible in current abstractions to simultaneously always:
- Have no cycles of
UTestValueDescriptor - Only have
UTestCyclicReferenceDescriptorin such places where there'sUTestObjectDescriptorcontaining it and having samerefId(here "containing" allows for indirect containing with intermediate layers, i.e. transitive closure of direct containment relationship) - Never use multiple
UTestObjectDescriptors to describe same object in same state (initialStateorfinalState)
Consider the following example, where we want to build descriptor for result:
val x = X()
val y = Y()
y.x = x
x.y = y
val result = Result(x=x, y=y)
Here descriptors for result.y.x.y should be UTestCyclicReferenceDescriptor (to satisfy assumption 1) and descriptor for result.x.y should be UTestObjectDescriptor (to satisfy assumption 2), but they should be the same descriptor, i.e. descriptor in y field of descriptor for x, where x can only be described by only one instance of UTestObjectDescriptor (to satisfy assumption 3).
Further discussion is advised.
- Lingua principale
- Kotlin
- Stelle
- 33
- Fork
- 27
- Merge medio
- 4g 3h
- PR unite (30g)
- 15
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di UnitTestBot/usvm
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
UnitTestBot/usvm#388 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
UnitTestBot/usvm#384 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
UnitTestBot/usvm#382 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
UnitTestBot/usvm#379 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
UnitTestBot/usvm#373 ·
Tutte le issue di UnitTestBot/usvm
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Anthonyy232/Paperize#614 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
bitcoindevkit/bdk-ffi#1125 ·
-
Issue: Bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
OpenAPITools/openapi-generator#24978 ·
-
helsemelding-json-schema json-schema-core
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100