@@ -5,17 +5,17 @@ import kotlinx.benchmark.*
5
5
@State(Scope .Benchmark )
6
6
class WhenBenchmark {
7
7
8
- private val integers = 100500 .. 100510
9
- private val shorts = ( 10500 .. 10510 ).map { it.toShort() }
10
- private val bytes = ( 100 .. 110 ).map { it.toByte() }
11
- private val chars = ' a ' .. ' k '
12
- private val strings = ( ' a ' .. ' k ' ).flatMap {a -> ( ' a ' .. ' k ' ).map { b -> " $a$b " } }
8
+ private lateinit var integers: List < Int >
9
+ private lateinit var shorts: List < Short >
10
+ private lateinit var bytes: List < Byte >
11
+ private lateinit var chars: List < Char >
12
+ private lateinit var strings: List < String >
13
13
14
- private val floatConst = 1.123 .toFloat()
15
- private val doubleConst = 1.123456789123456
14
+ private var floatConst: Float = 0F
15
+ private var doubleConst: Double = 0.0
16
16
17
- private val floats = ( 1 .. 10 ).map { it * floatConst }
18
- private val doubles = ( 1 .. 10 ).map { it * doubleConst }
17
+ private lateinit var floats: List < Float >
18
+ private lateinit var doubles: List < Double >
19
19
20
20
private val integersData = mutableListOf<Int >()
21
21
private val shortsData = mutableListOf<Short >()
@@ -27,26 +27,39 @@ class WhenBenchmark {
27
27
28
28
@Setup
29
29
fun setup () {
30
+
31
+ integers = (100500 .. 100510 ).toList()
32
+ shorts = (10500 .. 10510 ).map { it.toShort() }
33
+ bytes = (100 .. 110 ).map { it.toByte() }
34
+ chars = (' a' .. ' k' ).toList()
35
+ strings = (' a' .. ' k' ).flatMap { a -> (' a' .. ' k' ).map { b -> " $a$b " } }
36
+
37
+ floatConst = 1.123F
38
+ doubleConst = 1.123456789123456
39
+
40
+ floats = (1 .. 10 ).map { it * floatConst }
41
+ doubles = (1 .. 10 ).map { it * doubleConst }
42
+
30
43
for (i in 1 .. BENCHMARK_SIZE ) {
31
- charsData.add(chars.random() )
32
- shortsData.add(shorts.random() )
33
- bytesData.add(bytes.random() )
34
- integersData.add(integers.random() )
35
- stringsData.add(strings.random() )
36
- floatsData.add(floats.random() )
37
- doublesData.add(doubles.random() )
44
+ charsData.add(chars[i % chars.size] )
45
+ shortsData.add(shorts[i % shorts.size] )
46
+ bytesData.add(bytes[i % bytes.size] )
47
+ integersData.add(integers[i % integers.size] )
48
+ stringsData.add(strings[i % strings.size] )
49
+ floatsData.add(floats[i % floats.size] )
50
+ doublesData.add(doubles[i % doubles.size] )
38
51
}
39
52
}
40
53
41
54
@Benchmark
42
55
fun charWhenDense (): Int {
43
56
var sum = 0
44
57
for (char in charsData) {
45
- when (char) {
46
- ' a' -> sum + = 13
47
- ' c' -> sum + = 91
48
- ' e' -> sum + = 34
49
- else -> sum + = 29
58
+ sum + = when (char) {
59
+ ' a' -> 13
60
+ ' c' -> 91
61
+ ' e' -> 34
62
+ else -> 29
50
63
}
51
64
}
52
65
return sum
@@ -169,9 +182,9 @@ class WhenBenchmark {
169
182
var sum = 0
170
183
for (float in floatsData) {
171
184
sum + = when (float) {
172
- floatConst -> 13
173
- floatConst * 3 -> 91
174
- floatConst * 4 -> 34
185
+ 1.123F -> 13
186
+ 3.369F -> 91
187
+ 4.492F -> 34
175
188
else -> 29
176
189
}
177
190
}
@@ -183,9 +196,9 @@ class WhenBenchmark {
183
196
var sum = 0
184
197
for (double in doublesData) {
185
198
sum + = when (double) {
186
- doubleConst -> 13
187
- doubleConst * 3 -> 91
188
- doubleConst * 4 -> 34
199
+ 1.123 -> 13
200
+ 3.369 -> 91
201
+ 4.492 -> 34
189
202
else -> 29
190
203
}
191
204
}
0 commit comments