Skip to content

Commit 65fedfd

Browse files
author
Abduqodiri Qurbonzoda
committed
Refactor set builder benchmark generators
1 parent ffc9828 commit 65fedfd

File tree

15 files changed

+186
-157
lines changed

15 files changed

+186
-157
lines changed

benchmarks-libraries/src/jmh/java/benchmarks/immutableSet/capsule/builder/utils.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
package benchmarks.immutableSet.capsule.builder
2020

2121
import benchmarks.immutableSize
22+
import benchmarks.IntWrapper
2223

23-
fun <E> persistentSetBuilderAdd(
24-
elements: List<E>,
24+
fun persistentSetBuilderAdd(
25+
elements: List<IntWrapper>,
2526
immutablePercentage: Double
26-
): io.usethesource.capsule.Set.Transient<E> {
27+
): io.usethesource.capsule.Set.Transient<IntWrapper> {
2728
val immutableSize = immutableSize(elements.size, immutablePercentage)
2829

29-
var set = io.usethesource.capsule.core.PersistentTrieSet.of<E>()
30+
var set = io.usethesource.capsule.core.PersistentTrieSet.of<IntWrapper>()
3031
for (index in 0 until immutableSize) {
3132
set = set.__insert(elements[index])
3233
}

benchmarks-libraries/src/jmh/java/benchmarks/immutableSet/clojure/builder/utils.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919
package benchmarks.immutableSet.clojure.builder
2020

2121
import benchmarks.immutableSize
22+
import benchmarks.IntWrapper
2223

23-
fun <E> persistentSetBuilderAdd(
24-
elements: List<E>,
24+
fun persistentSetBuilderAdd(
25+
elements: List<IntWrapper>,
2526
immutablePercentage: Double
2627
): clojure.lang.ATransientSet {
2728
val immutableSize = immutableSize(elements.size, immutablePercentage)

benchmarks-libraries/src/jmh/java/benchmarks/immutableSet/kotlin/builder/utils.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
package benchmarks.immutableSet.kotlin.builder
2020

2121
import benchmarks.immutableSize
22+
import benchmarks.IntWrapper
2223

23-
fun <E> persistentSetBuilderAdd(
24-
elements: List<E>,
24+
fun persistentSetBuilderAdd(
25+
elements: List<IntWrapper>,
2526
immutablePercentage: Double
26-
): kotlinx.collections.immutable.PersistentSet.Builder<E> {
27+
): kotlinx.collections.immutable.PersistentSet.Builder<IntWrapper> {
2728
val immutableSize = immutableSize(elements.size, immutablePercentage)
2829

29-
var set = kotlinx.collections.immutable.persistentHashSetOf<E>()
30+
var set = kotlinx.collections.immutable.persistentHashSetOf<IntWrapper>()
3031
for (index in 0 until immutableSize) {
3132
set = set.add(elements[index])
3233
}

benchmarks-libraries/src/jmh/java/benchmarks/immutableSet/kotlinOrdered/builder/utils.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
package benchmarks.immutableSet.kotlinOrdered.builder
2020

2121
import benchmarks.immutableSize
22+
import benchmarks.IntWrapper
2223

23-
fun <E> persistentSetBuilderAdd(
24-
elements: List<E>,
24+
fun persistentSetBuilderAdd(
25+
elements: List<IntWrapper>,
2526
immutablePercentage: Double
26-
): kotlinx.collections.immutable.PersistentSet.Builder<E> {
27+
): kotlinx.collections.immutable.PersistentSet.Builder<IntWrapper> {
2728
val immutableSize = immutableSize(elements.size, immutablePercentage)
2829

29-
var set = kotlinx.collections.immutable.persistentSetOf<E>()
30+
var set = kotlinx.collections.immutable.persistentSetOf<IntWrapper>()
3031
for (index in 0 until immutableSize) {
3132
set = set.add(elements[index])
3233
}

benchmarks-libraries/src/main/kotlin/generators/benchmarkSourceGenerator.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ private val setImpls = listOf(
156156
VavrOrderedSetImplementation
157157
)
158158
private val setBuilderImpls = listOf(
159-
SetBuilderKotlinBenchmark(),
160-
SetBuilderKotlinOrderedBenchmark(),
161-
SetBuilderCapsuleBenchmark(),
162-
SetBuilderClojureBenchmark()
159+
KotlinSetBuilderImplementation,
160+
KotlinOrderedSetBuilderImplementation,
161+
CapsuleSetBuilderImplementation,
162+
ClojureSetBuilderImplementation
163163
)
164164

165165
fun generateBenchmarks() {
@@ -236,12 +236,20 @@ fun generateBenchmarks() {
236236
setImpls.filterIsInstance<SetIterateBenchmark>().map { SetIterateBenchmarkGenerator(it) },
237237
setImpls.filterIsInstance<SetRemoveBenchmark>().map { SetRemoveBenchmarkGenerator(it) }
238238
)*/
239-
val setBuilderBenchmarks = listOf(
239+
val setBuilderBenchmarks = setBuilderImpls.map { listOf(
240+
SetBuilderAddBenchmarkGenerator(it),
241+
SetBuilderContainsBenchmarkGenerator(it),
242+
SetBuilderRemoveBenchmarkGenerator(it),
243+
SetBuilderUtilsGenerator(it)
244+
) } + setBuilderImpls.filter(SetBuilderImplementation::isIterable).map { listOf(
245+
SetBuilderIterateBenchmarkGenerator(it)
246+
) }
247+
/*listOf(
240248
setBuilderImpls.filterIsInstance<SetBuilderAddBenchmark>().map { SetBuilderAddBenchmarkGenerator(it) },
241249
setBuilderImpls.filterIsInstance<SetBuilderContainsBenchmark>().map { SetBuilderContainsBenchmarkGenerator(it) },
242250
setBuilderImpls.filterIsInstance<SetBuilderIterateBenchmark>().map { SetBuilderIterateBenchmarkGenerator(it) },
243251
setBuilderImpls.filterIsInstance<SetBuilderRemoveBenchmark>().map { SetBuilderRemoveBenchmarkGenerator(it) }
244-
)
252+
)*/
245253

246254

247255
val allBenchmarks = (listBenchmarks + listBuilderBenchmarks + mapBenchmarks + mapBuilderBenchmarks + setBenchmarks + setBuilderBenchmarks).flatten()
@@ -257,16 +265,12 @@ fun generateBenchmarks() {
257265
}
258266

259267
fun generateUtils() {
260-
val setBuilderUtils = setBuilderImpls.filterIsInstance<SetBuilderBenchmarkUtils>().map { SetBuilderUtilsGenerator(it) }
261-
262268
val commonUtils = listOf(
263269
IntWrapperGenerator(),
264270
CommonUtilsGenerator()
265271
)
266272

267-
val utils = setBuilderUtils + commonUtils
268-
269-
utils.forEach { util ->
273+
commonUtils.forEach { util ->
270274
val path = util.getPackage().replace('.', '/') + "/" + util.outputFileName + ".kt"
271275
val file = File(BENCHMARKS_ROOT + path)
272276
file.parentFile?.mkdirs()

benchmarks-libraries/src/main/kotlin/generators/immutableSetBuilder/addGenerator.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,7 @@ package generators.immutableSetBuilder
1919
import generators.BenchmarkSourceGenerator
2020
import java.io.PrintWriter
2121

22-
interface SetBuilderAddBenchmark {
23-
val packageName: String
24-
fun setBuilderType(E: String): String
25-
}
26-
27-
class SetBuilderAddBenchmarkGenerator(private val impl: SetBuilderAddBenchmark) : BenchmarkSourceGenerator() {
22+
class SetBuilderAddBenchmarkGenerator(private val impl: SetBuilderImplementation) : BenchmarkSourceGenerator() {
2823
override val outputFileName: String = "Add"
2924

3025
override fun getPackage(): String {
@@ -45,15 +40,15 @@ open class Add {
4540
@Param("0.0", "50.0")
4641
var immutablePercentage: Double = 0.0
4742
48-
private var elements = listOf<IntWrapper>()
43+
private var elements = listOf<$setBuilderElementType>()
4944
5045
@Setup(Level.Trial)
5146
fun prepare() {
5247
elements = generateElements(hashCodeType, size)
5348
}
5449
5550
@Benchmark
56-
fun add(): ${impl.setBuilderType("IntWrapper")} {
51+
fun add(): ${impl.type()} {
5752
return persistentSetBuilderAdd(elements, immutablePercentage)
5853
}
5954
@@ -66,7 +61,7 @@ open class Add {
6661
}
6762
""".trimIndent()
6863
)
69-
if (impl is SetBuilderIterateBenchmark) {
64+
if (impl.isIterable) {
7065
out.println("""
7166
@Benchmark
7267
fun addAndIterate(bh: Blackhole) {

benchmarks-libraries/src/main/kotlin/generators/immutableSetBuilder/containsGenerator.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,7 @@ package generators.immutableSetBuilder
1919
import generators.BenchmarkSourceGenerator
2020
import java.io.PrintWriter
2121

22-
interface SetBuilderContainsBenchmark {
23-
val packageName: String
24-
fun emptyOf(E: String): String
25-
}
26-
27-
class SetBuilderContainsBenchmarkGenerator(private val impl: SetBuilderContainsBenchmark) : BenchmarkSourceGenerator() {
22+
class SetBuilderContainsBenchmarkGenerator(private val impl: SetBuilderImplementation) : BenchmarkSourceGenerator() {
2823
override val outputFileName: String = "Contains"
2924

3025
override fun getPackage(): String {
@@ -45,8 +40,8 @@ open class Contains {
4540
@Param("0.0", "50.0")
4641
var immutablePercentage: Double = 0.0
4742
48-
private var elements = listOf<IntWrapper>()
49-
private var builder = ${impl.emptyOf("IntWrapper")}
43+
private var elements = listOf<$setBuilderElementType>()
44+
private var builder = ${impl.empty()}
5045
5146
@Setup(Level.Trial)
5247
fun prepare() {

benchmarks-libraries/src/main/kotlin/generators/immutableSetBuilder/impl/capsule.kt

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,28 @@ package generators.immutableSetBuilder.impl
1818

1919
import generators.immutableSetBuilder.*
2020

21-
class SetBuilderCapsuleBenchmark:
22-
SetBuilderContainsBenchmark,
23-
SetBuilderIterateBenchmark,
24-
SetBuilderAddBenchmark,
25-
SetBuilderRemoveBenchmark,
26-
SetBuilderBenchmarkUtils
27-
{
28-
override val packageName: String = "capsule.builder"
29-
30-
override fun setBuilderType(E: String): String = "io.usethesource.capsule.Set.Transient<$E>"
31-
32-
override fun emptyOf(E: String): String = "io.usethesource.capsule.core.PersistentTrieSet.of<$E>().asTransient()"
33-
override fun immutableOf(E: String): String = "io.usethesource.capsule.core.PersistentTrieSet.of<$E>()"
34-
35-
override val addOperation: String = "add"
36-
override fun immutableAddOperation(set: String, element: String): String = "$set.__insert($element)"
37-
38-
override val removeOperation: String = "__remove"
39-
40-
override fun builderOperation(set: String): String = "$set.asTransient()"
21+
object CapsuleSetBuilderImplementation: SetBuilderImplementation{
22+
override val packageName: String
23+
= "capsule.builder"
24+
25+
override fun type(): String
26+
= "io.usethesource.capsule.Set.Transient<$setBuilderElementType>"
27+
override fun empty(): String
28+
= "io.usethesource.capsule.core.PersistentTrieSet.of<$setBuilderElementType>().asTransient()"
29+
30+
override fun addOperation(builder: String, element: String): String
31+
= "$builder.add($element)"
32+
override fun removeOperation(builder: String, element: String): String
33+
= "$builder.__remove($element)"
34+
35+
override val isIterable: Boolean
36+
= true
37+
38+
override fun builderOperation(immutable: String): String
39+
= "$immutable.asTransient()"
40+
41+
override fun immutableEmpty(): String
42+
= "io.usethesource.capsule.core.PersistentTrieSet.of<$setBuilderElementType>()"
43+
override fun immutableAddOperation(immutable: String, element: String): String
44+
= "$immutable.__insert($element)"
4145
}

benchmarks-libraries/src/main/kotlin/generators/immutableSetBuilder/impl/clojure.kt

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,28 @@ package generators.immutableSetBuilder.impl
1818

1919
import generators.immutableSetBuilder.*
2020

21-
class SetBuilderClojureBenchmark:
22-
SetBuilderContainsBenchmark,
23-
SetBuilderAddBenchmark,
24-
SetBuilderRemoveBenchmark,
25-
SetBuilderBenchmarkUtils
26-
{
27-
override val packageName: String = "clojure.builder"
28-
29-
override fun setBuilderType(E: String): String = "clojure.lang.ATransientSet"
30-
31-
override fun emptyOf(E: String): String = "clojure.lang.PersistentHashSet.EMPTY.asTransient() as clojure.lang.ATransientSet"
32-
override fun immutableOf(E: String): String = "clojure.lang.PersistentHashSet.EMPTY"
33-
34-
override val addOperation: String = "conj"
35-
override fun immutableAddOperation(set: String, element: String): String = "$set.cons($element) as clojure.lang.PersistentHashSet"
36-
37-
override val removeOperation: String = "disjoin"
38-
39-
override fun builderOperation(set: String): String = "$set.asTransient() as clojure.lang.ATransientSet"
21+
object ClojureSetBuilderImplementation: SetBuilderImplementation{
22+
override val packageName: String
23+
= "clojure.builder"
24+
25+
override fun type(): String
26+
= "clojure.lang.ATransientSet"
27+
override fun empty(): String
28+
= "clojure.lang.PersistentHashSet.EMPTY.asTransient() as clojure.lang.ATransientSet"
29+
30+
override fun addOperation(builder: String, element: String): String
31+
= "$builder.conj($element)"
32+
override fun removeOperation(builder: String, element: String): String
33+
= "$builder.disjoin($element)"
34+
35+
override val isIterable: Boolean
36+
= false
37+
38+
override fun builderOperation(immutable: String): String
39+
= "$immutable.asTransient() as clojure.lang.ATransientSet"
40+
41+
override fun immutableEmpty(): String
42+
= "clojure.lang.PersistentHashSet.EMPTY"
43+
override fun immutableAddOperation(immutable: String, element: String): String
44+
= "$immutable.cons($element) as clojure.lang.PersistentHashSet"
4045
}

benchmarks-libraries/src/main/kotlin/generators/immutableSetBuilder/impl/kotlin.kt

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,28 @@ package generators.immutableSetBuilder.impl
1818

1919
import generators.immutableSetBuilder.*
2020

21-
class SetBuilderKotlinBenchmark:
22-
SetBuilderContainsBenchmark,
23-
SetBuilderIterateBenchmark,
24-
SetBuilderAddBenchmark,
25-
SetBuilderRemoveBenchmark,
26-
SetBuilderBenchmarkUtils
27-
{
28-
override val packageName: String = "kotlin.builder"
29-
30-
override fun setBuilderType(E: String): String = "kotlinx.collections.immutable.PersistentSet.Builder<$E>"
31-
32-
override fun emptyOf(E: String): String = "kotlinx.collections.immutable.persistentHashSetOf<$E>().builder()"
33-
override fun immutableOf(E: String): String = "kotlinx.collections.immutable.persistentHashSetOf<$E>()"
34-
35-
override val addOperation: String = "add"
36-
override fun immutableAddOperation(set: String, element: String): String = "$set.add($element)"
37-
38-
override val removeOperation: String = "remove"
39-
40-
override fun builderOperation(set: String): String = "$set.builder()"
21+
object KotlinSetBuilderImplementation: SetBuilderImplementation{
22+
override val packageName: String
23+
= "kotlin.builder"
24+
25+
override fun type(): String
26+
= "kotlinx.collections.immutable.PersistentSet.Builder<$setBuilderElementType>"
27+
override fun empty(): String
28+
= "kotlinx.collections.immutable.persistentHashSetOf<$setBuilderElementType>().builder()"
29+
30+
override fun addOperation(builder: String, element: String): String
31+
= "$builder.add($element)"
32+
override fun removeOperation(builder: String, element: String): String
33+
= "$builder.remove($element)"
34+
35+
override val isIterable: Boolean
36+
= true
37+
38+
override fun builderOperation(immutable: String): String
39+
= "$immutable.builder()"
40+
41+
override fun immutableEmpty(): String
42+
= "kotlinx.collections.immutable.persistentHashSetOf<$setBuilderElementType>()"
43+
override fun immutableAddOperation(immutable: String, element: String): String
44+
= "$immutable.add($element)"
4145
}

0 commit comments

Comments
 (0)