Skip to content

Commit e155c77

Browse files
authored
Make multiplatform source suite generator be able to process tests in… (#216)
Fixes #215 issue
1 parent aff0cac commit e155c77

File tree

5 files changed

+79
-5
lines changed

5 files changed

+79
-5
lines changed

integration/src/test/kotlin/kotlinx/benchmark/integration/SuiteSourceGeneratorTest.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,36 @@ class SuiteSourceGeneratorTest : GradleTest() {
2020
}
2121
}
2222
}
23+
24+
@Test
25+
fun generateAndCompileNativeBenchmarks() {
26+
generateAndCompile("native")
27+
}
28+
29+
@Test
30+
fun generateAndCompileJSBenchmarks() {
31+
generateAndCompile("jsIr")
32+
}
33+
34+
@Test
35+
fun generateAndCompileWasmBenchmarks() {
36+
generateAndCompile("wasmJs")
37+
}
38+
39+
private fun generateAndCompile(target: String) {
40+
project("kotlin-multiplatform", true).let { runner ->
41+
runner.run(":${target}BenchmarkGenerate")
42+
43+
runner.generatedDir(target, "RootBenchmark_Descriptor.kt") { descriptorFile ->
44+
val text = descriptorFile.readText()
45+
assertFalse(
46+
text.contains("<root>"),
47+
"Generated descriptor contains illegal characters '<root>' in $text"
48+
)
49+
}
50+
51+
val capitalizedTarget = target.replaceFirstChar { it.uppercaseChar() }
52+
runner.run(":compile${capitalizedTarget}BenchmarkKotlin${capitalizedTarget}")
53+
}
54+
}
2355
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import kotlinx.benchmark.*
2+
import kotlin.math.*
3+
4+
@State(Scope.Benchmark)
5+
@Measurement(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS)
6+
@OutputTimeUnit(BenchmarkTimeUnit.MILLISECONDS)
7+
@BenchmarkMode(Mode.Throughput)
8+
open class RootBenchmark {
9+
@Benchmark
10+
open fun mathBenchmark(): Double {
11+
return log(sqrt(3.0) * cos(3.0), 2.0)
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import kotlinx.benchmark.*
2+
import kotlin.math.*
3+
4+
@State(Scope.Benchmark)
5+
@Measurement(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS)
6+
@OutputTimeUnit(BenchmarkTimeUnit.MILLISECONDS)
7+
@BenchmarkMode(Mode.Throughput)
8+
open class RootBenchmark {
9+
@Benchmark
10+
open fun mathBenchmark(): Double {
11+
return log(sqrt(3.0) * cos(3.0), 2.0)
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import kotlinx.benchmark.*
2+
import kotlin.math.*
3+
4+
@State(Scope.Benchmark)
5+
@Measurement(iterations = 3, time = 1, timeUnit = BenchmarkTimeUnit.SECONDS)
6+
@OutputTimeUnit(BenchmarkTimeUnit.MILLISECONDS)
7+
@BenchmarkMode(Mode.Throughput)
8+
open class RootBenchmark {
9+
@Benchmark
10+
open fun mathBenchmark(): Double {
11+
return log(sqrt(3.0) * cos(3.0), 2.0)
12+
}
13+
}

plugin/main/src/kotlinx/benchmark/gradle/SuiteSourceGenerator.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,15 @@ class SuiteSourceGenerator(val title: String, val module: ModuleDescriptor, val
124124
}
125125

126126
private fun generateBenchmark(original: ClassDescriptor) {
127-
val originalPackage = original.fqNameSafe.parent()
128-
val originalName = original.fqNameSafe.shortName()
129-
val originalClass = ClassName(originalPackage.toString(), originalName.toString())
127+
val originalFqName = original.fqNameSafe
128+
val originalPackage = originalFqName.parent().let {
129+
if (it.isRoot) "" else it.asString()
130+
}
131+
val originalName = originalFqName.shortName().toString()
132+
val originalClass = ClassName(originalPackage, originalName)
130133

131-
val benchmarkPackageName = "$mainBenchmarkPackage.$originalPackage"
132-
val benchmarkName = originalName.toString() + "_Descriptor"
134+
val benchmarkPackageName = mainBenchmarkPackage + if (originalPackage.isNotEmpty()) ".$originalPackage" else ""
135+
val benchmarkName = "${originalName}_Descriptor"
133136
val benchmarkClass = ClassName(benchmarkPackageName, benchmarkName)
134137

135138
val functions = DescriptorUtils.getAllDescriptors(original.unsubstitutedMemberScope)

0 commit comments

Comments
 (0)