Skip to content

Commit fde2290

Browse files
committed
[Foundation overlay] Enable custom AnyHashable representation for NSMeasurement
Enables the overlay behavior blocked by rdar://problem/27539951. (cherry picked from commit fa4331b)
1 parent f836188 commit fde2290

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

stdlib/public/SDK/Foundation/Measurement.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,6 @@ extension Measurement : _ObjectiveCBridgeable {
227227
}
228228
}
229229

230-
/*
231-
FIXME(id-as-any): can't write this code because of:
232-
<rdar://problem/27539951> "unhandled generic bridged type" when bridging NSMeasurement
233-
234230
@available(OSX 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *)
235231
extension NSMeasurement : _HasCustomAnyHashableRepresentation {
236232
// Must be @nonobjc to avoid infinite recursion during bridging.
@@ -239,7 +235,6 @@ extension NSMeasurement : _HasCustomAnyHashableRepresentation {
239235
return AnyHashable(self as Measurement)
240236
}
241237
}
242-
*/
243238

244239
// This workaround is required for the time being, because Swift doesn't support covariance for Measurement (26607639)
245240
@available(OSX 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *)

test/1_stdlib/TestMeasurement.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,36 @@ class TestMeasurement : TestMeasurementSuper {
147147
expectTrue(fiveKM < sevenThousandM)
148148
expectTrue(fiveKM <= fiveThousandM)
149149
}
150+
151+
func test_AnyHashableContainingMeasurement() {
152+
let values: [Measurement<UnitLength>] = [
153+
Measurement(value: 100, unit: UnitLength.meters),
154+
Measurement(value: 100, unit: UnitLength.kilometers),
155+
Measurement(value: 100, unit: UnitLength.kilometers),
156+
]
157+
let anyHashables = values.map(AnyHashable.init)
158+
expectEqual(Measurement<UnitLength>.self, type(of: anyHashables[0].base))
159+
expectEqual(Measurement<UnitLength>.self, type(of: anyHashables[1].base))
160+
expectEqual(Measurement<UnitLength>.self, type(of: anyHashables[2].base))
161+
expectNotEqual(anyHashables[0], anyHashables[1])
162+
expectEqual(anyHashables[1], anyHashables[2])
163+
}
164+
165+
func test_AnyHashableCreatedFromNSMeasurement() {
166+
if #available(iOS 8.0, *) {
167+
let values: [NSMeasurement] = [
168+
NSMeasurement(doubleValue: 100, unit: UnitLength.meters),
169+
NSMeasurement(doubleValue: 100, unit: UnitLength.kilometers),
170+
NSMeasurement(doubleValue: 100, unit: UnitLength.kilometers),
171+
]
172+
let anyHashables = values.map(AnyHashable.init)
173+
expectEqual(Measurement.self, type(of: anyHashables[0].base))
174+
expectEqual(Measurement.self, type(of: anyHashables[1].base))
175+
expectEqual(Measurement.self, type(of: anyHashables[2].base))
176+
expectNotEqual(anyHashables[0], anyHashables[1])
177+
expectEqual(anyHashables[1], anyHashables[2])
178+
}
179+
}
150180
}
151181

152182
#if !FOUNDATION_XCTEST
@@ -159,6 +189,8 @@ if #available(OSX 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) {
159189
MeasurementTests.test("testMeasurementFormatter") { TestMeasurement().testMeasurementFormatter() }
160190
MeasurementTests.test("testEquality") { TestMeasurement().testEquality() }
161191
MeasurementTests.test("testComparison") { TestMeasurement().testComparison() }
192+
MeasurementTests.test("test_AnyHashableContainingMeasurement") { TestMeasurement().test_AnyHashableContainingMeasurement() }
193+
MeasurementTests.test("test_AnyHashableCreatedFromNSMeasurement") { TestMeasurement().test_AnyHashableCreatedFromNSMeasurement() }
162194
runAllTests()
163195
}
164196
#endif

0 commit comments

Comments
 (0)