11package org.usvm.project
22
33import org.jacodb.ets.model.EtsScene
4- import org.jacodb.ets.utils.getDeclaredLocals
5- import org.jacodb.ets.utils.getLocals
4+ import org.jacodb.ets.utils.CONSTRUCTOR_NAME
5+ import org.jacodb.ets.utils.INSTANCE_INIT_METHOD_NAME
6+ import org.jacodb.ets.utils.STATIC_INIT_METHOD_NAME
67import org.jacodb.ets.utils.loadEtsProjectFromIR
78import org.junit.jupiter.api.condition.EnabledIf
8- import org.usvm.api.TsTestValue
99import org.usvm.machine.TsMachine
1010import org.usvm.machine.TsOptions
1111import org.usvm.util.TsMethodTestRunner
@@ -35,30 +35,41 @@ class RunOnDemoCalcProject : TsMethodTestRunner() {
3535
3636 @Test
3737 fun `test run on each method` () {
38- println (" Total classes: ${scene.projectAndSdkClasses.size} " )
39- for (clazz in scene.projectAndSdkClasses) {
40- println ()
41- println (" CLASS: ${clazz.name} in ${clazz.signature.file} " )
42- for (method in clazz.methods) {
43- println ()
44- println (" METHOD: ${clazz.name} ::${method.name} (${method.parameters.joinToString()} )" )
45- if (method.cfg.stmts.isEmpty()) {
46- println (" CFG is empty" )
47- continue
48- }
49- if (method.getLocals() != method.getDeclaredLocals()) {
50- println (
51- " Locals mismatch:\n getLocals() = ${
52- method.getLocals().sortedBy { it.name }
53- } \n getDeclaredLocals() = ${
54- method.getDeclaredLocals().sortedBy { it.name }
55- } "
56- )
57- // continue
38+ val exceptions = mutableListOf<Throwable >()
39+ val classes = scene.projectClasses.filterNot { it.name.startsWith(" %AC" ) }
40+
41+ println (" Total classes: ${classes.size} " )
42+
43+ classes
44+ // .filter { it.name == "NewAlbumPage" }
45+ .forEach { clazz ->
46+ val methods = clazz.methods
47+ .filterNot { it.cfg.stmts.isEmpty() }
48+ .filterNot { it.isStatic }
49+ .filterNot { it.name.startsWith(" %AM" ) }
50+ .filterNot { it.name == " build" }
51+ .filterNot { it.name == INSTANCE_INIT_METHOD_NAME }
52+ .filterNot { it.name == STATIC_INIT_METHOD_NAME }
53+ .filterNot { it.name == CONSTRUCTOR_NAME }
54+
55+ if (methods.isEmpty()) return @forEach
56+
57+ runCatching {
58+ val tsOptions = TsOptions ()
59+ TsMachine (scene, options, tsOptions).use { machine ->
60+ val states = machine.analyze(methods)
61+ states.let {}
62+ }
63+ }.onFailure {
64+ exceptions + = it
5865 }
59- discoverProperties<TsTestValue >(method = method)
6066 }
61- }
67+
68+ val exc = exceptions.groupBy { it }
69+ println (
70+ exc.values.sortedBy
71+ { it.size }.asReversed().map
72+ { it.first() })
6273 }
6374
6475 @Test
@@ -72,6 +83,7 @@ class RunOnDemoCalcProject : TsMethodTestRunner() {
7283 .filterNot { it.name.startsWith(" %AM" ) }
7384 .filterNot { it.name == " build" }
7485 }
86+ .filter { it.name == " createKvStore" && it.enclosingClass?.name == " KvStoreModel" }
7587 val tsOptions = TsOptions ()
7688 TsMachine (scene, options, tsOptions).use { machine ->
7789 val states = machine.analyze(methods)
0 commit comments