Skip to content

Commit fa4d08a

Browse files
authored
Fix _customContainsEquatableElement implementation for Stride* types (#39903)
* Fix `_customContainsEquatableElement` implementation for `Stride*` types * Add tests for `Stride*.contains`
1 parent 52f7203 commit fa4d08a

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

stdlib/public/core/Stride.swift

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,10 @@ extension StrideTo: Sequence {
379379
public func _customContainsEquatableElement(
380380
_ element: Element
381381
) -> Bool? {
382-
if element < _start || _end <= element {
383-
return false
382+
if _stride < 0 {
383+
if element <= _end || _start < element { return false }
384+
} else {
385+
if element < _start || _end <= element { return false }
384386
}
385387
return nil
386388
}
@@ -592,8 +594,10 @@ extension StrideThrough: Sequence {
592594
public func _customContainsEquatableElement(
593595
_ element: Element
594596
) -> Bool? {
595-
if element < _start || _end < element {
596-
return false
597+
if _stride < 0 {
598+
if element < _end || _start < element { return false }
599+
} else {
600+
if element < _start || _end < element { return false }
597601
}
598602
return nil
599603
}

test/stdlib/Strideable.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,5 +255,25 @@ StrideTestSuite.test("StrideToIterator/past end/backward") {
255255
strideIteratorTest(stride(from: 3, to: 0, by: -1), nonNilResults: 3)
256256
}
257257

258+
StrideTestSuite.test("Contains") {
259+
expectTrue(stride(from: 1, through: 5, by: 1).contains(3))
260+
expectTrue(stride(from: 1, to: 5, by: 1).contains(3))
261+
expectTrue(stride(from: 1, through: 5, by: 1).contains(5))
262+
expectFalse(stride(from: 1, to: 5, by: 1).contains(5))
263+
expectFalse(stride(from: 1, through: 5, by: -1).contains(3))
264+
expectFalse(stride(from: 1, to: 5, by: -1).contains(3))
265+
expectFalse(stride(from: 1, through: 5, by: -1).contains(1))
266+
expectFalse(stride(from: 1, to: 5, by: -1).contains(1))
267+
268+
expectTrue(stride(from: 5, through: 1, by: -1).contains(3))
269+
expectTrue(stride(from: 5, to: 1, by: -1).contains(3))
270+
expectTrue(stride(from: 5, through: 1, by: -1).contains(1))
271+
expectFalse(stride(from: 5, to: 1, by: -1).contains(1))
272+
expectFalse(stride(from: 5, through: 1, by: 1).contains(3))
273+
expectFalse(stride(from: 5, to: 1, by: 1).contains(3))
274+
expectFalse(stride(from: 5, through: 1, by: 1).contains(5))
275+
expectFalse(stride(from: 5, to: 1, by: 1).contains(5))
276+
}
277+
258278
runAllTests()
259279

0 commit comments

Comments
 (0)