8000 Add SortedArray.firstIndex(of:) (like the standard library) · ole/SortedArray@b39a811 · GitHub
[go: up one dir, main page]

Skip to content

Commit b39a811

Browse files
committed
Add SortedArray.firstIndex(of:) (like the standard library)
We follow the standard library and do _not_ deprecate index(of:) yet.
1 parent b6e3385 commit b39a811

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

Sources/SortedArray.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ extension SortedArray {
252252
/// Returns the first index where the specified value appears in the collection.
253253
///
254254
/// - Complexity: O(_log(n)_), where _n_ is the size of the array.
255-
public func index(of element: Element) -> Index? {
255+
public func firstIndex(of element: Element) -> Index? {
256256
var range: Range<Index> = startIndex ..< endIndex
257257
var match: Index? = nil
258258
while case let .found(m) = search(for: element, in: range) {
@@ -274,6 +274,14 @@ extension SortedArray {
274274
return match
275275
}
276276

277+
/// Returns the first index where the specified value appears in the collection.
278+
/// Old name for `firstIndex(of:)`.
279+
/// - Seealso: `firstIndex(of:)`
280+
@inlinable
281+
public func index(of element: Element) -> Index? {
282+
return firstIndex(of: element)
283+
}
284+
277285
/// Returns a Boolean value indicating whether the sequence contains the given element.
278286
///
279287
/// - Complexity: O(_log(n)_), where _n_ is the size of the array.

Tests/SortedArrayTests/SortedArrayTests.swift

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,68 +108,74 @@ class SortedArrayTests: XCTestCase {
108108

109109
func testIndexOfFindsElementInMiddle() {
110110
let sut = SortedArray(unsorted: ["a","z","r","k"])
111-
let index = sut.index(of: "k")
111+
let index = sut.firstIndex(of: "k")
112112
XCTAssertEqual(index, 1)
113113
}
114114

115115
func testIndexOfFindsFirstElement() {
116116
let sut = SortedArray(sorted: 1..<10)
117-
let index = sut.index(of: 1)
117+
let index = sut.firstIndex(of: 1)
118118
XCTAssertEqual(index, 0)
119119
}
120120

121121
func testIndexOfFindsLastElement() {
122122
let sut = SortedArray(sorted: 1..<10)
123-
let index = sut.index(of: 9)
123+
let index = sut.firstIndex(of: 9)
124124
XCTAssertEqual(index, 8)
125125
}
126126

127127
func testIndexOfReturnsNilWhenNotFound() {
128128
let sut = SortedArray(unsorted: "Hello World")
129-
let index = sut.index(of: "h")
129+
let index = sut.firstIndex(of: "h")
130130
XCTAssertNil(index)
131131
}
132132

133133
func testIndexOfReturnsNilForEmptyArray() {
134134
let sut = SortedArray<Int>()
135-
let index = sut.index(of: 1)
135+
let index = sut.firstIndex(of: 1)
136136
XCTAssertNil(index)
137137
}
138138

139139
func testIndexOfCanDealWithSingleElementArray() {
140140
let sut = SortedArray<Int>(unsorted: [5])
141-
let index = sut.index(of: 5)
141+
let index = sut.firstIndex(of: 5)
142142
XCTAssertEqual(index, 0)
143143
}
144144

145145
func testIndexOfFindsFirstIndexOfDuplicateElements1() {
146146
let sut = SortedArray(unsorted: [1,2,3,3,3,3,3,3,3,3,4,5])
147-
let index = sut.index(of: 3)
147+
let index = sut.firstIndex(of: 3)
148148
XCTAssertEqual(index, 2)
149149
}
150150

151151
func testIndexOfFindsFirstIndexOfDuplicateElements2() {
152152
let sut = SortedArray(unsorted: [1,4,4,4,4,4,4,4,4,3,2])
153-
let index = sut.index(of: 4)
153+
let index = sut.firstIndex(of: 4)
154154
XCTAssertEqual(index, 3)
155155
}
156156

157157
func testIndexOfFindsFirstIndexOfDuplicateElements3() {
158158
let sut = SortedArray(unsorted: String(repeating: "A", count: 10))
159-
let index = sut.index(of: "A")
159+
let index = sut.firstIndex(of: "A")
160160
XCTAssertEqual(index, 0)
161161
}
162162

163163
func testIndexOfFindsFirstIndexOfDuplicateElements4() {
164164
let sut = SortedArray<Character>(unsorted: Array(repeating: "a", count: 100_000))
165-
let index = sut.index(of: "a")
165+
let index = sut.firstIndex(of: "a")
166166
XCTAssertEqual(index, 0)
167167
}
168168

169169
func testIndexOfFindsFirstIndexOfDuplicateElements5() {
170170
let sourceArray = Array(repeating: 5, count: 100_000) + [1,2,6,7,8,9]
171171
let sut = SortedArray(unsorted: sourceArray)
172-
let index = sut.index(of: 5)
172+
let index = sut.firstIndex(of: 5)
173+
XCTAssertEqual(index, 2)
174+
}
175+
176+
func testIndexOfExistsAndIsAnAliasForFirstIndexOf() {
177+
let sut = SortedArray(unsorted: [1,2,3,3,3,3,3,3,3,3,4,5])
178+
let index = sut.index(of: 3)
173179
XCTAssertEqual(index, 2)
174180
}
175181

@@ -369,6 +375,7 @@ extension SortedArrayTests {
369375
("testIndexOfFindsFirstIndexOfDuplicateElements3", testIndexOfFindsFirstIndexOfDuplicateElements3),
370376
("testIndexOfFindsFirstIndexOfDuplicateElements4", testIndexOfFindsFirstIndexOfDuplicateElements4),
371377
("testIndexOfFindsFirstIndexOfDuplicateElements5", testIndexOfFindsFirstIndexOfDuplicateElements4),
378+
("testIndexOfExistsAndIsAnAliasForFirstIndexOf", testIndexOfExistsAndIsAnAliasForFirstIndexOf),
372379
("testLastIndexOfFindsElementInMiddle", testLastIndexOfFindsElementInMiddle),
373380
("testLastIndexOfFindsFirstElement", testLastIndexOfFindsFirstElement),
374381
("testLastIndexOfFindsLastElement", testLastIndexOfFindsLastElement),

0 commit comments

Comments
 (0)
0