Skip to content

Commit c4d7579

Browse files
author
Abduqodiri Qurbonzoda
committed
Refactor map benchmark generators
1 parent 28e71df commit c4d7579

23 files changed

+338
-301
lines changed

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

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -116,21 +116,21 @@ private val listBuilderImpls = listOf(
116116
)
117117

118118
private val mapImpls = listOf(
119-
MapKotlinBenchmark(),
120-
MapKotlinOrderedBenchmark(),
121-
MapCapsuleBenchmark(),
122-
MapPaguroBenchmark(),
123-
MapPaguroSortedBenchmark(),
124-
MapCyclopsBenchmark(),
125-
MapCyclopsOrderedBenchmark(),
126-
MapCyclopsTrieBenchmark(),
127-
MapClojureBenchmark(),
128-
MapClojureSortedBenchmark(),
129-
MapScalaBenchmark(),
130-
MapScalaSortedBenchmark(),
131-
MapVavrBenchmark(),
132-
MapVavrSortedBenchmark(),
133-
MapVavrOrderedBenchmark()
119+
KotlinMapImplementation,
120+
KotlinOrderedMapImplementation,
121+
CapsuleMapImplementation,
122+
PaguroMapImplementation,
123+
PaguroSortedMapImplementation,
124+
CyclopsMapImplementation,
125+
CyclopsOrderedMapImplementation,
126+
CyclopsTrieMapImplementation,
127+
ClojureMapImplementation,
128+
ClojureSortedMapImplementation,
129+
ScalaMapImplementation,
130+
ScalaSortedMapImplementation,
131+
VavrMapImplementation,
132+
VavrSortedMapImplementation,
133+
VavrOrderedMapImplementation
134134
)
135135
private val mapBuilderImpls = listOf(
136136
MapBuilderKotlinBenchmark(),
@@ -195,12 +195,19 @@ fun generateBenchmarks() {
195195
listBuilderImpls.filterIsInstance<ListBuilderSetBenchmark>().map { ListBuilderSetBenchmarkGenerator(it) }
196196
)*/
197197

198-
val mapBenchmarks = listOf(
198+
val mapBenchmarks = mapImpls.map { listOf(
199+
MapGetBenchmarkGenerator(it),
200+
MapIterateBenchmarkGenerator(it),
201+
MapPutBenchmarkGenerator(it),
202+
MapRemoveBenchmarkGenerator(it),
203+
MapUtilsGenerator(it)
204+
) }
205+
/*listOf(
199206
mapImpls.filterIsInstance<MapGetBenchmark>().map { MapGetBenchmarkGenerator(it) },
200207
mapImpls.filterIsInstance<MapIterateBenchmark>().map { MapIterateBenchmarkGenerator(it) },
201208
mapImpls.filterIsInstance<MapPutBenchmark>().map { MapPutBenchmarkGenerator(it) },
202209
mapImpls.filterIsInstance<MapRemoveBenchmark>().map { MapRemoveBenchmarkGenerator(it) }
203-
)
210+
)*/
204211
val mapBuilderBenchmarks = listOf(
205212
mapBuilderImpls.filterIsInstance<MapBuilderGetBenchmark>().map { MapBuilderGetBenchmarkGenerator(it) },
206213
mapBuilderImpls.filterIsInstance<MapBuilderIterateBenchmark>().map { MapBuilderIterateBenchmarkGenerator(it) },
@@ -235,7 +242,6 @@ fun generateBenchmarks() {
235242
}
236243

237244
fun generateUtils() {
238-
val mapUtils = mapImpls.filterIsInstance<MapBenchmarkUtils>().map { MapUtilsGenerator(it) }
239245
val mapBuilderUtils = mapBuilderImpls.filterIsInstance<MapBuilderBenchmarkUtils>().map { MapBuilderUtilsGenerator(it) }
240246

241247
val setUtils = setImpls.filterIsInstance<SetBenchmarkUtils>().map { SetUtilsGenerator(it) }
@@ -246,7 +252,7 @@ fun generateUtils() {
246252
CommonUtilsGenerator()
247253
)
248254

249-
val utils = mapUtils + mapBuilderUtils + setUtils + setBuilderUtils + commonUtils
255+
val utils = mapBuilderUtils + setUtils + setBuilderUtils + commonUtils
250256

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

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

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

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

3125
override fun getPackage(): String {
@@ -43,8 +37,8 @@ open class Get {
4337
@Param(ASCENDING_HASH_CODE, RANDOM_HASH_CODE, COLLISION_HASH_CODE, NON_EXISTING_HASH_CODE)
4438
var hashCodeType = ""
4539
46-
private var keys = listOf<IntWrapper>()
47-
private var persistentMap = ${impl.emptyOf("IntWrapper", "String")}
40+
private var keys = listOf<$mapKeyType>()
41+
private var persistentMap = ${impl.empty()}
4842
4943
@Setup(Level.Trial)
5044
fun prepare() {
@@ -59,7 +53,7 @@ open class Get {
5953
@Benchmark
6054
fun get(bh: Blackhole) {
6155
repeat(times = size) { index ->
62-
bh.consume(persistentMap.${impl.getOperation}(keys[index]))
56+
bh.consume(${impl.getOperation("persistentMap", "keys[index]")})
6357
}
6458
}
6559
}

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapCapsuleBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "capsule"
21+
object CapsuleMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "capsule"
2924

30-
override fun mapType(K: String, V: String): String = "io.usethesource.capsule.Map.Immutable<$K, $V>"
31-
override fun emptyOf(K: String, V: String): String = "io.usethesource.capsule.core.PersistentTrieMap.of<$K, $V>()"
25+
override fun type(): String
26+
= "io.usethesource.capsule.Map.Immutable<$mapKeyType, $mapValueType>"
27+
override fun empty(): String
28+
= "io.usethesource.capsule.core.PersistentTrieMap.of<$mapKeyType, $mapValueType>()"
3229

33-
override val getOperation: String = "get"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.__put($key, $value)"
35-
override fun removeOperation(map: String, key: String): String = "$map.__remove($key)"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values"
3634

37-
override val keys: String = "keys"
38-
override val values: String = "values"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.get($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.__put($key, $value)"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.__remove($key)"
3941
}

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapClojureBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "clojure"
21+
object ClojureMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "clojure"
2924

30-
override fun mapType(K: String, V: String): String = "clojure.lang.PersistentHashMap"
31-
override fun emptyOf(K: String, V: String): String = "clojure.lang.PersistentHashMap.EMPTY"
25+
override fun type(): String
26+
= "clojure.lang.PersistentHashMap"
27+
override fun empty(): String
28+
= "clojure.lang.PersistentHashMap.EMPTY"
3229

33-
override val getOperation: String = "valAt"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.assoc($key, $value) as clojure.lang.PersistentHashMap"
35-
override fun removeOperation(map: String, key: String): String = "$map.without($key) as clojure.lang.PersistentHashMap"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values"
3634

37-
override val keys: String = "keys"
38-
override val values: String = "values"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.valAt($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.assoc($key, $value) as clojure.lang.PersistentHashMap"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.without($key) as clojure.lang.PersistentHashMap"
3941
}

benchmarks-libraries/src/main/kotlin/generators/immutableMap/impl/clojureSorted.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapClojureSortedBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "clojureSorted"
21+
object ClojureSortedMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "clojureSorted"
2924

30-
override fun mapType(K: String, V: String): String = "clojure.lang.PersistentTreeMap"
31-
override fun emptyOf(K: String, V: String): String = "clojure.lang.PersistentTreeMap.EMPTY"
25+
override fun type(): String
26+
= "clojure.lang.PersistentTreeMap"
27+
override fun empty(): String
28+
= "clojure.lang.PersistentTreeMap.EMPTY"
3229

33-
override val getOperation: String = "valAt"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.assoc($key, $value)"
35-
override fun removeOperation(map: String, key: String): String = "$map.without($key)"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values"
3634

37-
override val keys: String = "keys"
38-
override val values: String = "values"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.valAt($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.assoc($key, $value)"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.without($key)"
3941
}

benchmarks-libraries/src/main/kotlin/generators/immutableMap/impl/cyclops.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapCyclopsBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "cyclops"
21+
object CyclopsMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "cyclops"
2924

30-
override fun mapType(K: String, V: String): String = "cyclops.data.HashMap<$K, $V>"
31-
override fun emptyOf(K: String, V: String): String = "cyclops.data.HashMap.empty<$K, $V>()"
25+
override fun type(): String
26+
= "cyclops.data.HashMap<$mapKeyType, $mapValueType>"
27+
override fun empty(): String
28+
= "cyclops.data.HashMap.empty<$mapKeyType, $mapValueType>()"
3229

33-
override val getOperation: String = "get"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.put($key, $value)"
35-
override fun removeOperation(map: String, key: String): String = "$map.remove($key)"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys()"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values()"
3634

37-
override val keys: String = "keys()"
38-
override val values: String = "values()"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.get($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.put($key, $value)"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.remove($key)"
3941
}

benchmarks-libraries/src/main/kotlin/generators/immutableMap/impl/cyclopsOrdered.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapCyclopsOrderedBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "cyclopsOrdered"
21+
object CyclopsOrderedMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "cyclopsOrdered"
2924

30-
override fun mapType(K: String, V: String): String = "cyclops.data.LinkedMap<$K, $V>"
31-
override fun emptyOf(K: String, V: String): String = "cyclops.data.LinkedMap.empty<$K, $V>()"
25+
override fun type(): String
26+
= "cyclops.data.LinkedMap<$mapKeyType, $mapValueType>"
27+
override fun empty(): String
28+
= "cyclops.data.LinkedMap.empty<$mapKeyType, $mapValueType>()"
3229

33-
override val getOperation: String = "get"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.put($key, $value)"
35-
override fun removeOperation(map: String, key: String): String = "$map.remove($key)"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys()"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values()"
3634

37-
override val keys: String = "keys()"
38-
override val values: String = "values()"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.get($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.put($key, $value)"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.remove($key)"
3941
}

benchmarks-libraries/src/main/kotlin/generators/immutableMap/impl/cyclopsTrie.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapCyclopsTrieBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "cyclopsTrie"
21+
object CyclopsTrieMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "cyclopsTrie"
2924

30-
override fun mapType(K: String, V: String): String = "cyclops.data.TrieMap<$K, $V>"
31-
override fun emptyOf(K: String, V: String): String = "cyclops.data.TrieMap.empty<$K, $V>()"
25+
override fun type(): String
26+
= "cyclops.data.TrieMap<$mapKeyType, $mapValueType>"
27+
override fun empty(): String
28+
= "cyclops.data.TrieMap.empty<$mapKeyType, $mapValueType>()"
3229

33-
override val getOperation: String = "get"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.put($key, $value)"
35-
override fun removeOperation(map: String, key: String): String = "$map.remove($key)"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys()"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values()"
3634

37-
override val keys: String = "keys()"
38-
override val values: String = "values()"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.get($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.put($key, $value)"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.remove($key)"
3941
}

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

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,24 @@ package generators.immutableMap.impl
1818

1919
import generators.immutableMap.*
2020

21-
class MapKotlinBenchmark:
22-
MapGetBenchmark,
23-
MapIterateBenchmark,
24-
MapPutBenchmark,
25-
MapRemoveBenchmark,
26-
MapBenchmarkUtils
27-
{
28-
override val packageName: String = "kotlin"
21+
object KotlinMapImplementation: MapImplementation {
22+
override val packageName: String
23+
= "kotlin"
2924

30-
override fun mapType(K: String, V: String): String = "kotlinx.collections.immutable.PersistentMap<$K, $V>"
31-
override fun emptyOf(K: String, V: String): String = "kotlinx.collections.immutable.persistentHashMapOf<$K, $V>()"
25+
override fun type(): String
26+
= "kotlinx.collections.immutable.PersistentMap<$mapKeyType, $mapValueType>"
27+
override fun empty(): String
28+
= "kotlinx.collections.immutable.persistentHashMapOf<$mapKeyType, $mapValueType>()"
3229

33-
override val getOperation: String = "get"
34-
override fun putOperation(map: String, key: String, value: String): String = "$map.put($key, $value)"
35-
override fun removeOperation(map: String, key: String): String = "$map.remove($key)"
30+
override fun keysOperation(map: String): String
31+
= "$map.keys"
32+
override fun valuesOperation(map: String): String
33+
= "$map.values"
3634

37-
override val keys: String = "keys"
38-
override val values: String = "values"
35+
override fun getOperation(map: String, key: String): String
36+
= "$map.get($key)"
37+
override fun putOperation(map: String, key: String, value: String): String
38+
= "$map.put($key, $value)"
39+
override fun removeOperation(map: String, key: String): String
40+
= "$map.remove($key)"
3941
}

0 commit comments

Comments
 (0)