Skip to content
This repository was archived by the owner on Dec 5, 2022. It is now read-only.

Commit 6bca6bd

Browse files
authored
Merge pull request #28 from onmyway133/feature/comparison
Explicitly use id providing and comparing function
2 parents 67c1fca + 200c095 commit 6bca6bd

39 files changed

+1039
-368
lines changed

DeepDiff.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |s|
22
s.name = "DeepDiff"
33
s.summary = "Diff in Swift"
4-
s.version = "1.3.0"
4+
s.version = "2.0.0"
55
s.homepage = "https://github.com/onmyway133/DeepDiff"
66
s.license = 'MIT'
77
s.author = { "Khoa Pham" => "onmyway133@gmail.com" }

DeepDiff.xcodeproj/project.pbxproj

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,22 @@
2121
D23849221FA86DEF00316A21 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23849211FA86DEF00316A21 /* PerformanceTests.swift */; };
2222
D23849231FA86DEF00316A21 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23849211FA86DEF00316A21 /* PerformanceTests.swift */; };
2323
D23849241FA86DEF00316A21 /* PerformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23849211FA86DEF00316A21 /* PerformanceTests.swift */; };
24-
D239E4171FAE2A420042E7BA /* City.swift in Sources */ = {isa = PBXBuildFile; fileRef = D239E4161FAE2A420042E7BA /* City.swift */; };
25-
D239E4181FAE2A420042E7BA /* City.swift in Sources */ = {isa = PBXBuildFile; fileRef = D239E4161FAE2A420042E7BA /* City.swift */; };
26-
D239E4191FAE2A420042E7BA /* City.swift in Sources */ = {isa = PBXBuildFile; fileRef = D239E4161FAE2A420042E7BA /* City.swift */; };
2724
D239E4201FAE34740042E7BA /* IndexPathConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D239E41F1FAE34740042E7BA /* IndexPathConverter.swift */; };
2825
D239E4211FAE34740042E7BA /* IndexPathConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D239E41F1FAE34740042E7BA /* IndexPathConverter.swift */; };
26+
D279F23F2220009C00E1C28E /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D279F23E2220009C00E1C28E /* DiffAware.swift */; };
27+
D279F2402220009C00E1C28E /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D279F23E2220009C00E1C28E /* DiffAware.swift */; };
28+
D279F2412220009C00E1C28E /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D279F23E2220009C00E1C28E /* DiffAware.swift */; };
29+
D279F2422220009C00E1C28E /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D279F23E2220009C00E1C28E /* DiffAware.swift */; };
2930
D284B1051F79038B00D94AF3 /* DeepDiff_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D284B0FC1F79038B00D94AF3 /* DeepDiff_tvOS.framework */; };
3031
D284B1381F7906DB00D94AF3 /* Info-iOS-Tests.plist in Resources */ = {isa = PBXBuildFile; fileRef = D284B12F1F7906DA00D94AF3 /* Info-iOS-Tests.plist */; };
3132
D284B1391F7906DB00D94AF3 /* Info-tvOS-Tests.plist in Resources */ = {isa = PBXBuildFile; fileRef = D284B1301F7906DA00D94AF3 /* Info-tvOS-Tests.plist */; };
3233
D284B13B1F7906DB00D94AF3 /* Info-macOS-Tests.plist in Resources */ = {isa = PBXBuildFile; fileRef = D284B1331F7906DA00D94AF3 /* Info-macOS-Tests.plist */; };
3334
D288B6421FA77CB100BBDC5F /* WagnerFischerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D288B6411FA77CB100BBDC5F /* WagnerFischerTests.swift */; };
3435
D288B6431FA77CB100BBDC5F /* WagnerFischerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D288B6411FA77CB100BBDC5F /* WagnerFischerTests.swift */; };
3536
D288B6441FA77CB100BBDC5F /* WagnerFischerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D288B6411FA77CB100BBDC5F /* WagnerFischerTests.swift */; };
36-
D29C691E1FFCD8790028DE14 /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C691D1FFCD8790028DE14 /* DiffAware.swift */; };
37-
D29C691F1FFCD8790028DE14 /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C691D1FFCD8790028DE14 /* DiffAware.swift */; };
38-
D29C69201FFCD8790028DE14 /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C691D1FFCD8790028DE14 /* DiffAware.swift */; };
39-
D29C69211FFCD8790028DE14 /* DiffAware.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C691D1FFCD8790028DE14 /* DiffAware.swift */; };
4037
D29C69231FFCDBFA0028DE14 /* HeckelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C69221FFCDBFA0028DE14 /* HeckelTests.swift */; };
4138
D29C69241FFCDBFA0028DE14 /* HeckelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C69221FFCDBFA0028DE14 /* HeckelTests.swift */; };
4239
D29C69251FFCDBFA0028DE14 /* HeckelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29C69221FFCDBFA0028DE14 /* HeckelTests.swift */; };
43-
D2A6CAFC20CEC0D1009E9C5D /* Car.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A6CAFB20CEC0D1009E9C5D /* Car.swift */; };
44-
D2A6CAFD20CEC0D1009E9C5D /* Car.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A6CAFB20CEC0D1009E9C5D /* Car.swift */; };
45-
D2A6CAFE20CEC0D1009E9C5D /* Car.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A6CAFB20CEC0D1009E9C5D /* Car.swift */; };
4640
D2A813671FAB731600A94BDE /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A813661FAB731600A94BDE /* Array+Extensions.swift */; };
4741
D2A813681FAB731600A94BDE /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A813661FAB731600A94BDE /* Array+Extensions.swift */; };
4842
D2A813691FAB731600A94BDE /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A813661FAB731600A94BDE /* Array+Extensions.swift */; };
@@ -96,8 +90,8 @@
9690
D21E6E2F1FFBC1EF0048AF75 /* Heckel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Heckel.swift; sourceTree = "<group>"; };
9791
D238491D1FA86AFC00316A21 /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
9892
D23849211FA86DEF00316A21 /* PerformanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PerformanceTests.swift; sourceTree = "<group>"; };
99-
D239E4161FAE2A420042E7BA /* City.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = City.swift; sourceTree = "<group>"; };
10093
D239E41F1FAE34740042E7BA /* IndexPathConverter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IndexPathConverter.swift; sourceTree = "<group>"; };
94+
D279F23E2220009C00E1C28E /* DiffAware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffAware.swift; sourceTree = "<group>"; };
10195
D284B0FC1F79038B00D94AF3 /* DeepDiff_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DeepDiff_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
10296
D284B1041F79038B00D94AF3 /* DeepDiff-tvOS-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "DeepDiff-tvOS-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
10397
D284B1181F79039F00D94AF3 /* DeepDiff_watchOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DeepDiff_watchOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -109,9 +103,7 @@
109103
D284B1421F79081F00D94AF3 /* Info-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-tvOS.plist"; sourceTree = "<group>"; };
110104
D284B1431F79081F00D94AF3 /* Info-watchOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-watchOS.plist"; sourceTree = "<group>"; };
111105
D288B6411FA77CB100BBDC5F /* WagnerFischerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WagnerFischerTests.swift; sourceTree = "<group>"; };
112-
D29C691D1FFCD8790028DE14 /* DiffAware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiffAware.swift; sourceTree = "<group>"; };
113106
D29C69221FFCDBFA0028DE14 /* HeckelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeckelTests.swift; sourceTree = "<group>"; };
114-
D2A6CAFB20CEC0D1009E9C5D /* Car.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Car.swift; sourceTree = "<group>"; };
115107
D2A813661FAB731600A94BDE /* Array+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+Extensions.swift"; sourceTree = "<group>"; };
116108
D2B318F81FA8CCFC00A0B637 /* DeepDiff.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepDiff.swift; sourceTree = "<group>"; };
117109
D2B318F91FA8CCFC00A0B637 /* MoveReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoveReducer.swift; sourceTree = "<group>"; };
@@ -187,7 +179,6 @@
187179
children = (
188180
D21E6E2A1FFBC1E20048AF75 /* WagnerFischer.swift */,
189181
D21E6E2F1FFBC1EF0048AF75 /* Heckel.swift */,
190-
D29C691D1FFCD8790028DE14 /* DiffAware.swift */,
191182
);
192183
path = Algorithms;
193184
sourceTree = "<group>";
@@ -211,6 +202,7 @@
211202
D2B318F91FA8CCFC00A0B637 /* MoveReducer.swift */,
212203
D2B318FA1FA8CCFC00A0B637 /* Change.swift */,
213204
D2A813661FAB731600A94BDE /* Array+Extensions.swift */,
205+
D279F23E2220009C00E1C28E /* DiffAware.swift */,
214206
);
215207
path = Shared;
216208
sourceTree = "<group>";
@@ -270,8 +262,6 @@
270262
D288B6411FA77CB100BBDC5F /* WagnerFischerTests.swift */,
271263
D238491D1FA86AFC00316A21 /* User.swift */,
272264
D23849211FA86DEF00316A21 /* PerformanceTests.swift */,
273-
D239E4161FAE2A420042E7BA /* City.swift */,
274-
D2A6CAFB20CEC0D1009E9C5D /* Car.swift */,
275265
);
276266
path = DeepDiffTests;
277267
sourceTree = "<group>";
@@ -563,7 +553,7 @@
563553
D239E4211FAE34740042E7BA /* IndexPathConverter.swift in Sources */,
564554
D2B3190A1FA8CD1400A0B637 /* Change.swift in Sources */,
565555
D21E6E321FFBC1EF0048AF75 /* Heckel.swift in Sources */,
566-
D29C69201FFCD8790028DE14 /* DiffAware.swift in Sources */,
556+
D279F2412220009C00E1C28E /* DiffAware.swift in Sources */,
567557
D2B319111FA8CD2200A0B637 /* UICollectionView+Extensions.swift in Sources */,
568558
D2A813691FAB731600A94BDE /* Array+Extensions.swift in Sources */,
569559
D2B319091FA8CD1400A0B637 /* MoveReducer.swift in Sources */,
@@ -579,9 +569,7 @@
579569
files = (
580570
D288B6441FA77CB100BBDC5F /* WagnerFischerTests.swift in Sources */,
581571
D29C69251FFCDBFA0028DE14 /* HeckelTests.swift in Sources */,
582-
D2A6CAFE20CEC0D1009E9C5D /* Car.swift in Sources */,
583572
D23849201FA86AFC00316A21 /* User.swift in Sources */,
584-
D239E4191FAE2A420042E7BA /* City.swift in Sources */,
585573
D23849241FA86DEF00316A21 /* PerformanceTests.swift in Sources */,
586574
);
587575
runOnlyForDeploymentPostprocessing = 0;
@@ -593,7 +581,7 @@
593581
D2B3190C1FA8CD1400A0B637 /* DeepDiff.swift in Sources */,
594582
D2B3190E1FA8CD1400A0B637 /* Change.swift in Sources */,
595583
D2B3190D1FA8CD1400A0B637 /* MoveReducer.swift in Sources */,
596-
D29C69211FFCD8790028DE14 /* DiffAware.swift in Sources */,
584+
D279F2422220009C00E1C28E /* DiffAware.swift in Sources */,
597585
D21E6E2E1FFBC1E20048AF75 /* WagnerFischer.swift in Sources */,
598586
D2A8136A1FAB731600A94BDE /* Array+Extensions.swift in Sources */,
599587
D21E6E331FFBC1EF0048AF75 /* Heckel.swift in Sources */,
@@ -607,7 +595,7 @@
607595
D239E4201FAE34740042E7BA /* IndexPathConverter.swift in Sources */,
608596
D2B319021FA8CD1300A0B637 /* Change.swift in Sources */,
609597
D21E6E301FFBC1EF0048AF75 /* Heckel.swift in Sources */,
610-
D29C691E1FFCD8790028DE14 /* DiffAware.swift in Sources */,
598+
D279F23F2220009C00E1C28E /* DiffAware.swift in Sources */,
611599
D2B319101FA8CD2200A0B637 /* UICollectionView+Extensions.swift in Sources */,
612600
D2A813671FAB731600A94BDE /* Array+Extensions.swift in Sources */,
613601
D2B319011FA8CD1300A0B637 /* MoveReducer.swift in Sources */,
@@ -623,9 +611,7 @@
623611
files = (
624612
D288B6421FA77CB100BBDC5F /* WagnerFischerTests.swift in Sources */,
625613
D29C69231FFCDBFA0028DE14 /* HeckelTests.swift in Sources */,
626-
D2A6CAFC20CEC0D1009E9C5D /* Car.swift in Sources */,
627614
D238491E1FA86AFC00316A21 /* User.swift in Sources */,
628-
D239E4171FAE2A420042E7BA /* City.swift in Sources */,
629615
D23849221FA86DEF00316A21 /* PerformanceTests.swift in Sources */,
630616
);
631617
runOnlyForDeploymentPostprocessing = 0;
@@ -637,7 +623,7 @@
637623
D2B319041FA8CD1300A0B637 /* DeepDiff.swift in Sources */,
638624
D2B319061FA8CD1300A0B637 /* Change.swift in Sources */,
639625
D2B319051FA8CD1300A0B637 /* MoveReducer.swift in Sources */,
640-
D29C691F1FFCD8790028DE14 /* DiffAware.swift in Sources */,
626+
D279F2402220009C00E1C28E /* DiffAware.swift in Sources */,
641627
D21E6E2C1FFBC1E20048AF75 /* WagnerFischer.swift in Sources */,
642628
D2A813681FAB731600A94BDE /* Array+Extensions.swift in Sources */,
643629
D21E6E311FFBC1EF0048AF75 /* Heckel.swift in Sources */,
@@ -650,9 +636,7 @@
650636
files = (
651637
D288B6431FA77CB100BBDC5F /* WagnerFischerTests.swift in Sources */,
652638
D29C69241FFCDBFA0028DE14 /* HeckelTests.swift in Sources */,
653-
D2A6CAFD20CEC0D1009E9C5D /* Car.swift in Sources */,
654639
D238491F1FA86AFC00316A21 /* User.swift in Sources */,
655-
D239E4181FAE2A420042E7BA /* City.swift in Sources */,
656640
D23849231FA86DEF00316A21 /* PerformanceTests.swift in Sources */,
657641
);
658642
runOnlyForDeploymentPostprocessing = 0;

DeepDiffTests/Car.swift

Lines changed: 0 additions & 25 deletions
This file was deleted.

DeepDiffTests/City.swift

Lines changed: 0 additions & 22 deletions
This file was deleted.

DeepDiffTests/HeckelTests.swift

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,18 @@ class HeckelTests: XCTestCase {
6262

6363
func testReplace2() {
6464
let old = [
65-
Car(id: 1, name: "Volvo", travelledMiles: 10),
66-
Car(id: 2, name: "Tesla", travelledMiles: 20)
67-
]
65+
User(name: "a", age: 1),
66+
User(name: "b", age: 2),
67+
User(name: "c", age: 3),
68+
]
6869

6970
let new = [
70-
Car(id: 1, name: "Volvo", travelledMiles: 10),
71-
Car(id: 2, name: "Tesla", travelledMiles: 30)
72-
]
71+
User(name: "a", age: 1),
72+
User(name: "b", age: 4),
73+
User(name: "c", age: 3),
74+
]
7375

74-
let changes = diff(old: old, new: new)
76+
let changes = diffWF(old: old, new: new)
7577
XCTAssertEqual(changes.count, 1)
7678

7779
XCTAssertNotNil(changes[0].replace)
@@ -217,26 +219,6 @@ class HeckelTests: XCTestCase {
217219
XCTAssertNotNil(changes[2].insert)
218220
}
219221

220-
func testObjectReplace() {
221-
let old = [
222-
City(name: "New York"),
223-
City(name: "Berlin"),
224-
City(name: "London")
225-
]
226-
227-
let new = [
228-
City(name: "New York"),
229-
City(name: "Oslo"),
230-
City(name: "London"),
231-
]
232-
233-
let changes = diff(old: old, new: new)
234-
XCTAssertEqual(changes.count, 2)
235-
236-
XCTAssertNotNil(changes[0].delete)
237-
XCTAssertNotNil(changes[1].insert)
238-
}
239-
240222
func testMoveWithInsertDelete() {
241223
let old = Array("12345")
242224
let new = Array("15234")
@@ -330,4 +312,3 @@ class HeckelTests: XCTestCase {
330312
XCTAssertNotNil(changes[3].move)
331313
}
332314
}
333-

DeepDiffTests/PerformanceTests.swift

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// Created by Khoa Pham.
66
// Copyright © 2018 Khoa Pham. All rights reserved.
77
//
8-
98
import XCTest
109
import DeepDiff
1110

@@ -85,7 +84,6 @@ class PerformanceTests: XCTestCase {
8584
}
8685

8786
// MARK: - Helper
88-
8987
func _testCompareManyStrings() {
9088
let old = Array(0..<10000).map { _ in
9189
return UUID().uuidString
@@ -136,20 +134,20 @@ class PerformanceTests: XCTestCase {
136134
func generate(count: Int, removeRange: Range<Int>? = nil, addRange: Range<Int>? = nil)
137135
-> (old: Array<String>, new: Array<String>) {
138136

139-
let old = Array(repeating: UUID().uuidString, count: count)
140-
var new = old
137+
let old = Array(repeating: UUID().uuidString, count: count)
138+
var new = old
141139

142-
if let removeRange = removeRange {
143-
new.removeSubrange(removeRange)
144-
}
140+
if let removeRange = removeRange {
141+
new.removeSubrange(removeRange)
142+
}
145143

146-
if let addRange = addRange {
147-
new.insert(
148-
contentsOf: Array(repeating: UUID().uuidString, count: addRange.count),
149-
at: addRange.lowerBound
150-
)
151-
}
144+
if let addRange = addRange {
145+
new.insert(
146+
contentsOf: Array(repeating: UUID().uuidString, count: addRange.count),
147+
at: addRange.lowerBound
148+
)
149+
}
152150

153-
return (old: old, new: new)
151+
return (old: old, new: new)
154152
}
155153
}

DeepDiffTests/User.swift

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66
// Copyright © 2018 Khoa Pham. All rights reserved.
77
//
88

9-
import Foundation
9+
import DeepDiff
1010

11-
struct User: Hashable {
11+
struct User: Equatable {
1212
let name: String
1313
let age: Int
14+
}
1415

15-
var hashValue: Int {
16-
return name.hashValue & age.hashValue
16+
extension User: DiffAware {
17+
var diffId: Int {
18+
return name.hashValue ^ age.hashValue
1719
}
18-
}
1920

20-
func == (left: User, right: User) -> Bool {
21-
return left.name == right.name
22-
&& left.age == right.age
21+
static func compareContent(_ a: User, _ b: User) -> Bool {
22+
return a.name == b.name && a.age == b.age
23+
}
2324
}

0 commit comments

Comments
 (0)