Skip to content

Commit b7be7d6

Browse files
committed
Foundation import workaround
1 parent b804e1f commit b7be7d6

File tree

4 files changed

+48
-20
lines changed

4 files changed

+48
-20
lines changed

Benchmarks/Benchmarks/String/BenchmarkString.swift

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ import func Benchmark.blackHole
1717
import Foundation
1818
#else
1919
import FoundationEssentials
20+
import FoundationBenchmarkSupport
21+
#endif
22+
23+
#if FOUNDATION_FRAMEWORK
24+
private typealias Encoding = String.Encoding
25+
#else
26+
private typealias Encoding = FoundationEssentialsStringEncoding
2027

2128
private func autoreleasepool<T>(_ block: () -> T) -> T { block() }
2229
#endif
@@ -87,21 +94,21 @@ let benchmarks = {
8794
Benchmark("utf16-decode", configuration: .init(warmupIterations: 1, scalingFactor: .kilo)) { benchmark in
8895
for _ in benchmark.scaledIterations {
8996
autoreleasepool {
90-
blackHole(String(bytes: asciiSmallStrDataUTF16BE, encoding: .utf16BigEndian))
91-
blackHole(String(bytes: nonAsciiSmallStrDataUTF16BE, encoding: .utf16BigEndian))
97+
blackHole(String(bytes: asciiSmallStrDataUTF16BE, encoding: Encoding.utf16BigEndian))
98+
blackHole(String(bytes: nonAsciiSmallStrDataUTF16BE, encoding: Encoding.utf16BigEndian))
9299

93-
blackHole(String(bytes: asciiLargeStrDataUTF16BE, encoding: .utf16BigEndian))
94-
blackHole(String(bytes: nonAsciiLargeStrDataUTF16BE, encoding: .utf16BigEndian))
100+
blackHole(String(bytes: asciiLargeStrDataUTF16BE, encoding: Encoding.utf16BigEndian))
101+
blackHole(String(bytes: nonAsciiLargeStrDataUTF16BE, encoding: Encoding.utf16BigEndian))
95102

96-
blackHole(String(bytes: asciiSmallStrDataUTF16LE, encoding: .utf16LittleEndian))
97-
blackHole(String(bytes: nonAsciiSmallStrDataUTF16LE, encoding: .utf16LittleEndian))
103+
blackHole(String(bytes: asciiSmallStrDataUTF16LE, encoding: Encoding.utf16LittleEndian))
104+
blackHole(String(bytes: nonAsciiSmallStrDataUTF16LE, encoding: Encoding.utf16LittleEndian))
98105

99-
blackHole(String(bytes: asciiLargeStrDataUTF16LE, encoding: .utf16LittleEndian))
100-
blackHole(String(bytes: nonAsciiLargeStrDataUTF16LE, encoding: .utf16LittleEndian))
106+
blackHole(String(bytes: asciiLargeStrDataUTF16LE, encoding: Encoding.utf16LittleEndian))
107+
blackHole(String(bytes: nonAsciiLargeStrDataUTF16LE, encoding: Encoding.utf16LittleEndian))
101108

102109
// Use big endian input data with plain utf16 to get a valid string.
103-
blackHole(String(bytes: asciiLargeStrDataUTF16BE, encoding: .utf16))
104-
blackHole(String(bytes: nonAsciiLargeStrDataUTF16BE, encoding: .utf16))
110+
blackHole(String(bytes: asciiLargeStrDataUTF16BE, encoding: Encoding.utf16))
111+
blackHole(String(bytes: nonAsciiLargeStrDataUTF16BE, encoding: Encoding.utf16))
105112
}
106113
}
107114
}
@@ -132,21 +139,21 @@ let benchmarks = {
132139
Benchmark("utf32-decode", configuration: .init(warmupIterations: 1, scalingFactor: .kilo)) { benchmark in
133140
for _ in benchmark.scaledIterations {
134141
autoreleasepool {
135-
blackHole(String(bytes: asciiSmallStrDataUTF32BE, encoding: .utf32BigEndian))
136-
blackHole(String(bytes: nonAsciiSmallStrDataUTF32BE, encoding: .utf32BigEndian))
142+
blackHole(String(bytes: asciiSmallStrDataUTF32BE, encoding: Encoding.utf32BigEndian))
143+
blackHole(String(bytes: nonAsciiSmallStrDataUTF32BE, encoding: Encoding.utf32BigEndian))
137144

138-
blackHole(String(bytes: asciiLargeStrDataUTF32BE, encoding: .utf32BigEndian))
139-
blackHole(String(bytes: nonAsciiLargeStrDataUTF32BE, encoding: .utf32BigEndian))
145+
blackHole(String(bytes: asciiLargeStrDataUTF32BE, encoding: Encoding.utf32BigEndian))
146+
blackHole(String(bytes: nonAsciiLargeStrDataUTF32BE, encoding: Encoding.utf32BigEndian))
140147

141-
blackHole(String(bytes: asciiSmallStrDataUTF32LE, encoding: .utf32LittleEndian))
142-
blackHole(String(bytes: nonAsciiSmallStrDataUTF32LE, encoding: .utf32LittleEndian))
148+
blackHole(String(bytes: asciiSmallStrDataUTF32LE, encoding: Encoding.utf32LittleEndian))
149+
blackHole(String(bytes: nonAsciiSmallStrDataUTF32LE, encoding: Encoding.utf32LittleEndian))
143150

144-
blackHole(String(bytes: asciiLargeStrDataUTF32LE, encoding: .utf32LittleEndian))
145-
blackHole(String(bytes: nonAsciiLargeStrDataUTF32LE, encoding: .utf32LittleEndian))
151+
blackHole(String(bytes: asciiLargeStrDataUTF32LE, encoding: Encoding.utf32LittleEndian))
152+
blackHole(String(bytes: nonAsciiLargeStrDataUTF32LE, encoding: Encoding.utf32LittleEndian))
146153

147154
// Use big endian input data with plain UTF32 to get a valid string.
148-
blackHole(String(bytes: asciiLargeStrDataUTF32BE, encoding: .utf32))
149-
blackHole(String(bytes: nonAsciiLargeStrDataUTF32BE, encoding: .utf32))
155+
blackHole(String(bytes: asciiLargeStrDataUTF32BE, encoding: Encoding.utf32))
156+
blackHole(String(bytes: nonAsciiLargeStrDataUTF32BE, encoding: Encoding.utf32))
150157
}
151158
}
152159
}

Benchmarks/Package.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ let package = Package(
7171
name: "StringBenchmarks",
7272
dependencies: [
7373
.product(name: "FoundationEssentials", package: "swift-foundation-local"),
74+
.product(name: "FoundationBenchmarkSupport", package: "swift-foundation-local"),
7475
.product(name: "Benchmark", package: "package-benchmark"),
7576
],
7677
path: "Benchmarks/String",

Package.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ let package = Package(
7878
.library(name: "FoundationPreview", targets: ["FoundationPreview"]),
7979
.library(name: "FoundationEssentials", targets: ["FoundationEssentials"]),
8080
.library(name: "FoundationInternationalization", targets: ["FoundationInternationalization"]),
81+
.library(name: "FoundationBenchmarkSupport", targets: ["FoundationBenchmarkSupport"]),
8182
],
8283
dependencies: dependencies,
8384
targets: [
@@ -101,6 +102,10 @@ let package = Package(
101102
"FoundationInternationalization",
102103
], swiftSettings: availabilityMacros + concurrencyChecking),
103104

105+
.target(name: "FoundationBenchmarkSupport", dependencies: [
106+
"FoundationEssentials",
107+
], swiftSettings: availabilityMacros + concurrencyChecking),
108+
104109
// FoundationEssentials
105110
.target(
106111
name: "FoundationEssentials",
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2024 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
import FoundationEssentials
14+
15+
public typealias FoundationEssentialsStringEncoding = String.Encoding

0 commit comments

Comments
 (0)