Skip to content

Commit e077f67

Browse files
authored
Improve XCTAssertEqualSequences to log difference (#105)
1 parent ed38a2d commit e077f67

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

Tests/SwiftAlgorithmsTests/TestUtilities.swift

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ func XCTAssertEqualSequences<S1: Sequence, S2: Sequence>(
5252
_ message: @autoclosure () -> String = "",
5353
file: StaticString = #file, line: UInt = #line
5454
) rethrows where S1.Element: Equatable, S1.Element == S2.Element {
55-
try XCTAssert(expression1().elementsEqual(expression2()), message(), file: file, line: line)
55+
try XCTAssertEqualSequences(expression1(), expression2(), by: ==,
56+
message(), file: file, line: line)
5657
}
5758

5859
func XCTAssertEqualSequences<S1: Sequence, S2: Sequence>(
@@ -62,7 +63,31 @@ func XCTAssertEqualSequences<S1: Sequence, S2: Sequence>(
6263
_ message: @autoclosure () -> String = "",
6364
file: StaticString = #file, line: UInt = #line
6465
) rethrows where S1.Element == S2.Element {
65-
try XCTAssert(expression1().elementsEqual(expression2(), by: areEquivalent), message(), file: file, line: line)
66+
67+
func fail(_ reason: String) {
68+
let message = message()
69+
XCTFail(message.isEmpty ? reason : "\(message) - \(reason)",
70+
file: file, line: line)
71+
}
72+
73+
var iter1 = try expression1().makeIterator()
74+
var iter2 = try expression2().makeIterator()
75+
var idx = 0
76+
while true {
77+
switch (iter1.next(), iter2.next()) {
78+
case let (e1?, e2?) where areEquivalent(e1, e2):
79+
idx += 1
80+
continue
81+
case let (e1?, e2?):
82+
fail("element \(e1) on first sequence does not match element \(e2) on second sequence at position \(idx)")
83+
case (_?, nil):
84+
fail("second sequence shorter than first")
85+
case (nil, _?):
86+
fail("first sequence shorter than second")
87+
case (nil, nil): break
88+
}
89+
return
90+
}
6691
}
6792

6893
func XCTAssertLazySequence<S: LazySequenceProtocol>(_: S) {}

0 commit comments

Comments
 (0)