@@ -65,6 +65,34 @@ final class HelpersTests: XCTestCase {
65
65
XCTAssertEqual ( ( 150 ... 170 ) . map { $0 } . binarySearch ( predicate: predicate) , nil )
66
66
}
67
67
68
+ func testBinarySearchWithCGRect( ) {
69
+ let visibleRect = CGRect ( origin: . init( x: 0 , y: 100 ) , size: . init( width: 100 , height: 100 ) )
70
+ let predicate : ( CGRect ) -> ComparisonResult = { frame in
71
+ if frame. intersects ( visibleRect) {
72
+ return . orderedSame
73
+ } else if frame. minY >= visibleRect. maxY {
74
+ return . orderedDescending
75
+ } else if frame. maxX <= visibleRect. minY {
76
+ return . orderedAscending
77
+ }
78
+ XCTFail ( " Should not get here " )
79
+ return . orderedSame
80
+ }
81
+ XCTAssertEqual ( [ CGRect] ( ) . binarySearch ( predicate: predicate) , nil )
82
+ XCTAssertEqual ( ( 0 ... 5 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearch ( predicate: predicate) , 3 )
83
+ XCTAssertEqual ( ( - 1 ... 1 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearch ( predicate: predicate) , nil )
84
+ XCTAssertEqual ( ( 1 ... 1 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearch ( predicate: predicate) , nil )
85
+ XCTAssertEqual ( ( 4 ... 7 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearch ( predicate: predicate) , nil )
86
+ XCTAssertEqual ( ( 4 ... 4 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearch ( predicate: predicate) , nil )
87
+
88
+ XCTAssertEqual ( [ CGRect] ( ) . binarySearchRange ( predicate: predicate) , [ ] )
89
+ XCTAssertEqual ( ( 0 ... 5 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearchRange ( predicate: predicate) . count, 2 )
90
+ XCTAssertEqual ( ( - 1 ... 1 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearchRange ( predicate: predicate) . count, 0 )
91
+ XCTAssertEqual ( ( 1 ... 1 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearchRange ( predicate: predicate) . count, 0 )
92
+ XCTAssertEqual ( ( 4 ... 7 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearchRange ( predicate: predicate) . count, 0 )
93
+ XCTAssertEqual ( ( 4 ... 4 ) . map { CGRect ( origin: . init( x: 0 , y: $0 * 50 ) , size: . init( width: 100 , height: 50 ) ) } . binarySearchRange ( predicate: predicate) . count, 0 )
94
+ }
95
+
68
96
func testSearchInRange( ) {
69
97
let predicate : ( Int ) -> ComparisonResult = { integer in
70
98
if integer < 100 {
0 commit comments