Skip to content

Commit 54c8639

Browse files
authored
Merge pull request #33 from ole/fix-lastWhere
Fix last(where:) implementation
2 parents 55da517 + 39dfef5 commit 54c8639

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

Sources/SortedArray.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ extension SortedArray {
410410
///
411411
/// - Complexity: O(_log(n)_), where _n_ is the size of the array.
412412
public func last(where predicate: (Element) throws -> Bool) rethrows -> Element? {
413-
guard let index = try firstIndex(where: predicate) else { return nil }
413+
guard let index = try lastIndex(where: predicate) else { return nil }
414414
return self[index]
415415
}
416416
}

Tests/UnitTests/SortedArrayTests.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,12 @@ class SortedArrayTests: XCTestCase {
242242
XCTAssertEqual(index, 2)
243243
}
244244

245+
func testFirstWhereFindsFirstMatchingElement() {
246+
let sut = SortedArray(unsorted: [4, 3, 2, 1])
247+
let last = sut.first(where: { $0 >= 2 })
248+
XCTAssertEqual(last, 2)
249+
}
250+
245251
func testLastIndexOfFindsElementInMiddle() {
246252
let sut = SortedArray(unsorted: ["a","z","r","k"])
247253
let index = sut.lastIndex(of: "k")
@@ -350,6 +356,12 @@ class SortedArrayTests: XCTestCase {
350356
XCTAssertEqual(index, 9)
351357
}
352358

359+
func testLastWhereFindsLastMatchingElement() {
360+
let sut = SortedArray(unsorted: [4, 3, 2, 1])
361+
let last = sut.last(where: { $0 <= 3 })
362+
XCTAssertEqual(last, 3)
363+
}
364+
353365
func testsContains() {
354366
let sut = SortedArray(unsorted: "Lorem ipsum")
355367
XCTAssertTrue(sut.contains(" "))
@@ -532,6 +544,7 @@ extension SortedArrayTests {
532544
("testFirstIndexWhereFindsFirstIndexOfDuplicateElements3", testFirstIndexWhereFindsFirstIndexOfDuplicateElements3),
533545
("testFirstIndexWhereFindsFirstIndexOfDuplicateElements4", testFirstIndexWhereFindsFirstIndexOfDuplicateElements4),
534546
("testFirstIndexWhereFindsFirstIndexOfDuplicateElements5", testFirstIndexWhereFindsFirstIndexOfDuplicateElements5),
547+
("testFirstWhereFindsFirstMatchingElement", testFirstWhereFindsFirstMatchingElement),
535548
("testLastIndexOfFindsElementInMiddle", testLastIndexOfFindsElementInMiddle),
536549
("testLastIndexOfFindsFirstElement", testLastIndexOfFindsFirstElement),
537550
("testLastIndexOfFindsLastElement", testLastIndexOfFindsLastElement),
@@ -550,6 +563,7 @@ extension SortedArrayTests {
550563
("testLastIndexWhereFindsLastIndexOfDuplicateElements1", testLastIndexWhereFindsLastIndexOfDuplicateElements1),
551564
("testLastIndexWhereFindsLastIndexOfDuplicateElements2", testLastIndexWhereFindsLastIndexOfDuplicateElements2),
552565
("testLastIndexWhereFindsLastIndexOfDuplicateElements3", testLastIndexWhereFindsLastIndexOfDuplicateElements3),
566+
("testLastWhereFindsLastMatchingElement", testLastWhereFindsLastMatchingElement),
553567
("testsContains", testsContains),
554568
("testMin", testMin),
555569
("testMax", testMax),
@@ -575,3 +589,15 @@ extension SortedArrayTests {
575589
]
576590
}
577591
}
592+
593+
struct Pair<A, B> {
594+
let first: A
595+
let second: B
596+
597+
init(_ first: A, _ second: B) {
598+
self.first = first
599+
self.second = second
600+
}
601+
}
602+
603+
extension Pair: Equatable where A: Equatable, B: Equatable {}

0 commit comments

Comments
 (0)