1
- //===--- StringWalk.swift ------------------------------------------------ -===//
1
+ //===--- StringWalk.swift -------------------------------------*- swift -* -===//
2
2
//
3
3
// This source file is part of the Swift.org open source project
4
4
//
10
10
//
11
11
//===----------------------------------------------------------------------===//
12
12
13
+ ////////////////////////////////////////////////////////////////////////////////
14
+ // WARNING: This file is manually generated from .gyb template and should not
15
+ // be directly modified. Instead, make changes to DropWhile.swift.gyb and run
16
+ // scripts/generate_harness/generate_harness.py to regenerate this file.
17
+ ////////////////////////////////////////////////////////////////////////////////
18
+
19
+
13
20
// Test String subscript performance.
14
21
//
15
22
// Subscript has a slow path that initializes a global variable:
@@ -26,25 +33,25 @@ var count: Int = 0
26
33
// Helper functionality
27
34
//
28
35
29
- @inline ( never) func countScalars ( _ s: String . UnicodeScalarView ) {
36
+ @inline ( never) func count_unicodeScalars ( _ s: String . UnicodeScalarView ) {
30
37
for _ in s {
31
38
count += 1
32
39
}
33
40
}
34
- @inline ( never) func countCharacters ( _ s: String . CharacterView ) {
41
+ @inline ( never) func count_characters ( _ s: String . CharacterView ) {
35
42
for _ in s {
36
43
count += 1
37
44
}
38
45
}
39
- @inline ( never) func countScalars_rev (
40
- _ s: ReversedCollection < String . UnicodeScalarView >
46
+ @inline ( never) func count_unicodeScalars_rev (
47
+ _ s: ReversedCollection < String . UnicodeScalarView >
41
48
) {
42
49
for _ in s {
43
50
count += 1
44
51
}
45
52
}
46
- @inline ( never) func countCharacters_rev (
47
- _ s: ReversedCollection < String . CharacterView >
53
+ @inline ( never) func count_characters_rev (
54
+ _ s: ReversedCollection < String . CharacterView >
48
55
) {
49
56
for _ in s {
50
57
count += 1
@@ -54,15 +61,18 @@ var count: Int = 0
54
61
//
55
62
// Workloads
56
63
//
57
- let asciiString =
64
+ let ascii =
58
65
" siebenhundertsiebenundsiebzigtausendsiebenhundertsiebenundsiebzig "
59
- let winter = " 🏂☃❅❆❄︎⛄️❄️ "
60
- let utf16String =
61
- winter + " the quick brown fox " + String( winter. characters. reversed ( ) )
66
+ let emoji = " 👍👩👩👧👧👨👨👦👦🇺🇸🇨🇦🇲🇽👍🏻👍🏼👍🏽👍🏾👍🏿 "
67
+ let utf16 = emoji + " the quick brown fox " + String( emoji. reversed ( ) as Array < Character > )
68
+
69
+ let japanese = " 今回のアップデートでSwiftに大幅な改良が施され、安定していてしかも直感的に使うことができるAppleプラットフォーム向けプログラミング言語になりました。 "
70
+ let chinese = " Swift 是面向 Apple 平台的编程语言,功能强大且直观易用,而本次更新对其进行了全面优化。 "
71
+ let korean = " 이번 업데이트에서는 강력하면서도 직관적인 Apple 플랫폼용 프로그래밍 언어인 Swift를 완벽히 개선하였습니다. "
62
72
63
73
// A workload that's mostly Latin characters, with occasional emoji
64
74
// interspersed. Common for tweets.
65
- let tweetString = " Worst thing about working on String is that it breaks *everything*. Asserts, debuggers, and *especially* printf-style debugging 😭 "
75
+ let tweet = " Worst thing about working on String is that it breaks *everything*. Asserts, debuggers, and *especially* printf-style debugging 😭 "
66
76
67
77
//
68
78
// Benchmarks
@@ -71,94 +81,191 @@ let tweetString = "Worst thing about working on String is that it breaks *everyt
71
81
// Pre-commit benchmark: simple scalar walk
72
82
@inline ( never)
73
83
public func run_StringWalk( _ N: Int ) {
74
- return run_StringWalkASCIIScalars ( N)
84
+ return run_StringWalk_ascii_unicodeScalars ( N)
75
85
}
76
86
77
87
// Extended String benchmarks:
78
- let baseMultiplier = 50_000
79
- let scalarsMultiplier = baseMultiplier
88
+ let baseMultiplier = 10_000
89
+ let unicodeScalarsMultiplier = baseMultiplier
80
90
let charactersMultiplier = baseMultiplier / 5
81
91
92
+
93
+ @inline ( never)
94
+ public func run_StringWalk_ascii_unicodeScalars( _ N: Int ) {
95
+ for _ in 1 ... unicodeScalarsMultiplier*N {
96
+ count_unicodeScalars ( ascii. unicodeScalars)
97
+ }
98
+ }
99
+
100
+ @inline ( never)
101
+ public func run_StringWalk_ascii_unicodeScalars_Backwards( _ N: Int ) {
102
+ for _ in 1 ... unicodeScalarsMultiplier*N {
103
+ count_unicodeScalars_rev ( ascii. unicodeScalars. reversed ( ) )
104
+ }
105
+ }
106
+
107
+
82
108
@inline ( never)
83
- public func run_StringWalkASCIIScalars ( _ N: Int ) {
84
- for _ in 1 ... scalarsMultiplier *N {
85
- countScalars ( asciiString . unicodeScalars )
109
+ public func run_StringWalk_ascii_characters ( _ N: Int ) {
110
+ for _ in 1 ... charactersMultiplier *N {
111
+ count_characters ( ascii . characters )
86
112
}
87
113
}
88
114
89
115
@inline ( never)
90
- public func run_StringWalkASCIICharacters ( _ N: Int ) {
116
+ public func run_StringWalk_ascii_characters_Backwards ( _ N: Int ) {
91
117
for _ in 1 ... charactersMultiplier*N {
92
- countCharacters ( asciiString . characters)
118
+ count_characters_rev ( ascii . characters. reversed ( ) )
93
119
}
94
120
}
95
121
122
+
96
123
@inline ( never)
97
- public func run_StringWalkUnicodeScalars ( _ N: Int ) {
98
- for _ in 1 ... scalarsMultiplier *N {
99
- countScalars ( utf16String . unicodeScalars)
124
+ public func run_StringWalk_utf16_unicodeScalars ( _ N: Int ) {
125
+ for _ in 1 ... unicodeScalarsMultiplier *N {
126
+ count_unicodeScalars ( utf16 . unicodeScalars)
100
127
}
101
128
}
102
129
103
130
@inline ( never)
104
- public func run_StringWalkUnicodeCharacters( _ N: Int ) {
131
+ public func run_StringWalk_utf16_unicodeScalars_Backwards( _ N: Int ) {
132
+ for _ in 1 ... unicodeScalarsMultiplier*N {
133
+ count_unicodeScalars_rev ( utf16. unicodeScalars. reversed ( ) )
134
+ }
135
+ }
136
+
137
+
138
+ @inline ( never)
139
+ public func run_StringWalk_utf16_characters( _ N: Int ) {
105
140
for _ in 1 ... charactersMultiplier*N {
106
- countCharacters ( utf16String . characters)
141
+ count_characters ( utf16 . characters)
107
142
}
108
143
}
109
144
110
145
@inline ( never)
111
- public func run_StringWalkMixedScalars( _ N: Int ) {
112
- for _ in 1 ... scalarsMultiplier*N {
113
- countScalars ( tweetString. unicodeScalars)
146
+ public func run_StringWalk_utf16_characters_Backwards( _ N: Int ) {
147
+ for _ in 1 ... charactersMultiplier*N {
148
+ count_characters_rev ( utf16. characters. reversed ( ) )
149
+ }
150
+ }
151
+
152
+
153
+ @inline ( never)
154
+ public func run_StringWalk_tweet_unicodeScalars( _ N: Int ) {
155
+ for _ in 1 ... unicodeScalarsMultiplier*N {
156
+ count_unicodeScalars ( tweet. unicodeScalars)
157
+ }
158
+ }
159
+
160
+ @inline ( never)
161
+ public func run_StringWalk_tweet_unicodeScalars_Backwards( _ N: Int ) {
162
+ for _ in 1 ... unicodeScalarsMultiplier*N {
163
+ count_unicodeScalars_rev ( tweet. unicodeScalars. reversed ( ) )
164
+ }
165
+ }
166
+
167
+
168
+ @inline ( never)
169
+ public func run_StringWalk_tweet_characters( _ N: Int ) {
170
+ for _ in 1 ... charactersMultiplier*N {
171
+ count_characters ( tweet. characters)
114
172
}
115
173
}
116
174
117
175
@inline ( never)
118
- public func run_StringWalkMixedCharacters ( _ N: Int ) {
176
+ public func run_StringWalk_tweet_characters_Backwards ( _ N: Int ) {
119
177
for _ in 1 ... charactersMultiplier*N {
120
- countCharacters ( tweetString. characters)
178
+ count_characters_rev ( tweet. characters. reversed ( ) )
179
+ }
180
+ }
181
+
182
+
183
+ @inline ( never)
184
+ public func run_StringWalk_japanese_unicodeScalars( _ N: Int ) {
185
+ for _ in 1 ... unicodeScalarsMultiplier*N {
186
+ count_unicodeScalars ( japanese. unicodeScalars)
187
+ }
188
+ }
189
+
190
+ @inline ( never)
191
+ public func run_StringWalk_japanese_unicodeScalars_Backwards( _ N: Int ) {
192
+ for _ in 1 ... unicodeScalarsMultiplier*N {
193
+ count_unicodeScalars_rev ( japanese. unicodeScalars. reversed ( ) )
121
194
}
122
195
}
123
196
197
+
124
198
@inline ( never)
125
- public func run_StringWalkASCIIScalarsBackwards ( _ N: Int ) {
126
- for _ in 1 ... scalarsMultiplier *N {
127
- countScalars_rev ( asciiString . unicodeScalars . reversed ( ) )
199
+ public func run_StringWalk_japanese_characters ( _ N: Int ) {
200
+ for _ in 1 ... charactersMultiplier *N {
201
+ count_characters ( japanese . characters )
128
202
}
129
203
}
130
204
131
205
@inline ( never)
132
- public func run_StringWalkASCIICharactersBackwards ( _ N: Int ) {
206
+ public func run_StringWalk_japanese_characters_Backwards ( _ N: Int ) {
133
207
for _ in 1 ... charactersMultiplier*N {
134
- countCharacters_rev ( asciiString . characters. reversed ( ) )
208
+ count_characters_rev ( japanese . characters. reversed ( ) )
135
209
}
136
210
}
137
211
212
+
138
213
@inline ( never)
139
- public func run_StringWalkUnicodeScalarsBackwards ( _ N: Int ) {
140
- for _ in 1 ... scalarsMultiplier *N {
141
- countScalars_rev ( utf16String . unicodeScalars. reversed ( ) )
214
+ public func run_StringWalk_chinese_unicodeScalars ( _ N: Int ) {
215
+ for _ in 1 ... unicodeScalarsMultiplier *N {
216
+ count_unicodeScalars ( chinese . unicodeScalars)
142
217
}
143
218
}
144
219
145
220
@inline ( never)
146
- public func run_StringWalkUnicodeCharactersBackwards( _ N: Int ) {
221
+ public func run_StringWalk_chinese_unicodeScalars_Backwards( _ N: Int ) {
222
+ for _ in 1 ... unicodeScalarsMultiplier*N {
223
+ count_unicodeScalars_rev ( chinese. unicodeScalars. reversed ( ) )
224
+ }
225
+ }
226
+
227
+
228
+ @inline ( never)
229
+ public func run_StringWalk_chinese_characters( _ N: Int ) {
147
230
for _ in 1 ... charactersMultiplier*N {
148
- countCharacters_rev ( utf16String . characters. reversed ( ) )
231
+ count_characters ( chinese . characters)
149
232
}
150
233
}
151
234
152
235
@inline ( never)
153
- public func run_StringWalkMixedScalarsBackwards ( _ N: Int ) {
154
- for _ in 1 ... scalarsMultiplier *N {
155
- countScalars_rev ( tweetString . unicodeScalars . reversed ( ) )
236
+ public func run_StringWalk_chinese_characters_Backwards ( _ N: Int ) {
237
+ for _ in 1 ... charactersMultiplier *N {
238
+ count_characters_rev ( chinese . characters . reversed ( ) )
156
239
}
157
240
}
158
241
242
+
159
243
@inline ( never)
160
- public func run_StringWalkMixedCharactersBackwards( _ N: Int ) {
244
+ public func run_StringWalk_korean_unicodeScalars( _ N: Int ) {
245
+ for _ in 1 ... unicodeScalarsMultiplier*N {
246
+ count_unicodeScalars ( korean. unicodeScalars)
247
+ }
248
+ }
249
+
250
+ @inline ( never)
251
+ public func run_StringWalk_korean_unicodeScalars_Backwards( _ N: Int ) {
252
+ for _ in 1 ... unicodeScalarsMultiplier*N {
253
+ count_unicodeScalars_rev ( korean. unicodeScalars. reversed ( ) )
254
+ }
255
+ }
256
+
257
+
258
+ @inline ( never)
259
+ public func run_StringWalk_korean_characters( _ N: Int ) {
260
+ for _ in 1 ... charactersMultiplier*N {
261
+ count_characters ( korean. characters)
262
+ }
263
+ }
264
+
265
+ @inline ( never)
266
+ public func run_StringWalk_korean_characters_Backwards( _ N: Int ) {
161
267
for _ in 1 ... charactersMultiplier*N {
162
- countCharacters_rev ( tweetString . characters. reversed ( ) )
268
+ count_characters_rev ( korean . characters. reversed ( ) )
163
269
}
164
270
}
271
+
0 commit comments