Skip to content

Commit 0065c60

Browse files
author
Kyle Macomber
authored
Remove the inout on reductions(into:_:) to be consistent with the stdlib reduce(into:_) (#118)
1 parent 5cde0b1 commit 0065c60

File tree

3 files changed

+18
-36
lines changed

3 files changed

+18
-36
lines changed

Guides/Reductions.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@ let exclusiveRunningTotal = (1...5).reductions(0, +)
1212
print(exclusiveRunningTotal)
1313
// prints [0, 1, 3, 6, 10, 15]
1414

15-
var value = 0
16-
let intoRunningTotal = (1...5).reductions(into: &value, +=)
15+
let intoRunningTotal = (1...5).reductions(into: 0, +=)
1716
print(intoRunningTotal)
1817
// prints [0, 1, 3, 6, 10, 15]
19-
print(value)
20-
// prints 15
2118

2219
let inclusiveRunningTotal = (1...5).reductions(+)
2320
print(inclusiveRunningTotal)
@@ -38,7 +35,7 @@ extension LazySequenceProtocol {
3835
) -> ExclusiveReductions<Result, Self>
3936

4037
public func reductions<Result>(
41-
into initial: inout Result,
38+
into initial: Result,
4239
_ transform: @escaping (inout Result, Element) -> Void
4340
) -> ExclusiveReductions<Result, Self>
4441

@@ -57,7 +54,7 @@ extension Sequence {
5754
) rethrows -> [Result]
5855

5956
public func reductions<Result>(
60-
into initial: inout Result,
57+
into initial: Result,
6158
_ transform: (inout Result, Element) throws -> Void
6259
) rethrows -> [Result]
6360

Sources/Algorithms/Reductions.swift

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ extension LazySequenceProtocol {
3939
_ initial: Result,
4040
_ transform: @escaping (Result, Element) -> Result
4141
) -> ExclusiveReductions<Result, Self> {
42-
43-
var result = initial
44-
return reductions(into: &result) { result, element in
42+
return reductions(into: initial) { result, element in
4543
result = transform(result, element)
4644
}
4745
}
@@ -69,7 +67,7 @@ extension LazySequenceProtocol {
6967
/// - Complexity: O(1)
7068
@inlinable
7169
public func reductions<Result>(
72-
into initial: inout Result,
70+
into initial: Result,
7371
_ transform: @escaping (inout Result, Element) -> Void
7472
) -> ExclusiveReductions<Result, Self> {
7573
ExclusiveReductions(base: self, initial: initial, transform: transform)
@@ -117,9 +115,7 @@ extension Sequence {
117115
_ initial: Result,
118116
_ transform: (Result, Element) throws -> Result
119117
) rethrows -> [Result] {
120-
121-
var result = initial
122-
return try reductions(into: &result) { result, element in
118+
return try reductions(into: initial) { result, element in
123119
result = try transform(result, element)
124120
}
125121
}
@@ -160,14 +156,15 @@ extension Sequence {
160156
/// - Complexity: O(_n_), where _n_ is the length of the sequence.
161157
@inlinable
162158
public func reductions<Result>(
163-
into initial: inout Result,
159+
into initial: Result,
164160
_ transform: (inout Result, Element) throws -> Void
165161
) rethrows -> [Result] {
166162

167163
var output = [Result]()
168164
output.reserveCapacity(underestimatedCount + 1)
169165
output.append(initial)
170166

167+
var initial = initial
171168
for element in self {
172169
try transform(&initial, element)
173170
output.append(initial)
@@ -595,10 +592,10 @@ extension LazySequenceProtocol {
595592
@available(*, deprecated, message: "Use reductions(into:_:) instead.")
596593
@inlinable
597594
public func scan<Result>(
598-
into initial: inout Result,
595+
into initial: Result,
599596
_ transform: @escaping (inout Result, Element) -> Void
600597
) -> ExclusiveReductions<Result, Self> {
601-
reductions(into: &initial, transform)
598+
reductions(into: initial, transform)
602599
}
603600
}
604601

@@ -616,10 +613,10 @@ extension Sequence {
616613
@available(*, deprecated, message: "Use reductions(into:_:) instead.")
617614
@inlinable
618615
public func scan<Result>(
619-
into initial: inout Result,
616+
into initial: Result,
620617
_ transform: (inout Result, Element) throws -> Void
621618
) rethrows -> [Result] {
622-
try reductions(into: &initial, transform)
619+
try reductions(into: initial, transform)
623620
}
624621
}
625622

Tests/SwiftAlgorithmsTests/ReductionsTests.swift

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,11 @@ final class ReductionsTests: XCTestCase {
2727
XCTAssertEqualCollections([1].lazy.reductions(0, +), [0, 1])
2828
XCTAssertEqualCollections(EmptyCollection<Int>().lazy.reductions(0, +), [0])
2929

30-
var value = 0
31-
XCTAssertEqual([1, 2, 3, 4].lazy.reductions(into: &value, +=), [0, 1, 3, 6, 10])
32-
XCTAssertEqual(value, 10)
30+
XCTAssertEqual([1, 2, 3, 4].lazy.reductions(into: 0, +=), [0, 1, 3, 6, 10])
3331

34-
value = 0
35-
XCTAssertEqual([1].lazy.reductions(into: &value, +=), [0, 1])
36-
XCTAssertEqual(value, 1)
32+
XCTAssertEqual([1].lazy.reductions(into: 0, +=), [0, 1])
3733

38-
value = 0
39-
XCTAssertEqual(EmptyCollection<Int>().lazy.reductions(into: &value, +=), [0])
40-
XCTAssertEqual(value, 0)
34+
XCTAssertEqual(EmptyCollection<Int>().lazy.reductions(into: 0, +=), [0])
4135

4236
XCTAssertLazySequence((1...).prefix(1).lazy.reductions(0, +))
4337
XCTAssertLazySequence([1].lazy.reductions(0, +))
@@ -49,17 +43,11 @@ final class ReductionsTests: XCTestCase {
4943
XCTAssertEqual([1].reductions(0, +), [0, 1])
5044
XCTAssertEqual(EmptyCollection<Int>().reductions(0, +), [0])
5145

52-
var value = 0
53-
XCTAssertEqual([1, 2, 3, 4].reductions(into: &value, +=), [0, 1, 3, 6, 10])
54-
XCTAssertEqual(value, 10)
46+
XCTAssertEqual([1, 2, 3, 4].reductions(into: 0, +=), [0, 1, 3, 6, 10])
5547

56-
value = 0
57-
XCTAssertEqual([1].reductions(into: &value, +=), [0, 1])
58-
XCTAssertEqual(value, 1)
48+
XCTAssertEqual([1].reductions(into: 0, +=), [0, 1])
5949

60-
value = 0
61-
XCTAssertEqual(EmptyCollection<Int>().reductions(into: &value, +=), [0])
62-
XCTAssertEqual(value, 0)
50+
XCTAssertEqual(EmptyCollection<Int>().reductions(into: 0, +=), [0])
6351

6452
XCTAssertNoThrow(try [].reductions(0) { _, _ in throw TestError() })
6553
XCTAssertThrowsError(try [1].reductions(0) { _, _ in throw TestError() })

0 commit comments

Comments
 (0)