Skip to content

Commit 03704eb

Browse files
rhirai-linemichaelbull
rhirai-line
authored andcommitted
Prevent zipOrAccumulate from executing lambdas twice
Closes #112
1 parent 144c58e commit 03704eb

File tree

2 files changed

+48
-2
lines changed
  • kotlin-result/src
    • commonMain/kotlin/com/github/michaelbull/result
    • commonTest/kotlin/com/github/michaelbull/result

2 files changed

+48
-2
lines changed

kotlin-result/src/commonMain/kotlin/com/github/michaelbull/result/Zip.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ public inline fun <T1, T2, E, V> zipOrAccumulate(
144144
val result2 = producer2()
145145

146146
val results = listOf(
147-
producer1(),
148-
producer2(),
147+
result1,
148+
result2,
149149
)
150150

151151
return if (results.allOk()) {

kotlin-result/src/commonTest/kotlin/com/github/michaelbull/result/ZipTest.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,52 @@ class ZipTest {
186186

187187
class ZipOrAccumulate {
188188

189+
@Test
190+
fun returnsTransformedValueIfAllOfTwoOk() {
191+
val result = zipOrAccumulate(
192+
{ Ok(10) },
193+
{ Ok(20) },
194+
Int::plus,
195+
)
196+
197+
assertEquals(
198+
expected = Ok(30),
199+
actual = result,
200+
)
201+
}
202+
203+
@Test
204+
fun returnsOneErrIfOneOfTwoErr() {
205+
val result = zipOrAccumulate(
206+
{ Ok(10) },
207+
{ produce(20, "hello") },
208+
Int::plus,
209+
)
210+
211+
val expectedErrors = listOf("hello")
212+
213+
assertEquals(
214+
expected = Err(expectedErrors),
215+
actual = result,
216+
)
217+
}
218+
219+
@Test
220+
fun returnsErrsIfAllOfTwoErr() {
221+
val result = zipOrAccumulate(
222+
{ produce(10, "foo") },
223+
{ produce(20, "bar") },
224+
Int::plus,
225+
)
226+
227+
val expectedErrors = listOf("foo", "bar")
228+
229+
assertEquals(
230+
expected = Err(expectedErrors),
231+
actual = result,
232+
)
233+
}
234+
189235
@Test
190236
fun returnsTransformedValueIfAllOk() {
191237
val result = zipOrAccumulate(

0 commit comments

Comments
 (0)