File: StringSwitch.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (234 lines) | stat: -rw-r--r-- 6,253 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
//===--- StringSwitch.swift -------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2020 - 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

import TestsUtils

public let benchmarks = [
  BenchmarkInfo(
    name: "StringSwitch",
    runFunction: run_StringSwitch,
    tags: [.validation, .api])
]

@inline(never)
func getIndex(_ s: String) -> Int {
  switch s {
  case "Swift": return 0
  case "is": return 1
  case "a": return 2
  case "general-purpose": return 3
  case "programming language": return 4
  case "built": return 5
  case "using": return 6
  case "modern": return 7
  case "approach": return 8
  case "to": return 9
  case "safety,": return 10
  case "performance,": return 11
  case "and": return 12
  case "software": return 13
  case "design": return 14
  case "patterns.": return 15
  case "": return 16
  case "The": return 17
  case "goal": return 18
  case "of": return 19
  case "the": return 20
  case "project": return 21
  case "create": return 22
  case "best": return 23
  case "available": return 24
  case "for": return 25
  case "uses": return 26
  case "ranging": return 27
  case "from": return 28
  case "systems": return 29
  case "mobile": return 30
  case "desktop": return 31
  case "apps,": return 32
  case "scaling": return 33
  case "up": return 34
  case "cloud": return 35
  case "services.": return 36
  case "Most": return 37
  case "importantly,": return 38
  case "designed": return 39
  case "make": return 40
  case "writing": return 41
  case "maintaining": return 42
  case "correct": return 43
  case "programs": return 44
  case "easier": return 45
  case "developer.": return 46
  case "To": return 47
  case "achieve": return 48
  case "this": return 49
  case "goal,": return 50
  case "we": return 51
  case "believe": return 52
  case "that": return 53
  case "most": return 54
  case "obvious": return 55
  case "way": return 56
  case "write": return 57
  case "code": return 58
  case "must": return 59
  case "also": return 60
  case "be:": return 61
  case "Safe.": return 62
  case "should": return 63
  case "behave": return 64
  case "in": return 65
  case "safe": return 66
  case "manner.": return 67
  case "Undefined": return 68
  case "behavior": return 69
  case "enemy": return 70
  case "developer": return 71
  case "mistakes": return 72
  case "be": return 73
  case "caught": return 74
  case "before": return 75
  case "production.": return 76
  case "Opting": return 77
  case "safety": return 78
  case "sometimes": return 79
  case "means": return 80
  case "will": return 81
  case "feel": return 82
  case "strict,": return 83
  case "but": return 84
  case "clarity": return 85
  case "saves": return 86
  case "time": return 87
  case "long": return 88
  case "run.": return 89
  case "Fast.": return 90
  case "intended": return 91
  case "as": return 92
  case "replacement": return 93
  case "C-based": return 94
  case "languages": return 95
  case "(C, C++, Objective-C).": return 96
  case "As": return 97
  case "such,": return 98
  case "comparable": return 99
  case "those": return 100
  case "performance": return 101
  case "tasks.": return 102
  case "Performance": return 103
  case "predictable": return 104
  case "consistent,": return 105
  case "not": return 106
  case "just": return 107
  case "fast": return 108
  case "short": return 109
  case "bursts": return 110
  case "require": return 111
  case "clean-up": return 112
  case "later.": return 113
  case "There": return 114
  case "are": return 115
  case "lots": return 116
  case "with": return 117
  case "novel": return 118
  case "features": return 119
  case "x": return 120
  case "being": return 121
  case "rare.": return 122
  case "Expressive.": return 123
  case "benefits": return 124
  case "decades": return 125
  case "advancement": return 126
  case "computer": return 127
  case "science": return 128
  case "offer": return 129
  case "syntax": return 130
  case "joy": return 131
  case "use,": return 132
  case "developers": return 133
  case "expect.": return 134
  case "But": return 135
  case "never": return 136
  case "done.": return 137
  case "We": return 138
  case "monitor": return 139
  case "advancements": return 140
  case "embrace": return 141
  case "what": return 142
  case "works,": return 143
  case "continually": return 144
  case "evolving": return 145
  case "even": return 146
  case "better.": return 147
  case "Tools": return 148
  case "critical": return 149
  case "part": return 150
  case "ecosystem.": return 151
  case "strive": return 152
  case "integrate": return 153
  case "well": return 154
  case "within": return 155
  case "developerss": return 156
  case "toolset,": return 157
  case "build": return 158
  case "quickly,": return 159
  case "present": return 160
  case "excellent": return 161
  case "diagnostics,": return 162
  case "enable": return 163
  case "interactive": return 164
  case "development": return 165
  case "experiences.": return 166
  case "can": return 167
  case "so": return 168
  case "much": return 169
  case "more": return 170
  case "powerful,": return 171
  case "like": return 172
  case "Swift-based": return 173
  case "playgrounds": return 174
  case "do": return 175
  case "Xcode,": return 176
  case "or": return 177
  case "web-based": return 178
  case "REPL": return 179
  case "when": return 180
  case "working": return 181
  case "Linux": return 182
  case "server-side": return 183
  case "code.": return 184
  default: return -1
  }
}

@inline(never)
func test(_ s: String) {
  blackHole(getIndex(s))
}

@inline(never)
public func run_StringSwitch(n: Int) {
  let first = "Swift"
  let short = "To"
  let long = "(C, C++, Objective-C)."
  let last = "code."
  let none = "non existent string"
  for _ in 1...100*n {
    test(first)
    test(short)
    test(long)
    test(last)
    test(none)
  }
}