Skip to content

Commit 9855496

Browse files
authored
Add benchmarks for Substring.dropFirst(_:) and dropLast(_:) (#32473)
* Add benchmarks for Substring.dropFirst(_:) and dropLast(_:) These are self-slicing operations, so they should be fast even for this non-random-access collection. * Fiddle with the iteration count and length
1 parent 46c2073 commit 9855496

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

benchmark/single-source/Substring.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public let SubstringTest = [
1717
BenchmarkInfo(name: "EqualSubstringString", runFunction: run_EqualSubstringString, tags: [.validation, .api, .String]),
1818
BenchmarkInfo(name: "EqualSubstringSubstring", runFunction: run_EqualSubstringSubstring, tags: [.validation, .api, .String]),
1919
BenchmarkInfo(name: "EqualSubstringSubstringGenericEquatable", runFunction: run_EqualSubstringSubstringGenericEquatable, tags: [.validation, .api, .String]),
20+
BenchmarkInfo(name: "SubstringDropFirst1", runFunction: run_SubstringDropFirst1, tags: [.validation, .api, .String]),
21+
BenchmarkInfo(name: "SubstringDropLast1", runFunction: run_SubstringDropLast1, tags: [.validation, .api, .String]),
2022
BenchmarkInfo(name: "LessSubstringSubstring", runFunction: run_LessSubstringSubstring, tags: [.validation, .api, .String]),
2123
BenchmarkInfo(name: "LessSubstringSubstringGenericComparable", runFunction: run_LessSubstringSubstringGenericComparable, tags: [.validation, .api, .String]),
2224
BenchmarkInfo(name: "StringFromLongWholeSubstring", runFunction: run_StringFromLongWholeSubstring, tags: [.validation, .api, .String]),
@@ -34,6 +36,8 @@ let longWide = "fὢasὢodὢijὢadὢolὢsjὢalὢsdὢjlὢasὢdfὢijὢ
3436
let (s1, ss1) = equivalentWithDistinctBuffers()
3537
let (s2, ss2) = equivalentWithDistinctBuffers()
3638

39+
let quiteLong = String(repeating: "0", count: 15_000)[...]
40+
3741
@inline(never)
3842
public func run_SubstringFromLongString(_ N: Int) {
3943
var s = longWide
@@ -126,6 +130,22 @@ public func run_EqualSubstringSubstringGenericEquatable(_ N: Int) {
126130
}
127131
}
128132

133+
@inline(never)
134+
public func run_SubstringDropFirst1(_ N: Int) {
135+
let s = quiteLong
136+
for _ in 1...N*1000 {
137+
blackHole(!s.dropFirst(1).isEmpty)
138+
}
139+
}
140+
141+
@inline(never)
142+
public func run_SubstringDropLast1(_ N: Int) {
143+
let s = quiteLong
144+
for _ in 1...N*1000 {
145+
blackHole(!s.dropLast(1).isEmpty)
146+
}
147+
}
148+
129149
/*
130150
func checkEqual<T, U>(_ x: T, _ y: U)
131151
where T : StringProtocol, U : StringProtocol {

0 commit comments

Comments
 (0)