Skip to content

Commit e0a1d02

Browse files
committed
restruct statistics by projects
1 parent 45131a9 commit e0a1d02

File tree

4 files changed

+43
-34
lines changed

4 files changed

+43
-34
lines changed

utbot-junit-contest/src/main/kotlin/org/utbot/contest/ContestEstimator.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,40 +61,39 @@ private fun findAllNotExportedPackages(report: String): List<UnnamedPackageInfo>
6161
}
6262

6363
private fun compileClass(testDir: String, classPath: String, testClass: String): Int {
64-
val opens = mutableSetOf<UnnamedPackageInfo>()
64+
val exports = mutableSetOf<UnnamedPackageInfo>()
6565
var exitCode = 0
66-
var errors = ""
6766

6867
repeat(triesToCompile) { tryNumber ->
69-
logger.debug { "Compile try ${tryNumber + 1}" }
7068
val cmd = arrayOf(
7169
javacCmd,
72-
*opens.flatMap {
73-
listOf("--add-opens", "${it.module}/${it.pack}=ALL-UNNAMED")
70+
*exports.flatMap {
71+
listOf("--add-exports", "${it.module}/${it.pack}=ALL-UNNAMED")
7472
}.toTypedArray(),
7573
"-d", testDir,
7674
"-cp", classPath,
7775
"-nowarn",
7876
"-XDignore.symbol.file",
7977
testClass
8078
)
79+
logger.debug { "Compile try ${tryNumber + 1}" }
8180

8281
logger.trace { cmd.toText() }
82+
8383
val process = Runtime.getRuntime().exec(cmd)
8484

85-
errors = process.errorStream.reader().buffered().readText()
85+
val errors = process.errorStream.reader().buffered().readText()
8686

8787
exitCode = process.waitFor()
8888
if (exitCode == 0) {
8989
return 0
9090
} else {
91-
opens += findAllNotExportedPackages(errors)
91+
if (errors.isNotEmpty())
92+
logger.error { "Compilation errors: $errors" }
93+
exports += findAllNotExportedPackages(errors)
9294
}
9395
}
9496

95-
if (errors.isNotEmpty())
96-
logger.error { "Compilation errors: $errors" }
97-
9897
return exitCode
9998
}
10099

@@ -135,7 +134,7 @@ enum class Tool {
135134
timeLimit: Long,
136135
fuzzingRatio: Double,
137136
methodNameFilter: String?,
138-
globalStats: GlobalStats,
137+
statsForProject: StatsForProject,
139138
compiledTestDir: File,
140139
classFqn: String
141140
) {
@@ -160,7 +159,7 @@ enum class Tool {
160159
return
161160
}
162161

163-
globalStats.statsForClasses.add(classStats)
162+
statsForProject.statsForClasses.add(classStats)
164163

165164
try {
166165
val testClass = cut.generatedTestFile
@@ -206,7 +205,7 @@ enum class Tool {
206205
timeLimit: Long,
207206
fuzzingRatio: Double,
208207
methodNameFilter: String?,
209-
globalStats: GlobalStats,
208+
statsForProject: StatsForProject,
210209
compiledTestDir: File,
211210
classFqn: String
212211
) {
@@ -277,7 +276,7 @@ enum class Tool {
277276
timeLimit: Long,
278277
fuzzingRatio: Double, // maybe create some specific settings
279278
methodNameFilter: String?,
280-
globalStats: GlobalStats,
279+
statsForProject: StatsForProject,
281280
compiledTestDir: File,
282281
classFqn: String
283282
)
@@ -432,6 +431,9 @@ fun runEstimator(
432431
outer@ for (project in projects) {
433432
if (projectFilter != null && project.name !in projectFilter) continue
434433

434+
val statsForProject = StatsForProject(project.name)
435+
globalStats.projectStats.add(statsForProject)
436+
435437
logger.info { "------------- project [${project.name}] ---- " }
436438

437439
// take all the classes from the corresponding jar if a list of the specified classes is empty
@@ -453,7 +455,7 @@ fun runEstimator(
453455

454456
logger.info { "------------- [${project.name}] ---->--- [$classIndex:$classFqn] ---------------------" }
455457

456-
tool.run(project, cut, timeLimit, fuzzingRatio, methodNameFilter, globalStats, compiledTestDir, classFqn)
458+
tool.run(project, cut, timeLimit, fuzzingRatio, methodNameFilter, statsForProject, compiledTestDir, classFqn)
457459
}
458460
}
459461
}

utbot-junit-contest/src/main/kotlin/org/utbot/contest/Statistics.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ private fun Double.format(digits: Int) = "%.${digits}f".format(this)
1212
fun <T> Iterable<T>.printMultiline(printer: (T) -> Any?) = "\n" + joinToString("\n") { "${printer(it)}" } + "\n"
1313

1414
class GlobalStats {
15+
val projectStats = mutableListOf<StatsForProject>()
16+
var duration: Long? = null
17+
}
18+
19+
class StatsForProject(val project: String) {
1520

1621
companion object {
1722
const val PRECISION: Int = 2
1823
}
1924

20-
var duration: Long? = null
21-
2225
val statsForClasses = mutableListOf<StatsForClass>()
2326

2427
val classesForGeneration: Int

utbot-junit-contest/src/main/kotlin/org/utbot/monitoring/MonitoringReport.kt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,17 @@ import org.utbot.contest.StatsForClass
77
@Serializable
88
data class MonitoringReport(
99
val parameters: MonitoringParameters,
10-
val summarised_metrics: SummarisedMetricsReport,
1110
val targets: List<TargetReport>,
1211
) {
13-
constructor(parameters: MonitoringParameters, targets: List<TargetReport>): this(
14-
parameters,
15-
SummarisedMetricsReport(targets),
16-
targets
17-
)
1812

1913
constructor(parameters: MonitoringParameters, stats: GlobalStats) : this(
2014
parameters,
21-
stats.statsForClasses.map {
15+
stats.projectStats.map { projectStats ->
2216
TargetReport(
23-
TargetDescription(it.project, it.className),
24-
ClassMetricsReport(it)
17+
projectStats.project,
18+
projectStats.statsForClasses.map {
19+
ClassReport(it.className, ClassMetricsReport(it))
20+
}
2521
)
2622
}
2723
)
@@ -36,14 +32,21 @@ data class MonitoringParameters(
3632

3733
@Serializable
3834
data class TargetReport(
39-
val target: TargetDescription,
40-
val metrics: ClassMetricsReport
41-
)
35+
val target: String,
36+
val summarised_metrics: SummarisedMetricsReport,
37+
val metrics_by_class: List<ClassReport>
38+
) {
39+
constructor(target: String, metrics_by_class: List<ClassReport>): this(
40+
target,
41+
SummarisedMetricsReport(metrics_by_class),
42+
metrics_by_class
43+
)
44+
}
4245

4346
@Serializable
44-
data class TargetDescription(
45-
val project: String,
46-
val classname: String
47+
data class ClassReport(
48+
val class_name: String,
49+
val metrics: ClassMetricsReport
4750
)
4851

4952
private fun Int.cover(total: Int): Double =
@@ -100,7 +103,7 @@ data class SummarisedMetricsReport(
100103
val bytecode_instructions_coverage_by_concolic: Double = covered_bytecode_instructions_by_concolic.cover(total_bytecode_instructions),
101104
val averaged_bytecode_instruction_coverage_by_classes: Double
102105
) {
103-
constructor(targets: Collection<TargetReport>) : this(
106+
constructor(targets: Collection<ClassReport>) : this(
104107
total_classes = targets.size,
105108
testcases_generated = targets.sumOf { it.metrics.testcases_generated },
106109
classes_failed_to_compile = targets.count { it.metrics.failed_to_compile },

utbot-junit-contest/src/main/kotlin/org/utbot/monitoring/StatisticsMonitoring.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ private val javaHome = System.getenv("JAVA_HOME")
2121
private val logger = KotlinLogging.logger {}
2222

2323
fun main(args: Array<String>) {
24+
val outputFile = args.getOrNull(0)?.let { File(it) }
25+
2426
logger.info { "Monitoring Settings:\n$MonitoringSettings" }
2527

2628
val methodFilter: String?
@@ -75,7 +77,6 @@ fun main(args: Array<String>) {
7577
if (measurementResults.isEmpty())
7678
exitProcess(1)
7779

78-
val outputFile = args.getOrNull(0)?.let { File(it) }
7980
outputFile?.let { file ->
8081
val format = Json { prettyPrint = true }
8182
val jsonString = format.encodeToString(measurementResults)

0 commit comments

Comments
 (0)