@@ -23,6 +23,8 @@ public let AngryPhonebook = [
23
23
runFunction: run_AngryPhonebook,
24
24
tags: t,
25
25
legacyFactor: 7 ) ,
26
+
27
+ // Small String Workloads
26
28
BenchmarkInfo (
27
29
name: " AngryPhonebook.Latin " ,
28
30
runFunction: { angryPhonebook ( $0, latin) } ,
@@ -37,7 +39,24 @@ public let AngryPhonebook = [
37
39
name: " AngryPhonebook.Cyrillic " ,
38
40
runFunction: { angryPhonebook ( $0, cyrillic) } ,
39
41
tags: t,
40
- setUpFunction: { blackHole ( cyrillic) } )
42
+ setUpFunction: { blackHole ( cyrillic) } ) ,
43
+
44
+ // Large String Workloads
45
+ BenchmarkInfo (
46
+ name: " AngryPhonebook.Latin.Large " ,
47
+ runFunction: { largeAngryPhonebook ( $0, latinLarge) } ,
48
+ tags: t,
49
+ setUpFunction: { blackHole ( latinLarge) } ) ,
50
+ BenchmarkInfo (
51
+ name: " AngryPhonebook.Armenian.Large " ,
52
+ runFunction: { largeAngryPhonebook ( $0, armenianLarge) } ,
53
+ tags: t,
54
+ setUpFunction: { blackHole ( armenianLarge) } ) ,
55
+ BenchmarkInfo (
56
+ name: " AngryPhonebook.Cyrillic.Large " ,
57
+ runFunction: { largeAngryPhonebook ( $0, cyrillicLarge) } ,
58
+ tags: t,
59
+ setUpFunction: { blackHole ( cyrillicLarge) } )
41
60
]
42
61
43
62
let words = [
@@ -64,17 +83,29 @@ public func run_AngryPhonebook(_ N: Int) {
64
83
// a total length of approximately 120 characters.
65
84
// E.g.: `latin.joined(separator: "").count == 124`
66
85
86
+ /// Precompose the phonebook into one large string of comma separated names.
87
+ func large( _ names: [ String ] ) -> String {
88
+ names. map { firstName in
89
+ names. map { lastName in
90
+ firstName + " " + lastName }
91
+ . joined ( separator: " , " )
92
+ } . joined ( separator: " , " )
93
+ }
94
+
67
95
let latin = Array ( words. prefix ( 20 ) )
96
+ let latinLarge = large ( latin)
68
97
69
98
let armenian = [
70
99
" Արմեն " , " Աննա " , " Հարութ " , " Միքայել " , " Մարիա " , " Դավիթ " , " Վարդան " ,
71
100
" Նարինե " , " Տիգրան " , " Տաթևիկ " , " Թագուհի " , " Թամարա " , " Ազնաուր " , " Գրիգոր " ,
72
101
" Կոմիտաս " , " Հայկ " , " Գառնիկ " , " Վահրամ " , " Վահագն " , " Գևորգ " ]
102
+ let armenianLarge = large ( armenian)
73
103
74
104
let cyrillic = [
75
105
" Ульяна " , " Аркадий " , " Аня " , " Даниил " , " Дмитрий " , " Эдуард " , " Юрій " , " Давид " ,
76
106
" Анна " , " Дмитрий " , " Евгений " , " Борис " , " Ксения " , " Артур " , " Аполлон " ,
77
107
" Соломон " , " Николай " , " Кристи " , " Надежда " , " Спартак " ]
108
+ let cyrillicLarge = large ( cyrillic)
78
109
79
110
@inline ( never)
80
111
public func angryPhonebook( _ N: Int , _ names: [ String ] ) {
@@ -88,3 +119,10 @@ public func angryPhonebook(_ N: Int, _ names: [String]) {
88
119
}
89
120
}
90
121
}
122
+
123
+ @inline ( never)
124
+ public func largeAngryPhonebook( _ N: Int , _ names: String ) {
125
+ for _ in 1 ... N {
126
+ blackHole ( ( names. uppercased ( ) , names. lowercased ( ) ) )
127
+ }
128
+ }
0 commit comments