Skip to content

Commit 4469ae9

Browse files
Lance Parkerairspeedswift
authored andcommitted
[stdlib]String normalization functions (#21026) (#21744)
* [stdlib]String normalization functions (#21026) * fast/foreignNormalize functions * fix bad cherry-pick
1 parent a7c1263 commit 4469ae9

14 files changed

+1162
-648
lines changed

benchmark/single-source/StringComparison.swift

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ extension String {
3030
}
3131

3232

33-
34-
3533
public let StringComparison: [BenchmarkInfo] = [
3634
BenchmarkInfo(
3735
name: "StringComparison_ascii",
@@ -140,52 +138,52 @@ public let StringHashing: [BenchmarkInfo] = [
140138
),
141139
]
142140

143-
public let NormalizedIterator: [BenchmarkInfo] = [
141+
public let StringNormalization: [BenchmarkInfo] = [
144142
BenchmarkInfo(
145143
name: "NormalizedIterator_ascii",
146-
runFunction: run_NormalizedIterator_ascii,
144+
runFunction: run_StringNormalization_ascii,
147145
tags: [.validation, .String],
148146
setUpFunction: { blackHole(Workload_ascii) }
149147
),
150148
BenchmarkInfo(
151149
name: "NormalizedIterator_latin1",
152-
runFunction: run_NormalizedIterator_latin1,
150+
runFunction: run_StringNormalization_latin1,
153151
tags: [.validation, .String],
154152
setUpFunction: { blackHole(Workload_latin1) }
155153
),
156154
BenchmarkInfo(
157155
name: "NormalizedIterator_fastPrenormal",
158-
runFunction: run_NormalizedIterator_fastPrenormal,
156+
runFunction: run_StringNormalization_fastPrenormal,
159157
tags: [.validation, .String],
160158
setUpFunction: { blackHole(Workload_fastPrenormal) }
161159
),
162160
BenchmarkInfo(
163161
name: "NormalizedIterator_slowerPrenormal",
164-
runFunction: run_NormalizedIterator_slowerPrenormal,
162+
runFunction: run_StringNormalization_slowerPrenormal,
165163
tags: [.validation, .String],
166164
setUpFunction: { blackHole(Workload_slowerPrenormal) }
167165
),
168166
BenchmarkInfo(
169167
name: "NormalizedIterator_nonBMPSlowestPrenormal",
170-
runFunction: run_NormalizedIterator_nonBMPSlowestPrenormal,
168+
runFunction: run_StringNormalization_nonBMPSlowestPrenormal,
171169
tags: [.validation, .String],
172170
setUpFunction: { blackHole(Workload_nonBMPSlowestPrenormal) }
173171
),
174172
BenchmarkInfo(
175173
name: "NormalizedIterator_emoji",
176-
runFunction: run_NormalizedIterator_emoji,
174+
runFunction: run_StringNormalization_emoji,
177175
tags: [.validation, .String],
178176
setUpFunction: { blackHole(Workload_emoji) }
179177
),
180178
BenchmarkInfo(
181179
name: "NormalizedIterator_abnormal",
182-
runFunction: run_NormalizedIterator_abnormal,
180+
runFunction: run_StringNormalization_abnormal,
183181
tags: [.validation, .String],
184182
setUpFunction: { blackHole(Workload_abnormal) }
185183
),
186184
BenchmarkInfo(
187185
name: "NormalizedIterator_zalgo",
188-
runFunction: run_NormalizedIterator_zalgo,
186+
runFunction: run_StringNormalization_zalgo,
189187
tags: [.validation, .String],
190188
setUpFunction: { blackHole(Workload_zalgo) }
191189
),
@@ -435,7 +433,7 @@ public func run_StringHashing_zalgo(_ N: Int) {
435433

436434

437435
@inline(never)
438-
public func run_NormalizedIterator_ascii(_ N: Int) {
436+
public func run_StringNormalization_ascii(_ N: Int) {
439437
let workload: Workload = Workload.ascii
440438
let tripCount = workload.tripCount
441439
let payload = workload.payload
@@ -449,7 +447,7 @@ public func run_NormalizedIterator_ascii(_ N: Int) {
449447
}
450448

451449
@inline(never)
452-
public func run_NormalizedIterator_latin1(_ N: Int) {
450+
public func run_StringNormalization_latin1(_ N: Int) {
453451
let workload: Workload = Workload.latin1
454452
let tripCount = workload.tripCount
455453
let payload = workload.payload
@@ -463,7 +461,7 @@ public func run_NormalizedIterator_latin1(_ N: Int) {
463461
}
464462

465463
@inline(never)
466-
public func run_NormalizedIterator_fastPrenormal(_ N: Int) {
464+
public func run_StringNormalization_fastPrenormal(_ N: Int) {
467465
let workload: Workload = Workload.fastPrenormal
468466
let tripCount = workload.tripCount
469467
let payload = workload.payload
@@ -477,7 +475,7 @@ public func run_NormalizedIterator_fastPrenormal(_ N: Int) {
477475
}
478476

479477
@inline(never)
480-
public func run_NormalizedIterator_slowerPrenormal(_ N: Int) {
478+
public func run_StringNormalization_slowerPrenormal(_ N: Int) {
481479
let workload: Workload = Workload.slowerPrenormal
482480
let tripCount = workload.tripCount
483481
let payload = workload.payload
@@ -491,7 +489,7 @@ public func run_NormalizedIterator_slowerPrenormal(_ N: Int) {
491489
}
492490

493491
@inline(never)
494-
public func run_NormalizedIterator_nonBMPSlowestPrenormal(_ N: Int) {
492+
public func run_StringNormalization_nonBMPSlowestPrenormal(_ N: Int) {
495493
let workload: Workload = Workload.nonBMPSlowestPrenormal
496494
let tripCount = workload.tripCount
497495
let payload = workload.payload
@@ -505,7 +503,7 @@ public func run_NormalizedIterator_nonBMPSlowestPrenormal(_ N: Int) {
505503
}
506504

507505
@inline(never)
508-
public func run_NormalizedIterator_emoji(_ N: Int) {
506+
public func run_StringNormalization_emoji(_ N: Int) {
509507
let workload: Workload = Workload.emoji
510508
let tripCount = workload.tripCount
511509
let payload = workload.payload
@@ -519,7 +517,7 @@ public func run_NormalizedIterator_emoji(_ N: Int) {
519517
}
520518

521519
@inline(never)
522-
public func run_NormalizedIterator_abnormal(_ N: Int) {
520+
public func run_StringNormalization_abnormal(_ N: Int) {
523521
let workload: Workload = Workload.abnormal
524522
let tripCount = workload.tripCount
525523
let payload = workload.payload
@@ -533,7 +531,7 @@ public func run_NormalizedIterator_abnormal(_ N: Int) {
533531
}
534532

535533
@inline(never)
536-
public func run_NormalizedIterator_zalgo(_ N: Int) {
534+
public func run_StringNormalization_zalgo(_ N: Int) {
537535
let workload: Workload = Workload.zalgo
538536
let tripCount = workload.tripCount
539537
let payload = workload.payload
@@ -547,6 +545,7 @@ public func run_NormalizedIterator_zalgo(_ N: Int) {
547545
}
548546

549547

548+
550549
struct Workload {
551550
static let N = 100
552551

benchmark/single-source/StringComparison.swift.gyb

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ extension String {
3030
}
3131
}
3232

33-
% AllWorkloads = ["ascii", "latin1", "fastPrenormal", "slowerPrenormal", "nonBMPSlowestPrenormal", "emoji", "abnormal", "zalgo", "longSharedPrefix"]
34-
% ComparisonWorkloads = AllWorkloads
35-
% HashingWorkloads = ["ascii", "latin1", "fastPrenormal", "slowerPrenormal", "nonBMPSlowestPrenormal", "emoji", "abnormal", "zalgo"]
36-
37-
38-
% NormalizedIteratorWorkloads = ["ascii", "latin1", "fastPrenormal", "slowerPrenormal", "nonBMPSlowestPrenormal", "emoji", "abnormal", "zalgo"]
33+
%{
34+
AllWorkloads = ["ascii", "latin1", "fastPrenormal", "slowerPrenormal",
35+
"nonBMPSlowestPrenormal", "emoji", "abnormal", "zalgo",
36+
"longSharedPrefix"]
37+
ComparisonWorkloads = AllWorkloads
38+
HashingWorkloads = AllWorkloads[:-1]
39+
NormalizationWorkloads = AllWorkloads[:-1]
40+
}%
3941

4042
public let StringComparison: [BenchmarkInfo] = [
4143
% for Name in ComparisonWorkloads:
@@ -59,15 +61,15 @@ public let StringHashing: [BenchmarkInfo] = [
5961
% end # HashingWorkloads
6062
]
6163

62-
public let NormalizedIterator: [BenchmarkInfo] = [
63-
% for Name in NormalizedIteratorWorkloads:
64+
public let StringNormalization: [BenchmarkInfo] = [
65+
% for Name in NormalizationWorkloads:
6466
BenchmarkInfo(
6567
name: "NormalizedIterator_${Name}",
66-
runFunction: run_NormalizedIterator_${Name},
68+
runFunction: run_StringNormalization_${Name},
6769
tags: [.validation, .String],
6870
setUpFunction: { blackHole(Workload_${Name}) }
6971
),
70-
% end # NormalizedIteratorWorkloads
72+
% end # NormalizationWorkloads
7173
]
7274

7375
% for Name in AllWorkloads:
@@ -107,9 +109,9 @@ public func run_StringHashing_${Name}(_ N: Int) {
107109

108110
% end # HashingWorkloads
109111

110-
%for Name in NormalizedIteratorWorkloads:
112+
%for Name in NormalizationWorkloads:
111113
@inline(never)
112-
public func run_NormalizedIterator_${Name}(_ N: Int) {
114+
public func run_StringNormalization_${Name}(_ N: Int) {
113115
let workload: Workload = Workload.${Name}
114116
let tripCount = workload.tripCount
115117
let payload = workload.payload
@@ -122,7 +124,8 @@ public func run_NormalizedIterator_${Name}(_ N: Int) {
122124
}
123125
}
124126

125-
% end # NormalizedIteratorWorkloads
127+
% end # NormalizationWorkloads
128+
126129

127130
struct Workload {
128131
static let N = 100

benchmark/utils/main.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,6 @@ registerBenchmark(NSErrorTest)
266266
registerBenchmark(NSStringConversion)
267267
registerBenchmark(NibbleSort)
268268
registerBenchmark(NopDeinit)
269-
registerBenchmark(NormalizedIterator)
270269
registerBenchmark(ObjectAllocation)
271270
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS)
272271
registerBenchmark(ObjectiveCBridging)
@@ -328,6 +327,7 @@ registerBenchmark(StringInterpolation)
328327
registerBenchmark(StringInterpolationSmall)
329328
registerBenchmark(StringInterpolationManySmallSegments)
330329
registerBenchmark(StringMatch)
330+
registerBenchmark(StringNormalization)
331331
registerBenchmark(StringRemoveDupes)
332332
registerBenchmark(StringTests)
333333
registerBenchmark(StringWalk)

stdlib/public/core/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ set(SWIFTLIB_ESSENTIAL
101101
NativeDictionary.swift
102102
NativeSet.swift
103103
NewtypeWrapper.swift
104-
NormalizedCodeUnitIterator.swift
105104
ObjectIdentifier.swift
106105
Optional.swift
107106
OptionSet.swift

0 commit comments

Comments
 (0)