Skip to content

Commit 6cfc3d8

Browse files
authored
attributed string fast equality (#1415)
1 parent 0fd0a4e commit 6cfc3d8

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

Benchmarks/Benchmarks/AttributedString/BenchmarkAttributedString.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,13 +423,21 @@ let benchmarks = {
423423
let manyAttributesSubstring = manyAttributesString[manyAttributesStringRange]
424424
let manyAttributes2Substring = manyAttributesString2[manyAttributesStringRange]
425425

426+
Benchmark("equalityShared") { benchmark in
427+
blackHole(manyAttributesString == manyAttributesString)
428+
}
429+
426430
Benchmark("equality") { benchmark in
427431
blackHole(manyAttributesString == manyAttributesString2)
428432
}
429-
433+
430434
Benchmark("equalityDifferingCharacters") { benchmark in
431435
blackHole(manyAttributesString == manyAttributesString3)
432436
}
437+
438+
Benchmark("substringEqualityShared") { benchmark in
439+
blackHole(manyAttributesSubstring == manyAttributesSubstring)
440+
}
433441

434442
Benchmark("substringEquality") { benchmark in
435443
blackHole(manyAttributesSubstring == manyAttributes2Substring)

Sources/FoundationEssentials/AttributedString/AttributedString.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,10 @@ extension AttributedString {
150150
@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
151151
extension AttributedString { // Equatable
152152
public static func == (lhs: Self, rhs: Self) -> Bool {
153-
AttributedString.Guts.characterwiseIsEqual(lhs._guts, to: rhs._guts)
153+
if lhs._guts === rhs._guts {
154+
return true
155+
}
156+
return AttributedString.Guts.characterwiseIsEqual(lhs._guts, to: rhs._guts)
154157
}
155158
}
156159

0 commit comments

Comments
 (0)