From 51bec3ca67245cfaf3a7ad25ebdc67b60726d00a Mon Sep 17 00:00:00 2001 From: Aleksandr Shefer Date: Thu, 18 Dec 2025 12:27:44 +0100 Subject: [PATCH] add benchmarks for String methods implemented in K/js with js builtins --- .../kotlin/microBenchmarks/StringBenchmark.kt | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/commonMain/kotlin/microBenchmarks/StringBenchmark.kt b/src/commonMain/kotlin/microBenchmarks/StringBenchmark.kt index 4bee5e2..f243d1f 100644 --- a/src/commonMain/kotlin/microBenchmarks/StringBenchmark.kt +++ b/src/commonMain/kotlin/microBenchmarks/StringBenchmark.kt @@ -24,6 +24,9 @@ import kotlin.math.sqrt class StringBenchmark { private var csv: String = "" private val subSequenceRanges = mutableListOf>() + private val subSequenceRangesToRemove = mutableListOf>() + private val subSequenceStrings = mutableListOf() + private val stringToRepeat = mutableListOf() private lateinit var stringsInterpolation: Array @Setup @@ -39,6 +42,9 @@ class StringBenchmark { csv += 0.0 for (i in 1..sqrt(BENCHMARK_SIZE.toDouble()).roundToInt()) { + stringToRepeat.add(csv.substring(0, i)) + subSequenceStrings.add(csv.substring(i - 1, 2 * i - 1)) + subSequenceRangesToRemove.add(Pair(i - 1, 2 * i - 1)) for (j in 0..csv.length - i) { subSequenceRanges.add(Pair(j, j + i)) } @@ -143,4 +149,46 @@ class StringBenchmark { } return sum } + + @Benchmark + fun stringIndexOf(): Int { + var sum = 0 + for (subString in subSequenceStrings) { + val idx = csv.indexOf(subString) + sum += idx + } + return sum + } + + @Benchmark + fun stringRemoveRange(): Int { + var sum = 0 + for (range in subSequenceRangesToRemove) { + val subString = csv.removeRange(range.first, range.second) + sum += subString[0].code + } + return sum + } + + @Benchmark + fun stringRepeat(): Int { + var sum = 0 + for (stringToRepeat in stringToRepeat) { + val num = BENCHMARK_SIZE / stringToRepeat.length + val repeated = stringToRepeat.repeat(num) + sum += repeated[0].code + } + return sum + } + + @Benchmark + fun stringReplace(): Int { + var sum = 0 + for ((i, subString) in subSequenceStrings.withIndex()) { + val newSubString = subSequenceStrings[(i + 1) % subString.length] + val newString = csv.replace(subString, newSubString) + sum += newString[0].code + } + return sum + } } \ No newline at end of file