@@ -52,7 +52,8 @@ func XCTAssertEqualSequences<S1: Sequence, S2: Sequence>(
52
52
_ message: @autoclosure ( ) -> String = " " ,
53
53
file: StaticString = #file, line: UInt = #line
54
54
) 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)
56
57
}
57
58
58
59
func XCTAssertEqualSequences< S1: Sequence , S2: Sequence > (
@@ -62,7 +63,31 @@ func XCTAssertEqualSequences<S1: Sequence, S2: Sequence>(
62
63
_ message: @autoclosure ( ) -> String = " " ,
63
64
file: StaticString = #file, line: UInt = #line
64
65
) 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
+ }
66
91
}
67
92
68
93
func XCTAssertLazySequence< S: LazySequenceProtocol > ( _: S ) { }
0 commit comments