in MobiusTest/Source/DebugDiff.swift [30:54]
func dumpDiffFuzzy<T>(expected: [T], actual: [T], withUnmatchedActual: Bool) -> String where T: Equatable {
var actual = actual
let diffItem = { (item: T) -> [Difference] in
let closestResult = closestDiff(
for: item,
in: actual,
predicate: { $0.first?.isSame ?? false } // Only use diff if first line (typically case name) matches
)
if let diffList = closestResult.0,
let matchedCandidate = closestResult.1,
let matchedIndex = actual.firstIndex(of: matchedCandidate) {
actual.remove(at: matchedIndex)
return diffList
} else {
return [Difference.delete(dumpUnwrapped(item).lines)]
}
}
let expectedDifference = expected.flatMap(diffItem)
let unmatchedActualDifference = withUnmatchedActual ? actual.map { Difference.insert(dumpUnwrapped($0).lines) } : []
return (expectedDifference + unmatchedActualDifference).diffString
}