Skip to content

Commit 847047e

Browse files
committed
Add benchmarks exercizing bridged rangeOfString more thoroughly in preparation for adding a native version
1 parent 63124b5 commit 847047e

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

benchmark/single-source/ObjectiveCBridgingStubs.swift

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import ObjectiveCTests
1818

1919
let t: [BenchmarkCategory] = [.validation, .bridging]
2020
let ts: [BenchmarkCategory] = [.validation, .String, .bridging]
21+
let bs: [BenchmarkCategory] = [.String, .bridging]
2122

2223
public let ObjectiveCBridgingStubs = [
2324
BenchmarkInfo(name: "ObjectiveCBridgeStubDataAppend",
@@ -71,6 +72,21 @@ public let ObjectiveCBridgingStubs = [
7172
BenchmarkInfo(name: "ObjectiveCBridgeStringRangeOfString",
7273
runFunction: run_ObjectiveCBridgeStringRangeOfString, tags: ts,
7374
setUpFunction: setup_StringBridgeBenchmark),
75+
BenchmarkInfo(name: "ObjectiveCBridgeStringRangeOfStringAllSwift",
76+
runFunction: run_ObjectiveCBridgeStringRangeOfStringAllSwift, tags: bs,
77+
setUpFunction: setup_SpecificRangeOfStringBridging),
78+
BenchmarkInfo(name: "ObjectiveCBridgeStringRangeOfStringAllSwiftNonASCII",
79+
runFunction: run_ObjectiveCBridgeStringRangeOfStringAllSwiftNonASCII, tags: bs,
80+
setUpFunction: setup_SpecificRangeOfStringBridging),
81+
BenchmarkInfo(name: "ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystack",
82+
runFunction: run_ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystack, tags: bs,
83+
setUpFunction: setup_SpecificRangeOfStringBridging),
84+
BenchmarkInfo(name: "ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystackLongNeedle",
85+
runFunction: run_ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystackLongNeedle, tags: bs,
86+
setUpFunction: setup_SpecificRangeOfStringBridging),
87+
BenchmarkInfo(name: "ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystackNonASCII",
88+
runFunction: run_ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystackNonASCII, tags: bs,
89+
setUpFunction: setup_SpecificRangeOfStringBridging),
7490
BenchmarkInfo(name: "ObjectiveCBridgeStringHash",
7591
runFunction: run_ObjectiveCBridgeStringHash, tags: ts,
7692
setUpFunction: setup_StringBridgeBenchmark),
@@ -408,6 +424,47 @@ public func run_ObjectiveCBridgeStringRangeOfString(N: Int) {
408424
#endif
409425
}
410426

427+
@inline(__always)
428+
func run_rangeOfStringSpecific(needle: String, haystack: String, N: Int) {
429+
#if _runtime(_ObjC)
430+
b.testRangeOfStringSpecific(withNeedle: needle, haystack: haystack, n: N)
431+
#endif
432+
}
433+
434+
@inline(never)
435+
public func run_ObjectiveCBridgeStringRangeOfStringAllSwift(N: Int) {
436+
run_rangeOfStringSpecific(needle: "y", haystack: "The quick brown fox jumps over the lazy dog", N: N)
437+
}
438+
439+
var longNativeASCII: String! = nil
440+
var longNativeNonASCII: String! = nil
441+
public func setup_SpecificRangeOfStringBridging() {
442+
setup_StringBridgeBenchmark()
443+
longNativeASCII = Array(repeating: "The quick brown fox jump over the lazy dog", count: 1000).joined() + "s"
444+
longNativeNonASCII = "ü" + longNativeASCII + "ö"
445+
446+
}
447+
448+
@inline(never)
449+
public func run_ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystack(N: Int) {
450+
run_rangeOfStringSpecific(needle: "s", haystack: longNativeASCII, N: N)
451+
}
452+
453+
@inline(never)
454+
public func run_ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystackNonASCII(N: Int) {
455+
run_rangeOfStringSpecific(needle: "s", haystack: longNativeNonASCII, N: N)
456+
}
457+
458+
@inline(never)
459+
public func run_ObjectiveCBridgeStringRangeOfStringAllSwiftNonASCII(N: Int) {
460+
run_rangeOfStringSpecific(needle: "ü", haystack: "The quick brown fox jump over the lazy dogü", N: N)
461+
}
462+
463+
@inline(never)
464+
public func run_ObjectiveCBridgeStringRangeOfStringAllSwiftLongHaystackLongNeedle(N: Int) {
465+
run_rangeOfStringSpecific(needle: "The quick brown fox jump over the lazy dogs", haystack: longNativeASCII, N: N)
466+
}
467+
411468
@inline(never)
412469
public func run_ObjectiveCBridgeStringHash(N: Int) {
413470
#if _runtime(_ObjC)

benchmark/utils/ObjectiveCTests/ObjectiveCTests.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ NS_ASSUME_NONNULL_BEGIN
4242
- (void)testGetUTF8Contents;
4343
- (void)testGetASCIIContents;
4444
- (void)testRangeOfString;
45+
- (void)testRangeOfStringSpecificWithNeedle:(NSString *)needle
46+
haystack:(NSString *)haystack
47+
n:(NSInteger)n;
4548
- (void)testHash;
4649
- (void)testCompare;
4750
- (void)testCompare2;

benchmark/utils/ObjectiveCTests/ObjectiveCTests.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,14 @@ - (void)testRangeOfString {
307307
};
308308
}
309309

310+
- (void)testRangeOfStringSpecificWithNeedle:(NSString *)needle
311+
haystack:(NSString *)haystack
312+
n:(NSInteger)n {
313+
for (int i = 0; i < n; i++) {
314+
(void)[haystack rangeOfString:needle];
315+
}
316+
}
317+
310318
- (void) testHash {
311319
for (NSString *str1 in bridgedStrings) {
312320
@autoreleasepool {

0 commit comments

Comments
 (0)