@@ -17,6 +17,7 @@ import TestsUtils
17
17
import Foundation
18
18
19
19
fileprivate var test : NSString = " "
20
+ fileprivate var mutableTest = " "
20
21
21
22
public let NSStringConversion = [
22
23
BenchmarkInfo ( name: " NSStringConversion " ,
@@ -65,7 +66,44 @@ public let NSStringConversion = [
65
66
BenchmarkInfo ( name: " NSStringConversion.Rebridge.LongUTF8 " ,
66
67
runFunction: run_NSStringConversion_longNonASCII_rebridge,
67
68
tags: [ . validation, . api, . String, . bridging] ,
68
- setUpFunction: { test = NSString ( cString: " Thë qüick bröwn föx jumps over the lazy dög " , encoding: String . Encoding. utf8. rawValue) ! } ) ]
69
+ setUpFunction: { test = NSString ( cString: " Thë qüick bröwn föx jumps over the lazy dög " , encoding: String . Encoding. utf8. rawValue) ! } ) ,
70
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.UTF8 " ,
71
+ runFunction: run_NSStringConversion_nonASCIIMutable,
72
+ tags: [ . validation, . api, . String, . bridging] ,
73
+ setUpFunction: { mutableTest = " tëst " } ) ,
74
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Medium " ,
75
+ runFunction: run_NSStringConversion_mediumMutable,
76
+ tags: [ . validation, . api, . String, . bridging] ,
77
+ setUpFunction: { mutableTest = " aaaaaaaaaaaaaaa " } ) ,
78
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Long " ,
79
+ runFunction: run_NSStringConversion_longMutable,
80
+ tags: [ . validation, . api, . String, . bridging] ,
81
+ setUpFunction: { mutableTest = " The quick brown fox jumps over the lazy dog " } ) ,
82
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.LongUTF8 " ,
83
+ runFunction: run_NSStringConversion_longNonASCIIMutable,
84
+ tags: [ . validation, . api, . String, . bridging] ,
85
+ setUpFunction: { mutableTest = " Thë qüick bröwn föx jumps over the lazy dög " } ) ,
86
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Rebridge " ,
87
+ runFunction: run_NSStringConversion_rebridgeMutable,
88
+ tags: [ . validation, . api, . String, . bridging] ,
89
+ setUpFunction: { mutableTest = " test " } ) ,
90
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Rebridge.UTF8 " ,
91
+ runFunction: run_NSStringConversion_nonASCII_rebridgeMutable,
92
+ tags: [ . validation, . api, . String, . bridging] ,
93
+ setUpFunction: { mutableTest = " tëst " } ) ,
94
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Rebridge.Medium " ,
95
+ runFunction: run_NSStringConversion_medium_rebridgeMutable,
96
+ tags: [ . validation, . api, . String, . bridging] ,
97
+ setUpFunction: { mutableTest = " aaaaaaaaaaaaaaa " } ) ,
98
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Rebridge.Long " ,
99
+ runFunction: run_NSStringConversion_long_rebridgeMutable,
100
+ tags: [ . validation, . api, . String, . bridging] ,
101
+ setUpFunction: { mutableTest = " The quick brown fox jumps over the lazy dog " } ) ,
102
+ BenchmarkInfo ( name: " NSStringConversion.MutableCopy.Rebridge.LongUTF8 " ,
103
+ runFunction: run_NSStringConversion_longNonASCII_rebridgeMutable,
104
+ tags: [ . validation, . api, . String, . bridging] ,
105
+ setUpFunction: { mutableTest = " Thë qüick bröwn föx jumps over the lazy dög " } )
106
+ ]
69
107
70
108
public func run_NSStringConversion( _ N: Int ) {
71
109
let test : NSString = NSString ( cString: " test " , encoding: String . Encoding. ascii. rawValue) !
@@ -103,6 +141,31 @@ public func run_NSStringConversion_longNonASCII(_ N: Int) {
103
141
innerLoop ( test, N, 300 )
104
142
}
105
143
144
+ fileprivate func innerMutableLoop( _ str: String , _ N: Int , _ scale: Int = 5000 ) {
145
+ for _ in 1 ... N * scale {
146
+ let copy = ( str as NSString ) . mutableCopy ( ) as! NSMutableString
147
+ for char in ( identity ( copy) as String ) . utf8 {
148
+ blackHole ( char)
149
+ }
150
+ }
151
+ }
152
+
153
+ public func run_NSStringConversion_nonASCIIMutable( _ N: Int ) {
154
+ innerMutableLoop ( mutableTest, N, 500 )
155
+ }
156
+
157
+ public func run_NSStringConversion_mediumMutable( _ N: Int ) {
158
+ innerMutableLoop ( mutableTest, N, 500 )
159
+ }
160
+
161
+ public func run_NSStringConversion_longMutable( _ N: Int ) {
162
+ innerMutableLoop ( mutableTest, N, 250 )
163
+ }
164
+
165
+ public func run_NSStringConversion_longNonASCIIMutable( _ N: Int ) {
166
+ innerMutableLoop ( mutableTest, N, 150 )
167
+ }
168
+
106
169
fileprivate func innerRebridge( _ str: NSString , _ N: Int , _ scale: Int = 5000 ) {
107
170
for _ in 1 ... N * scale {
108
171
let bridged = identity ( str) as String
@@ -135,4 +198,33 @@ public func run_NSStringConversion_longNonASCII_rebridge(_ N: Int) {
135
198
innerRebridge ( test, N, 300 )
136
199
}
137
200
201
+ fileprivate func innerMutableRebridge( _ str: String , _ N: Int , _ scale: Int = 5000 ) {
202
+ for _ in 1 ... N * scale {
203
+ let copy = ( str as NSString ) . mutableCopy ( ) as! NSMutableString
204
+ let bridged = identity ( copy) as String
205
+ blackHole ( bridged)
206
+ blackHole ( bridged as NSString )
207
+ }
208
+ }
209
+
210
+ public func run_NSStringConversion_rebridgeMutable( _ N: Int ) {
211
+ innerMutableRebridge ( mutableTest, N, 1000 )
212
+ }
213
+
214
+ public func run_NSStringConversion_nonASCII_rebridgeMutable( _ N: Int ) {
215
+ innerMutableRebridge ( mutableTest, N, 500 )
216
+ }
217
+
218
+ public func run_NSStringConversion_medium_rebridgeMutable( _ N: Int ) {
219
+ innerMutableRebridge ( mutableTest, N, 500 )
220
+ }
221
+
222
+ public func run_NSStringConversion_long_rebridgeMutable( _ N: Int ) {
223
+ innerMutableRebridge ( mutableTest, N, 500 )
224
+ }
225
+
226
+ public func run_NSStringConversion_longNonASCII_rebridgeMutable( _ N: Int ) {
227
+ innerMutableRebridge ( mutableTest, N, 300 )
228
+ }
229
+
138
230
#endif
0 commit comments