Skip to content

Commit 4f20e4d

Browse files
authored
Merge pull request #13794 from lorentey/reservecapacity
[benchmarks] Add String.reserveCapacity benchmark
2 parents 47b2357 + 3049437 commit 4f20e4d

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

benchmark/single-source/StringBuilder.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ public let StringBuilder = [
1717
BenchmarkInfo(name: "StringBuilder", runFunction: run_StringBuilder, tags: [.validation, .api, .String]),
1818
BenchmarkInfo(name: "StringBuilderLong", runFunction: run_StringBuilderLong, tags: [.validation, .api, .String]),
1919
BenchmarkInfo(name: "StringUTF16Builder", runFunction: run_StringUTF16Builder, tags: [.validation, .api, .String]),
20+
BenchmarkInfo(
21+
name: "StringWordBuilder",
22+
runFunction: run_StringWordBuilder,
23+
tags: [.validation, .api, .String]),
24+
BenchmarkInfo(
25+
name: "StringWordBuilderReservingCapacity",
26+
runFunction: run_StringWordBuilderReservingCapacity,
27+
tags: [.validation, .api, .String]),
2028
]
2129

2230
@inline(never)
@@ -82,3 +90,28 @@ public func run_StringBuilderLong(_ N: Int) {
8290
}
8391
}
8492

93+
@inline(never)
94+
func buildString(
95+
word: String,
96+
count: Int,
97+
reservingCapacity: Bool
98+
) -> String {
99+
var sb = ""
100+
if reservingCapacity {
101+
sb.reserveCapacity(count * word.unicodeScalars.count)
102+
}
103+
for _ in 0 ..< count {
104+
sb += word
105+
}
106+
return sb
107+
}
108+
109+
@inline(never)
110+
public func run_StringWordBuilder(_ N: Int) {
111+
_ = buildString(word: "bumfuzzle", count: 50_000 * N, reservingCapacity: false)
112+
}
113+
114+
@inline(never)
115+
public func run_StringWordBuilderReservingCapacity(_ N: Int) {
116+
_ = buildString(word: "bumfuzzle", count: 50_000 * N, reservingCapacity: true)
117+
}

0 commit comments

Comments
 (0)