mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
A companion to #85180. <!-- If this pull request is targeting a release branch, please fill out the following form: https://github.com/swiftlang/.github/blob/main/PULL_REQUEST_TEMPLATE/release.md?plain=1 Otherwise, replace this comment with a description of your changes and rationale. Provide links to external references/discussions if appropriate. If this pull request resolves any GitHub issues, link them like so: Resolves <link to issue>, resolves <link to another issue>. For more information about linking a pull request to an issue, see: https://docs.github.com/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue --> <!-- Before merging this pull request, you must run the Swift continuous integration tests. For information about triggering CI builds via @swift-ci, see: https://github.com/apple/swift/blob/main/docs/ContinuousIntegration.md#swift-ci Thank you for your contribution to Swift! -->
632 lines
13 KiB
Swift
632 lines
13 KiB
Swift
//===--- IntegerToString.swift --------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2025 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// This test verifies the performance of generating a text description from an
|
|
// integer value.
|
|
|
|
import TestsUtils
|
|
|
|
public var benchmarks: [BenchmarkInfo] {
|
|
var result = [
|
|
BenchmarkInfo(
|
|
name: "IntegerToString.Int.decimal",
|
|
runFunction: run_IntegerToString_Int_decimal,
|
|
tags: [.validation, .api, .runtime, .String]
|
|
),
|
|
BenchmarkInfo(
|
|
name: "IntegerToString.Int.hex",
|
|
runFunction: run_IntegerToString_Int_hex,
|
|
tags: [.validation, .api, .runtime, .String]
|
|
),
|
|
BenchmarkInfo(
|
|
name: "IntegerToString.UInt64.decimal",
|
|
runFunction: run_IntegerToString_UInt64_decimal,
|
|
tags: [.validation, .api, .runtime, .String]
|
|
),
|
|
BenchmarkInfo(
|
|
name: "IntegerToString.UInt64.hex",
|
|
runFunction: run_IntegerToString_UInt64_hex,
|
|
tags: [.validation, .api, .runtime, .String]
|
|
),
|
|
]
|
|
|
|
if #available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *) {
|
|
result.append(
|
|
BenchmarkInfo(
|
|
name: "IntegerToString.UInt128.decimal",
|
|
runFunction: run_IntegerToString_UInt128_decimal,
|
|
tags: [.validation, .api, .runtime, .String]
|
|
)
|
|
)
|
|
result.append(
|
|
BenchmarkInfo(
|
|
name: "IntegerToString.UInt128.hex",
|
|
runFunction: run_IntegerToString_UInt128_hex,
|
|
tags: [.validation, .api, .runtime, .String]
|
|
)
|
|
)
|
|
}
|
|
return result
|
|
}
|
|
|
|
let intValues: [Int] = [
|
|
32225,
|
|
5550,
|
|
-11958,
|
|
16730,
|
|
19448,
|
|
28179,
|
|
-5184,
|
|
-27885,
|
|
27153,
|
|
-25416,
|
|
-27154,
|
|
-4803,
|
|
6825,
|
|
15717,
|
|
5291,
|
|
-8487,
|
|
-26981,
|
|
6916,
|
|
-5553,
|
|
-28076,
|
|
22301,
|
|
1491,
|
|
-28176,
|
|
-16115,
|
|
20647,
|
|
-26209,
|
|
15595,
|
|
28922,
|
|
-7220,
|
|
-21517,
|
|
8888,
|
|
-20765,
|
|
27880,
|
|
-31719,
|
|
-3556,
|
|
-20843,
|
|
-8609,
|
|
16257,
|
|
18387,
|
|
-12955,
|
|
-8630,
|
|
-4484,
|
|
9762,
|
|
-9688,
|
|
16790,
|
|
-6094,
|
|
-20066,
|
|
-10440,
|
|
-13443,
|
|
28448,
|
|
-2807,
|
|
-1873,
|
|
-914,
|
|
14952,
|
|
-29547,
|
|
-24787,
|
|
-16602,
|
|
24620,
|
|
19172,
|
|
-22991,
|
|
23742,
|
|
-25287,
|
|
10448,
|
|
-25535,
|
|
-29049,
|
|
18995,
|
|
-16537,
|
|
5373,
|
|
-6078,
|
|
8526,
|
|
-21691,
|
|
-13917,
|
|
-17441,
|
|
6693,
|
|
29629,
|
|
-19710,
|
|
-4516,
|
|
-32534,
|
|
-20677,
|
|
18593,
|
|
-31752,
|
|
16804,
|
|
-13985,
|
|
31898,
|
|
-17588,
|
|
-12856,
|
|
-24223,
|
|
20207,
|
|
-5175,
|
|
3870,
|
|
27002,
|
|
1330,
|
|
-15751,
|
|
-982,
|
|
18494,
|
|
31689,
|
|
171,
|
|
-899,
|
|
24639,
|
|
21605,
|
|
172985192,
|
|
-813952786,
|
|
-1665666121,
|
|
185810401,
|
|
-356282492,
|
|
519153229,
|
|
656610213,
|
|
1278822001,
|
|
-806899184,
|
|
-1705231884,
|
|
-2046890833,
|
|
-564271647,
|
|
619274021,
|
|
287941721,
|
|
-1799461947,
|
|
-811488170,
|
|
-411507304,
|
|
-1335207408,
|
|
451872020,
|
|
1977308146,
|
|
-1223008535,
|
|
-288428802,
|
|
-1711965056,
|
|
-2076021467,
|
|
2033055158,
|
|
-670842460,
|
|
-516315133,
|
|
-199699086,
|
|
542308014,
|
|
-1909344615,
|
|
-1966276726,
|
|
234662476,
|
|
1372605764,
|
|
846837306,
|
|
527863352,
|
|
-828202832,
|
|
-748730007,
|
|
303844984,
|
|
1575846438,
|
|
-1464774171,
|
|
-457036793,
|
|
-591358986,
|
|
736683526,
|
|
-1371505402,
|
|
-1877657819,
|
|
357175637,
|
|
1345614821,
|
|
-924747449,
|
|
1989761702,
|
|
-1726140877,
|
|
675720965,
|
|
1157431720,
|
|
-311213424,
|
|
1741720819,
|
|
-598671386,
|
|
-848833278,
|
|
516543823,
|
|
863054577,
|
|
-572154114,
|
|
-856934927,
|
|
537746487,
|
|
-94412853,
|
|
-1115669214,
|
|
-1444942135,
|
|
632091775,
|
|
-76026126,
|
|
1613053059,
|
|
-968549322,
|
|
-1707832029,
|
|
-190729631,
|
|
-224041540,
|
|
1621150201,
|
|
-1711677621,
|
|
1673737745,
|
|
1418108215,
|
|
192137803,
|
|
1295494861,
|
|
-1501091344,
|
|
662914426,
|
|
-637338429,
|
|
-565927039,
|
|
1183026219,
|
|
-212021598,
|
|
373230108,
|
|
-2058247717,
|
|
-1767818888,
|
|
415563634,
|
|
-1418400125,
|
|
1937805005,
|
|
-526432265,
|
|
-1502349122,
|
|
497749092,
|
|
1490946125,
|
|
1059845548,
|
|
77216342,
|
|
-1909565199,
|
|
1936370447,
|
|
192817000,
|
|
-1327925267,
|
|
-1420699487,
|
|
]
|
|
|
|
let uint64Values: [UInt64] = [
|
|
40591,
|
|
648,
|
|
47751,
|
|
1130,
|
|
26342,
|
|
15051,
|
|
30182,
|
|
12938,
|
|
17289,
|
|
37368,
|
|
60034,
|
|
13200,
|
|
50423,
|
|
61271,
|
|
8944,
|
|
42897,
|
|
2795,
|
|
34971,
|
|
49282,
|
|
56361,
|
|
14793,
|
|
23164,
|
|
27469,
|
|
64449,
|
|
50461,
|
|
64618,
|
|
14825,
|
|
42722,
|
|
34371,
|
|
11250,
|
|
7160,
|
|
63458,
|
|
14837,
|
|
37036,
|
|
53854,
|
|
26340,
|
|
24874,
|
|
34369,
|
|
7332,
|
|
55162,
|
|
6176,
|
|
45935,
|
|
54363,
|
|
23912,
|
|
987,
|
|
20126,
|
|
39147,
|
|
49583,
|
|
18231,
|
|
5667,
|
|
30895,
|
|
12447,
|
|
31660,
|
|
30333,
|
|
33278,
|
|
29789,
|
|
21532,
|
|
52725,
|
|
54855,
|
|
32545,
|
|
58286,
|
|
35152,
|
|
53646,
|
|
45702,
|
|
14329,
|
|
54188,
|
|
23135,
|
|
41244,
|
|
22401,
|
|
14784,
|
|
675,
|
|
18229,
|
|
41789,
|
|
58803,
|
|
244,
|
|
18288,
|
|
28003,
|
|
6112,
|
|
30579,
|
|
11306,
|
|
62321,
|
|
42339,
|
|
8323,
|
|
35944,
|
|
61043,
|
|
16153,
|
|
29107,
|
|
21502,
|
|
6883,
|
|
55122,
|
|
20687,
|
|
60187,
|
|
42816,
|
|
30866,
|
|
30155,
|
|
25276,
|
|
63954,
|
|
38148,
|
|
45019,
|
|
50680,
|
|
15052200827858995124,
|
|
15535239661815840417,
|
|
2149457961867388524,
|
|
12814358425672034158,
|
|
11729740424668659213,
|
|
17844894807721497052,
|
|
11423080310898253432,
|
|
10965749284831990256,
|
|
10916494852158064740,
|
|
12469842768891239891,
|
|
1513311992976088619,
|
|
13617884549524725528,
|
|
533860236860692248,
|
|
7712049449353836278,
|
|
4960147471138276736,
|
|
16926361609825180911,
|
|
15068400719203060266,
|
|
8417038304930505439,
|
|
13245062872331676835,
|
|
6424884389759218927,
|
|
5961748345383013434,
|
|
16815715321918143028,
|
|
604315460097471698,
|
|
459934484026707022,
|
|
9808044054531991973,
|
|
6459232136981853232,
|
|
17810913071719024129,
|
|
11261097629093504173,
|
|
4931006069659269673,
|
|
2157280141234011162,
|
|
1112725691570208272,
|
|
9448584584882882851,
|
|
14729367995151763490,
|
|
16521921619268042500,
|
|
14843656943729378712,
|
|
17321837091553447968,
|
|
4132541032525891440,
|
|
4486890304186743693,
|
|
4236474307326220888,
|
|
1868735020734178432,
|
|
9102807780937508528,
|
|
12184568678008594796,
|
|
9967694486957948860,
|
|
17859084903021488220,
|
|
9846746388495416233,
|
|
8803048912921415034,
|
|
10349958310284701040,
|
|
4730714293313618055,
|
|
18097055857882902700,
|
|
17328222097651726003,
|
|
13203817601810060088,
|
|
2094699121549942609,
|
|
8476477969794671415,
|
|
17258107258926342578,
|
|
14128822154282480330,
|
|
4892391481740347145,
|
|
13181152331462816702,
|
|
3625065524250038171,
|
|
1619809144995912262,
|
|
13137462691117269747,
|
|
9189151219995447797,
|
|
4010389930147109246,
|
|
8383993102354774029,
|
|
10003270414816818325,
|
|
5833899563959156305,
|
|
18145830297993779151,
|
|
10021947356937484992,
|
|
14787010438567658715,
|
|
11769252621531288267,
|
|
3568200047672438073,
|
|
17540143499494125889,
|
|
12706758128026446125,
|
|
6985996994118341105,
|
|
14812986274208565444,
|
|
4144609439360165223,
|
|
15711687169455084514,
|
|
14785063337094317578,
|
|
10093819834928293597,
|
|
17308402634598587341,
|
|
9453946139467408203,
|
|
8386139843424576389,
|
|
17376610657957319884,
|
|
1351317592609775051,
|
|
7902150678185490998,
|
|
16948127234906961413,
|
|
14533817965951347865,
|
|
6245398895839911653,
|
|
5313267148598246580,
|
|
15735577773932549567,
|
|
2888666416343902415,
|
|
3881752705078998798,
|
|
13683501860868173977,
|
|
12237654837394101036,
|
|
7946311886539093727,
|
|
17309286086783727919,
|
|
13189540567106059382,
|
|
2212063115889748914,
|
|
4606561406255833845,
|
|
13254437290762082565,
|
|
17951815598335230834,
|
|
]
|
|
|
|
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
|
|
extension UInt128 {
|
|
static var _values: [UInt128] {
|
|
return [
|
|
36486133715007284564051293326217832333,
|
|
304267833797578007957957581978974068499,
|
|
109881301001772865528086566434944430682,
|
|
225888040458180740498287662078515922015,
|
|
164534375572811620306521954986782800226,
|
|
248312824448870212327604727539082799462,
|
|
151659986788138065396574835765204195139,
|
|
13723116692520641350788951975726777670,
|
|
278099561980080882629829046074700102617,
|
|
43611395319615150510489494560201029806,
|
|
271671690945284772870687425060116262050,
|
|
147021325216068315557209252618900046135,
|
|
331474194590916571616373139450048533630,
|
|
24049443526263318541449695668028762302,
|
|
265976773780110738543033028413475085191,
|
|
173091663064191866364155115382519117500,
|
|
273925537891612720187993689136218212851,
|
|
243505640527110247377122072745298637911,
|
|
72213604316012784191255043477783855972,
|
|
49422702112416837085419817098851400310,
|
|
205472953653809480491088753299587425277,
|
|
137803173366712757997429447653727933292,
|
|
310894969878565974219526051266804224120,
|
|
39310595981499779846991125127623032759,
|
|
220948984899922060113131182879908268096,
|
|
294266290594410269061369165655535723046,
|
|
188827910899191130320995191218825857434,
|
|
21251611286023476276984315263897921259,
|
|
79974028828191009145421972086630354541,
|
|
77801535254714305665903565986591232705,
|
|
169824093181153607284747946991580692960,
|
|
223517057121755497707143171304065884078,
|
|
247115749390089602428776783121803298476,
|
|
92097884128464815170556127644177190730,
|
|
184857041578877412278557101383872889215,
|
|
89091956798806543642434675770382477898,
|
|
79929732112360183757064173145268506600,
|
|
133144661480026552165531067985206140246,
|
|
202280294922209823748109273687295993734,
|
|
250659921128321391895121116027712968266,
|
|
15099865137588852647793657956057950810,
|
|
121051099536529385211916847609587092519,
|
|
33729362422406845448526273229964979135,
|
|
247664457924359173190964755256262008695,
|
|
72484317849372248906068561544960865192,
|
|
147198565194719741247922989833107979125,
|
|
239110002179008701310121332444762103815,
|
|
60749654316560216940575769146040456058,
|
|
91291701919780827984693762351441946807,
|
|
237088953668773371509123975314546299213,
|
|
195602545414002629973025020680204559110,
|
|
40036923152119365002904850119018218254,
|
|
174265226883707350605146093261612297056,
|
|
238411197980524712356302335208001357216,
|
|
13607769544676391324611927479512233414,
|
|
22397353926508607040358095652489366326,
|
|
72663303245598124621031149891911436285,
|
|
199572926886549222288653903087354253792,
|
|
169989962890466329477644026778867941417,
|
|
314067664755982010072336582813647420380,
|
|
24386984674354615568649551918272164114,
|
|
327081484406343721530400526147937819613,
|
|
320806207722331329458451238529869101392,
|
|
261532919963917468736956493980018484442,
|
|
107045023675125816373002762402636263502,
|
|
240185758507934917611105700716539411453,
|
|
13708777018090371602215940281314169231,
|
|
140802811127263014076476258334406381943,
|
|
18564710871282170005145304262666895728,
|
|
285905895196831302786638031663391127028,
|
|
134727568829868463823380048060689755538,
|
|
214770637321725907390984940306204173706,
|
|
232559098299332238825902343913290371782,
|
|
148880979909460536260588483506781207405,
|
|
128870124233958565323058083856837656936,
|
|
96786480218539387303576074265723345358,
|
|
150696370188037235545582604968523003438,
|
|
17597468627522476345950788480213687037,
|
|
172632387797748848918818205463370781812,
|
|
59946654480271286555097119339910428342,
|
|
240845859753182795016428846456886012774,
|
|
283280329754803336937423076191391662330,
|
|
269149230865210296866902079867339470046,
|
|
78596114630871985423328610608681967846,
|
|
268278942306959745167911087500423419609,
|
|
257743714263065635391901559220149363279,
|
|
145421064653226539178721957124838039442,
|
|
178529356525517040750328126835452619782,
|
|
42274659769744711573895913136965971236,
|
|
70372292310600526032671342341226468891,
|
|
63028674510203260240907221921907683643,
|
|
241881060130886425378022303332112077288,
|
|
54625024179246784376179127060398755154,
|
|
219391065510237145522446361299097287105,
|
|
237941381670743922501810952663739113914,
|
|
19434856143627981185033477494786433645,
|
|
197125814686346135623800062558015206910,
|
|
339686862618755498607335053241557344177,
|
|
218424385760691732246344016489643111843,
|
|
119126703470689148170122928115934911731,
|
|
]
|
|
}
|
|
}
|
|
|
|
@inline(never)
|
|
public func run_IntegerToString_Int_decimal(n: Int) {
|
|
for _ in 0..<(n*10) {
|
|
for x in intValues {
|
|
blackHole(String(x, radix: 10))
|
|
}
|
|
}
|
|
}
|
|
|
|
@inline(never)
|
|
public func run_IntegerToString_Int_hex(n: Int) {
|
|
for _ in 0..<(n*10) {
|
|
for x in intValues {
|
|
blackHole(String(x, radix: 16))
|
|
}
|
|
}
|
|
}
|
|
|
|
@inline(never)
|
|
public func run_IntegerToString_UInt64_decimal(n: Int) {
|
|
for _ in 0..<(n*10) {
|
|
for x in uint64Values {
|
|
blackHole(String(x, radix: 10))
|
|
}
|
|
}
|
|
}
|
|
|
|
@inline(never)
|
|
public func run_IntegerToString_UInt64_hex(n: Int) {
|
|
for _ in 0..<(n*10) {
|
|
for x in uint64Values {
|
|
blackHole(String(x, radix: 16))
|
|
}
|
|
}
|
|
}
|
|
|
|
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
|
|
@inline(never)
|
|
public func run_IntegerToString_UInt128_decimal(n: Int) {
|
|
let uint128Values = UInt128._values
|
|
for _ in 0..<n {
|
|
for x in uint128Values {
|
|
blackHole(String(x, radix: 10))
|
|
}
|
|
}
|
|
}
|
|
|
|
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
|
|
@inline(never)
|
|
public func run_IntegerToString_UInt128_hex(n: Int) {
|
|
let uint128Values = UInt128._values
|
|
for _ in 0..<n {
|
|
for x in uint128Values {
|
|
blackHole(String(x, radix: 16))
|
|
}
|
|
}
|
|
}
|