Skip to content

Commit c05f33e

Browse files
committed
[Foundation] PersonNameComponents: Modernize hashing
1 parent a601e3f commit c05f33e

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

Darwin/Foundation-swiftoverlay-Tests/TestPersonNameComponents.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,34 @@ class TestPersonNameComponents : TestPersonNameComponentsSuper {
2929
result.familyName = familyName
3030
return result
3131
}
32+
33+
func test_Hashing() {
34+
guard #available(macOS 10.11, iOS 9.0, *) else { return }
35+
36+
let values: [[PersonNameComponents]] = [
37+
[
38+
makePersonNameComponents(givenName: "Kevin", familyName: "Frank"),
39+
makePersonNameComponents(givenName: "Kevin", familyName: "Frank"),
40+
],
41+
[
42+
makePersonNameComponents(givenName: "John", familyName: "Frank"),
43+
makePersonNameComponents(givenName: "John", familyName: "Frank"),
44+
],
45+
[
46+
makePersonNameComponents(givenName: "Kevin", familyName: "Appleseed"),
47+
makePersonNameComponents(givenName: "Kevin", familyName: "Appleseed"),
48+
],
49+
[
50+
makePersonNameComponents(givenName: "John", familyName: "Appleseed"),
51+
makePersonNameComponents(givenName: "John", familyName: "Appleseed"),
52+
]
53+
]
54+
checkHashableGroups(
55+
values,
56+
// FIXME: PersonNameComponents hashes aren't seeded.
57+
allowIncompleteHashing: true)
58+
}
59+
3260
func test_AnyHashableContainingPersonNameComponents() {
3361
if #available(OSX 10.11, iOS 9.0, *) {
3462
let values: [PersonNameComponents] = [
@@ -72,6 +100,7 @@ class TestPersonNameComponents : TestPersonNameComponentsSuper {
72100

73101
#if !FOUNDATION_XCTEST
74102
var PersonNameComponentsTests = TestSuite("TestPersonNameComponents")
103+
PersonNameComponentsTests.test("test_Hashing") { TestPersonNameComponents().test_Hashing() }
75104
PersonNameComponentsTests.test("test_AnyHashableContainingPersonNameComponents") { TestPersonNameComponents().test_AnyHashableContainingPersonNameComponents() }
76105
PersonNameComponentsTests.test("test_AnyHashableCreatedFromNSPersonNameComponents") { TestPersonNameComponents().test_AnyHashableCreatedFromNSPersonNameComponents() }
77106
runAllTests()

Darwin/Foundation-swiftoverlay/PersonNameComponents.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ public struct PersonNameComponents : ReferenceConvertible, Hashable, Equatable,
7171
set { _applyMutation { $0.phoneticRepresentation = newValue } }
7272
}
7373

74-
public var hashValue : Int {
75-
return _handle.map { $0.hash }
74+
public func hash(into hasher: inout Hasher) {
75+
hasher.combine(_handle._uncopiedReference())
7676
}
77-
77+
7878
@available(macOS 10.11, iOS 9.0, *)
7979
public static func ==(lhs : PersonNameComponents, rhs: PersonNameComponents) -> Bool {
8080
// Don't copy references here; no one should be storing anything

0 commit comments

Comments
 (0)