Skip to content

Commit 5725984

Browse files
authored
Merge pull request #28462 from dtorres/patch-1
[LazyFilterSequence] Preserve order of predicates
2 parents 90eb007 + 702fd84 commit 5725984

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

stdlib/public/core/Filter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ extension LazyFilterSequence {
339339
_ isIncluded: @escaping (Element) -> Bool
340340
) -> LazyFilterSequence<Base> {
341341
return LazyFilterSequence(_base: _base) {
342-
isIncluded($0) && self._predicate($0)
342+
self._predicate($0) && isIncluded($0)
343343
}
344344
}
345345
}

test/stdlib/Filter.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,26 @@ FilterTests.test("single-count") {
7373
expectEqual(30, count)
7474
}
7575

76+
FilterTests.test("chained filter order") {
77+
let array = [1]
78+
79+
let lazyFilter = array.lazy
80+
.filter { _ in false }
81+
.filter { _ in
82+
expectUnreachable("Executed second filter before first")
83+
return true
84+
}
85+
let lazyResult = Array(lazyFilter)
86+
87+
let result = array
88+
.filter { _ in false }
89+
.filter { _ in
90+
expectUnreachable("Executed second filter before first")
91+
return true
92+
}
93+
94+
expectEqual(lazyResult.count, 0)
95+
expectEqual(result.count, 0)
96+
}
97+
7698
runAllTests()

0 commit comments

Comments
 (0)