         XCTAssertEqual(result.moves, [List.MoveIndex(from: 3, to: 1), List.MoveIndex(from: 2, to: 3)])
     }
     
-    // TODO: (stan@trifia.com) test_whenObjectEqualityChanges_thatResultHasUpdates
+    func test_whenObjectEqualityChanges_thatResultHasUpdates() {
+        let o = [
+            TestObject(diffIdentifier: "0", value: 0),
+            TestObject(diffIdentifier: "1", value: 1),
+            TestObject(diffIdentifier: "2", value: 2),
+        ]
+        let n = [
+            TestObject(diffIdentifier: "0", value: 0),
+            TestObject(diffIdentifier: "1", value: 3), // value updated from 1 to 3
+            TestObject(diffIdentifier: "2", value: 2),
+        ]
+        let result = List.diffing(oldArray: o, newArray: n)
+        XCTAssertTrue(result.hasChanges)
+        XCTAssertEqual(result.updates, IndexSet(integer: 1))
+        XCTAssertEqual(result.changeCount, 1)
+    }
     
     func test_whenDiffingWordsFromPaper_thatInsertsMatchPaper() {
         // http://dl.acm.org/citation.cfm?id=359467&dl=ACM&coll=DL&CFID=529464736&CFTOKEN=43088172

        XCTAssertEqual(o.count + result.inserts.count - result.deletes.count, 4)
    }
    
    // test_whenDuplicateObjects_thatMovesAreUnique
    
    func test_whenMovingObjectShiftsOthers_thatMovesContainRequiredMoves() {
        let o = Array<Int>(arrayLiteral: 1, 2, 3, 4, 5, 6, 7)

        XCTAssertEqual(result.moves, [List.MoveIndex(from: 7, to: 4), List.MoveIndex(from: 5, to: 7)])
    }
    
    func test_whenMovingItems_withEqualityChanges_thatResultsHasMovesAndUpdates() {
        let o = [
            TestObject(diffIdentifier: "0", value: 0),
            TestObject(diffIdentifier: "1", value: 1),
            TestObject(diffIdentifier: "2", value: 2),
            ]
        let n = [
            TestObject(diffIdentifier: "2", value: 3),
            TestObject(diffIdentifier: "1", value: 1),
            TestObject(diffIdentifier: "0", value: 0),
            ]
        let result = List.diffing(oldArray: o, newArray: n)
        XCTAssertTrue(result.hasChanges)
        XCTAssertEqual(result.moves, [List.MoveIndex(from: 2, to: 0), List.MoveIndex(from: 0, to: 2)])
        XCTAssertEqual(result.updates, IndexSet(integer: 2))
        XCTAssertEqual(result.changeCount, 3)
    }
    
    func test_whenDiffingPointers_withObjectCopy_thatResultHasUpdate() {
        let o = [
            TestObjectRef(diffIdentifier: "0", value: 0),
            TestObjectRef(diffIdentifier: "1", value: 1),
            TestObjectRef(diffIdentifier: "2", value: 2),
            ]
        let n = [
            o[0],
            TestObjectRef(diffIdentifier: "1", value: 1), // new pointer
            o[2]
        ]
        let result = List.diffing(oldArray: o, newArray: n)
        XCTAssertTrue(result.hasChanges)
        XCTAssertEqual(result.updates, IndexSet(integer: 1))
        XCTAssertEqual(result.changeCount, 1)
    }
    
    func test_whenDiffingPointers_withSameObjects_thatResultHasNoChanges() {
        let o = [
            TestObjectRef(diffIdentifier: "0", value: 0),
            TestObjectRef(diffIdentifier: "1", value: 1),
            TestObjectRef(diffIdentifier: "2", value: 2),
            ]
        let n = o.map { $0 }
        let result = List.diffing(oldArray: o, newArray: n)
        XCTAssertFalse(result.hasChanges)
    }
    
    func test_whenDeletingObjects_withArrayOfEqualObjects_thatChangeCountMatches() {
        let o = Array<String>(arrayLiteral: "dog", "dog", "dog", "dog")
        let n = Array<String>(arrayLiteral: "dog", "dog")
