From ba36f1efc500de5591fb74cc986e25d9891ec37d Mon Sep 17 00:00:00 2001 From: Rick van Voorden Date: Wed, 9 Jul 2025 14:00:31 -0700 Subject: [PATCH] attributed string fast equality --- .../AttributedString/BenchmarkAttributedString.swift | 10 +++++++++- .../AttributedString/AttributedString.swift | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Benchmarks/Benchmarks/AttributedString/BenchmarkAttributedString.swift b/Benchmarks/Benchmarks/AttributedString/BenchmarkAttributedString.swift index d021f0eed..cfff5bc70 100644 --- a/Benchmarks/Benchmarks/AttributedString/BenchmarkAttributedString.swift +++ b/Benchmarks/Benchmarks/AttributedString/BenchmarkAttributedString.swift @@ -423,13 +423,21 @@ let benchmarks = { let manyAttributesSubstring = manyAttributesString[manyAttributesStringRange] let manyAttributes2Substring = manyAttributesString2[manyAttributesStringRange] + Benchmark("equalityShared") { benchmark in + blackHole(manyAttributesString == manyAttributesString) + } + Benchmark("equality") { benchmark in blackHole(manyAttributesString == manyAttributesString2) } - + Benchmark("equalityDifferingCharacters") { benchmark in blackHole(manyAttributesString == manyAttributesString3) } + + Benchmark("substringEqualityShared") { benchmark in + blackHole(manyAttributesSubstring == manyAttributesSubstring) + } Benchmark("substringEquality") { benchmark in blackHole(manyAttributesSubstring == manyAttributes2Substring) diff --git a/Sources/FoundationEssentials/AttributedString/AttributedString.swift b/Sources/FoundationEssentials/AttributedString/AttributedString.swift index 1f871c647..374e3aaa6 100644 --- a/Sources/FoundationEssentials/AttributedString/AttributedString.swift +++ b/Sources/FoundationEssentials/AttributedString/AttributedString.swift @@ -150,7 +150,10 @@ extension AttributedString { @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *) extension AttributedString { // Equatable public static func == (lhs: Self, rhs: Self) -> Bool { - AttributedString.Guts.characterwiseIsEqual(lhs._guts, to: rhs._guts) + if lhs._guts === rhs._guts { + return true + } + return AttributedString.Guts.characterwiseIsEqual(lhs._guts, to: rhs._guts) } }