Skip to content

Commit a216990

Browse files
author
Abduqodiri Qurbonzoda
committed
Refactor map builder benchmark generators
1 parent c4d7579 commit a216990

File tree

12 files changed

+207
-175
lines changed

12 files changed

+207
-175
lines changed

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ private val mapImpls = listOf(
133133
VavrOrderedMapImplementation
134134
)
135135
private val mapBuilderImpls = listOf(
136-
MapBuilderKotlinBenchmark(),
137-
MapBuilderKotlinOrderedBenchmark(),
138-
MapBuilderCapsuleBenchmark(),
139-
MapBuilderPaguroBenchmark(),
140-
MapBuilderClojureBenchmark()
136+
KotlinMapBuilderImplementation,
137+
KotlinOrderedMapBuilderImplementation,
138+
CapsuleMapBuilderImplementation,
139+
PaguroMapBuilderImplementation,
140+
ClojureMapBuilderImplementation
141141
)
142142

143143
private val setImpls = listOf(
@@ -208,12 +208,20 @@ fun generateBenchmarks() {
208208
mapImpls.filterIsInstance<MapPutBenchmark>().map { MapPutBenchmarkGenerator(it) },
209209
mapImpls.filterIsInstance<MapRemoveBenchmark>().map { MapRemoveBenchmarkGenerator(it) }
210210
)*/
211-
val mapBuilderBenchmarks = listOf(
211+
val mapBuilderBenchmarks = mapBuilderImpls.map { listOf(
212+
MapBuilderGetBenchmarkGenerator(it),
213+
MapBuilderPutBenchmarkGenerator(it),
214+
MapBuilderRemoveBenchmarkGenerator(it),
215+
MapBuilderUtilsGenerator(it)
216+
) } + mapBuilderImpls.filter(MapBuilderImplementation::isIterable).map { listOf(
217+
MapBuilderIterateBenchmarkGenerator(it)
218+
) }
219+
/*listOf(
212220
mapBuilderImpls.filterIsInstance<MapBuilderGetBenchmark>().map { MapBuilderGetBenchmarkGenerator(it) },
213221
mapBuilderImpls.filterIsInstance<MapBuilderIterateBenchmark>().map { MapBuilderIterateBenchmarkGenerator(it) },
214222
mapBuilderImpls.filterIsInstance<MapBuilderPutBenchmark>().map { MapBuilderPutBenchmarkGenerator(it) },
215223
mapBuilderImpls.filterIsInstance<MapBuilderRemoveBenchmark>().map { MapBuilderRemoveBenchmarkGenerator(it) }
216-
)
224+
)*/
217225

218226
val setBenchmarks = listOf(
219227
setImpls.filterIsInstance<SetAddBenchmark>().map { SetAddBenchmarkGenerator(it) },
@@ -242,8 +250,6 @@ fun generateBenchmarks() {
242250
}
243251

244252
fun generateUtils() {
245-
val mapBuilderUtils = mapBuilderImpls.filterIsInstance<MapBuilderBenchmarkUtils>().map { MapBuilderUtilsGenerator(it) }
246-
247253
val setUtils = setImpls.filterIsInstance<SetBenchmarkUtils>().map { SetUtilsGenerator(it) }
248254
val setBuilderUtils = setBuilderImpls.filterIsInstance<SetBuilderBenchmarkUtils>().map { SetBuilderUtilsGenerator(it) }
249255

@@ -252,7 +258,7 @@ fun generateUtils() {
252258
CommonUtilsGenerator()
253259
)
254260

255-
val utils = mapBuilderUtils + setUtils + setBuilderUtils + commonUtils
261+
val utils = setUtils + setBuilderUtils + commonUtils
256262

257263
utils.forEach { util ->
258264
val path = util.getPackage().replace('.', '/') + "/" + util.outputFileName + ".kt"

benchmarks-libraries/src/main/kotlin/generators/immutableMapBuilder/getGenerator.kt

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

22-
interface MapBuilderGetBenchmark {
23-
val packageName: String
24-
fun emptyOf(K: String, V: String): String
25-
val getOperation: String
26-
}
27-
28-
class MapBuilderGetBenchmarkGenerator(private val impl: MapBuilderGetBenchmark) : BenchmarkSourceGenerator() {
22+
class MapBuilderGetBenchmarkGenerator(private val impl: MapBuilderImplementation) : BenchmarkSourceGenerator() {
2923
override val outputFileName: String = "Get"
3024

3125
override fun getPackage(): String {
@@ -46,8 +40,8 @@ open class Get {
4640
@Param("0.0", "50.0")
4741
var immutablePercentage: Double = 0.0
4842
49-
private var keys = listOf<IntWrapper>()
50-
private var builder = ${impl.emptyOf("IntWrapper", "String")}
43+
private var keys = listOf<$mapBuilderKeyType>()
44+
private var builder = ${impl.empty()}
5145
5246
@Setup(Level.Trial)
5347
fun prepare() {
@@ -61,7 +55,7 @@ open class Get {
6155
@Benchmark
6256
fun get(bh: Blackhole) {
6357
repeat(times = size) { index ->
64-
bh.consume(builder.${impl.getOperation}(keys[index]))
58+
bh.consume(${impl.getOperation("builder", "keys[index]")})
6559
}
6660
}
6761
}

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

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,30 @@ package generators.immutableMapBuilder.impl
1818

1919
import generators.immutableMapBuilder.*
2020

21-
class MapBuilderCapsuleBenchmark:
22-
MapBuilderGetBenchmark,
23-
MapBuilderIterateBenchmark,
24-
MapBuilderPutBenchmark,
25-
MapBuilderRemoveBenchmark,
26-
MapBuilderBenchmarkUtils
27-
{
28-
override val packageName: String = "capsule.builder"
29-
30-
override fun mapBuilderType(K: String, V: String): String = "io.usethesource.capsule.Map.Transient<$K, $V>"
31-
32-
override fun emptyOf(K: String, V: String): String = "io.usethesource.capsule.core.PersistentTrieMap.of<$K, $V>().asTransient()"
33-
override fun immutableOf(K: String, V: String): String = "io.usethesource.capsule.core.PersistentTrieMap.of<$K, $V>()"
34-
35-
override val putOperation: String = "put"
36-
override val immutablePutOperation: String = "__put"
37-
38-
override val getOperation: String = "get"
39-
40-
override val removeOperation: String = "remove"
41-
42-
override fun builderOperation(map: String): String = "$map.asTransient()"
21+
object CapsuleMapBuilderImplementation: MapBuilderImplementation {
22+
override val packageName: String
23+
= "capsule.builder"
24+
25+
override fun type(): String
26+
= "io.usethesource.capsule.Map.Transient<$mapBuilderKeyType, $mapBuilderValueType>"
27+
override fun empty(): String
28+
= "io.usethesource.capsule.core.PersistentTrieMap.of<$mapBuilderKeyType, $mapBuilderValueType>().asTransient()"
29+
30+
override fun getOperation(builder: String, key: String): String
31+
= "$builder.get($key)"
32+
override fun putOperation(builder: String, key: String, value: String): String
33+
= "$builder.put($key, $value)"
34+
override fun removeOperation(builder: String, key: String): String
35+
= "$builder.remove($key)"
36+
37+
override val isIterable: Boolean
38+
= true
39+
40+
override fun builderOperation(immutable: String): String =
41+
"$immutable.asTransient()"
42+
43+
override fun immutableEmpty(): String
44+
= "io.usethesource.capsule.core.PersistentTrieMap.of<$mapBuilderKeyType, $mapBuilderValueType>()"
45+
override fun immutablePutOperation(immutable: String, key: String, value: String): String
46+
= "$immutable.__put($key, $value)"
4347
}

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

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,30 @@ package generators.immutableMapBuilder.impl
1818

1919
import generators.immutableMapBuilder.*
2020

21-
class MapBuilderClojureBenchmark:
22-
MapBuilderGetBenchmark,
23-
MapBuilderPutBenchmark,
24-
MapBuilderRemoveBenchmark,
25-
MapBuilderBenchmarkUtils
26-
{
27-
override val packageName: String = "clojure.builder"
28-
29-
override fun mapBuilderType(K: String, V: String): String = "clojure.lang.ATransientMap"
30-
31-
override fun emptyOf(K: String, V: String): String = "clojure.lang.PersistentHashMap.EMPTY.asTransient() as clojure.lang.ATransientMap"
32-
override fun immutableOf(K: String, V: String): String = "clojure.lang.PersistentHashMap.EMPTY as clojure.lang.IPersistentMap"
33-
34-
override val getOperation: String = "valAt"
35-
36-
override val putOperation: String = "assoc"
37-
override val immutablePutOperation: String = "assoc"
38-
39-
override val removeOperation: String = "without"
40-
41-
override fun builderOperation(map: String): String = "($map as clojure.lang.PersistentHashMap).asTransient() as clojure.lang.ATransientMap"
21+
object ClojureMapBuilderImplementation: MapBuilderImplementation {
22+
override val packageName: String
23+
= "clojure.builder"
24+
25+
override fun type(): String
26+
= "clojure.lang.ATransientMap"
27+
override fun empty(): String
28+
= "clojure.lang.PersistentHashMap.EMPTY.asTransient() as clojure.lang.ATransientMap"
29+
30+
override fun getOperation(builder: String, key: String): String
31+
= "$builder.valAt($key)"
32+
override fun putOperation(builder: String, key: String, value: String): String
33+
= "$builder.assoc($key, $value)"
34+
override fun removeOperation(builder: String, key: String): String
35+
= "$builder.without($key)"
36+
37+
override val isIterable: Boolean
38+
= false
39+
40+
override fun builderOperation(immutable: String): String
41+
= "($immutable as clojure.lang.PersistentHashMap).asTransient() as clojure.lang.ATransientMap"
42+
43+
override fun immutableEmpty(): String
44+
= "clojure.lang.PersistentHashMap.EMPTY as clojure.lang.IPersistentMap"
45+
override fun immutablePutOperation(immutable: String, key: String, value: String): String
46+
= "$immutable.assoc($key, $value)"
4247
}

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

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,30 @@ package generators.immutableMapBuilder.impl
1818

1919
import generators.immutableMapBuilder.*
2020

21-
class MapBuilderKotlinBenchmark:
22-
MapBuilderGetBenchmark,
23-
MapBuilderIterateBenchmark,
24-
MapBuilderPutBenchmark,
25-
MapBuilderRemoveBenchmark,
26-
MapBuilderBenchmarkUtils
27-
{
28-
override val packageName: String = "kotlin.builder"
29-
30-
override fun mapBuilderType(K: String, V: String): String = "kotlinx.collections.immutable.PersistentMap.Builder<$K, $V>"
31-
32-
override fun emptyOf(K: String, V: String): String = "kotlinx.collections.immutable.persistentHashMapOf<$K, $V>().builder()"
33-
override fun immutableOf(K: String, V: String): String = "kotlinx.collections.immutable.persistentHashMapOf<$K, $V>()"
34-
35-
override val putOperation: String = "put"
36-
override val immutablePutOperation: String = "put"
37-
38-
override val getOperation: String = "get"
39-
40-
override val removeOperation: String = "remove"
41-
42-
override fun builderOperation(map: String): String = "$map.builder()"
21+
object KotlinMapBuilderImplementation: MapBuilderImplementation {
22+
override val packageName: String
23+
= "kotlin.builder"
24+
25+
override fun type(): String
26+
= "kotlinx.collections.immutable.PersistentMap.Builder<$mapBuilderKeyType, $mapBuilderValueType>"
27+
override fun empty(): String
28+
= "kotlinx.collections.immutable.persistentHashMapOf<$mapBuilderKeyType, $mapBuilderValueType>().builder()"
29+
30+
override fun getOperation(builder: String, key: String): String
31+
= "$builder.get($key)"
32+
override fun putOperation(builder: String, key: String, value: String): String
33+
= "$builder.put($key, $value)"
34+
override fun removeOperation(builder: String, key: String): String
35+
= "$builder.remove($key)"
36+
37+
override val isIterable: Boolean
38+
= true
39+
40+
override fun builderOperation(immutable: String): String =
41+
"$immutable.builder()"
42+
43+
override fun immutableEmpty(): String
44+
= "kotlinx.collections.immutable.persistentHashMapOf<$mapBuilderKeyType, $mapBuilderValueType>()"
45+
override fun immutablePutOperation(immutable: String, key: String, value: String): String
46+
= "$immutable.put($key, $value)"
4347
}

benchmarks-libraries/src/main/kotlin/generators/immutableMapBuilder/impl/kotlinOrdered.kt

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,30 @@ package generators.immutableMapBuilder.impl
1818

1919
import generators.immutableMapBuilder.*
2020

21-
class MapBuilderKotlinOrderedBenchmark:
22-
MapBuilderGetBenchmark,
23-
MapBuilderIterateBenchmark,
24-
MapBuilderPutBenchmark,
25-
MapBuilderRemoveBenchmark,
26-
MapBuilderBenchmarkUtils
27-
{
28-
override val packageName: String = "kotlinOrdered.builder"
29-
30-
override fun mapBuilderType(K: String, V: String): String = "kotlinx.collections.immutable.PersistentMap.Builder<$K, $V>"
31-
32-
override fun emptyOf(K: String, V: String): String = "kotlinx.collections.immutable.persistentMapOf<$K, $V>().builder()"
33-
override fun immutableOf(K: String, V: String): String = "kotlinx.collections.immutable.persistentMapOf<$K, $V>()"
34-
35-
override val putOperation: String = "put"
36-
override val immutablePutOperation: String = "put"
37-
38-
override val getOperation: String = "get"
39-
40-
override val removeOperation: String = "remove"
41-
42-
override fun builderOperation(map: String): String = "$map.builder()"
21+
object KotlinOrderedMapBuilderImplementation: MapBuilderImplementation {
22+
override val packageName: String
23+
= "kotlinOrdered.builder"
24+
25+
override fun type(): String
26+
= "kotlinx.collections.immutable.PersistentMap.Builder<$mapBuilderKeyType, $mapBuilderValueType>"
27+
override fun empty(): String
28+
= "kotlinx.collections.immutable.persistentMapOf<$mapBuilderKeyType, $mapBuilderValueType>().builder()"
29+
30+
override fun getOperation(builder: String, key: String): String
31+
= "$builder.get($key)"
32+
override fun putOperation(builder: String, key: String, value: String): String
33+
= "$builder.put($key, $value)"
34+
override fun removeOperation(builder: String, key: String): String
35+
= "$builder.remove($key)"
36+
37+
override val isIterable: Boolean
38+
= true
39+
40+
override fun builderOperation(immutable: String): String =
41+
"$immutable.builder()"
42+
43+
override fun immutableEmpty(): String
44+
= "kotlinx.collections.immutable.persistentMapOf<$mapBuilderKeyType, $mapBuilderValueType>()"
45+
override fun immutablePutOperation(immutable: String, key: String, value: String): String
46+
= "$immutable.put($key, $value)"
4347
}

benchmarks-libraries/src/main/kotlin/generators/immutableMapBuilder/impl/paguro.kt

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,30 @@ package generators.immutableMapBuilder.impl
1818

1919
import generators.immutableMapBuilder.*
2020

21-
class MapBuilderPaguroBenchmark:
22-
MapBuilderGetBenchmark,
23-
MapBuilderIterateBenchmark,
24-
MapBuilderPutBenchmark,
25-
MapBuilderRemoveBenchmark,
26-
MapBuilderBenchmarkUtils
27-
{
28-
override val packageName: String = "paguro.builder"
29-
30-
override fun mapBuilderType(K: String, V: String): String = "org.organicdesign.fp.collections.PersistentHashMap.MutableHashMap<$K, $V>"
31-
32-
override fun emptyOf(K: String, V: String): String = "org.organicdesign.fp.collections.PersistentHashMap.emptyMutable<$K, $V>()"
33-
override fun immutableOf(K: String, V: String): String = "org.organicdesign.fp.collections.PersistentHashMap.empty<$K, $V>()"
34-
35-
override val putOperation: String = "assoc"
36-
override val immutablePutOperation: String = "assoc"
37-
38-
override val getOperation: String = "get"
39-
40-
override val removeOperation: String = "without"
41-
42-
override fun builderOperation(map: String): String = "$map.mutable()"
21+
object PaguroMapBuilderImplementation: MapBuilderImplementation {
22+
override val packageName: String
23+
= "paguro.builder"
24+
25+
override fun type(): String
26+
= "org.organicdesign.fp.collections.PersistentHashMap.MutableHashMap<$mapBuilderKeyType, $mapBuilderValueType>"
27+
override fun empty(): String
28+
= "org.organicdesign.fp.collections.PersistentHashMap.emptyMutable<$mapBuilderKeyType, $mapBuilderValueType>()"
29+
30+
override fun getOperation(builder: String, key: String): String
31+
= "$builder.get($key)"
32+
override fun putOperation(builder: String, key: String, value: String): String
33+
= "$builder.assoc($key, $value)"
34+
override fun removeOperation(builder: String, key: String): String
35+
= "$builder.without($key)"
36+
37+
override val isIterable: Boolean
38+
= true
39+
40+
override fun builderOperation(immutable: String): String =
41+
"$immutable.mutable()"
42+
43+
override fun immutableEmpty(): String
44+
= "org.organicdesign.fp.collections.PersistentHashMap.empty<$mapBuilderKeyType, $mapBuilderValueType>()"
45+
override fun immutablePutOperation(immutable: String, key: String, value: String): String
46+
= "$immutable.assoc($key, $value)"
4347
}

benchmarks-libraries/src/main/kotlin/generators/immutableMapBuilder/iterateGenerator.kt

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

22-
interface MapBuilderIterateBenchmark {
23-
val packageName: String
24-
fun emptyOf(K: String, V: String): String
25-
}
26-
27-
class MapBuilderIterateBenchmarkGenerator(private val impl: MapBuilderIterateBenchmark) : BenchmarkSourceGenerator() {
22+
class MapBuilderIterateBenchmarkGenerator(private val impl: MapBuilderImplementation) : BenchmarkSourceGenerator() {
2823
override val outputFileName: String = "Iterate"
2924

3025
override fun getPackage(): String {
@@ -45,7 +40,7 @@ open class Iterate {
4540
@Param("0.0", "50.0")
4641
var immutablePercentage: Double = 0.0
4742
48-
private var builder = ${impl.emptyOf("IntWrapper", "String")}
43+
private var builder = ${impl.empty()}
4944
5045
@Setup(Level.Trial)
5146
fun prepare() {

0 commit comments

Comments
 (0)