Added zip tests
This commit is contained in:
parent
32ccaeea16
commit
31965ceb3d
202
src/test/kotlin/com/github/michaelbull/result/ZipTest.kt
Normal file
202
src/test/kotlin/com/github/michaelbull/result/ZipTest.kt
Normal file
@ -0,0 +1,202 @@
|
||||
package com.github.michaelbull.result
|
||||
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class ZipTest {
|
||||
|
||||
data class ZipData3(val a: String, val b: Int, val c: Boolean)
|
||||
data class ZipData4(val a: String, val b: Int, val c: Boolean, val d: Double)
|
||||
data class ZipData5(val a: String, val b: Int, val c: Boolean, val d: Double, val e: Char)
|
||||
|
||||
class Zip {
|
||||
|
||||
@Test
|
||||
fun returnsTransformedValueIfBothOk() {
|
||||
val result = zip(
|
||||
{ Ok(10) },
|
||||
{ Ok(20) },
|
||||
Int::plus
|
||||
)
|
||||
|
||||
result as Ok
|
||||
|
||||
assertEquals(
|
||||
expected = 30,
|
||||
actual = result.value
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsErrIfOneOfTwoErr() {
|
||||
val result = zip(
|
||||
{ Ok(10) },
|
||||
{ Ok(20).and { Err("hello") } },
|
||||
Int::plus
|
||||
)
|
||||
|
||||
result as Err
|
||||
|
||||
assertEquals(
|
||||
expected = "hello",
|
||||
actual = result.error
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsFirstErrIfBothErr() {
|
||||
val result = zip(
|
||||
{ Ok(10).and { Err("foo") } },
|
||||
{ Ok(20).and { Err("bar") } },
|
||||
Int::plus
|
||||
)
|
||||
|
||||
result as Err
|
||||
|
||||
assertEquals(
|
||||
expected = "foo",
|
||||
actual = result.error
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsTransformedValueIfThreeOk() {
|
||||
val result = zip(
|
||||
{ Ok("hello") },
|
||||
{ Ok(2) },
|
||||
{ Ok(false) },
|
||||
::ZipData3
|
||||
)
|
||||
|
||||
result as Ok
|
||||
|
||||
assertEquals(
|
||||
expected = ZipData3("hello", 2, false),
|
||||
actual = result.value
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsErrIfOneOfThreeErr() {
|
||||
val result = zip(
|
||||
{ Ok("foo") },
|
||||
{ Ok(1).and { Err("bar") } },
|
||||
{ Ok(false) },
|
||||
::ZipData3
|
||||
)
|
||||
|
||||
result as Err
|
||||
|
||||
assertEquals(
|
||||
expected = "bar",
|
||||
actual = result.error
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsFirstErrIfTwoOfThreeErr() {
|
||||
val result = zip(
|
||||
{ Ok("foo") },
|
||||
{ Ok(1).and { Err("bar") } },
|
||||
{ Ok(false).and { Err("baz") } },
|
||||
::ZipData3
|
||||
)
|
||||
|
||||
assertEquals(
|
||||
expected = "bar",
|
||||
actual = result.getError()
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsFirstErrIfAllThreeErr() {
|
||||
val result = zip(
|
||||
{ Ok("foo").and { Err(1) } },
|
||||
{ Ok(1).and { Err(2) } },
|
||||
{ Ok(false).and { Err(3) } },
|
||||
::ZipData3
|
||||
)
|
||||
|
||||
result as Err
|
||||
|
||||
assertEquals(
|
||||
expected = 1,
|
||||
actual = result.error
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsTransformedValueIfFourOk() {
|
||||
val result = zip(
|
||||
{ Ok("hello") },
|
||||
{ Ok(2) },
|
||||
{ Ok(false) },
|
||||
{ Ok(1.5) },
|
||||
::ZipData4
|
||||
)
|
||||
|
||||
result as Ok
|
||||
|
||||
assertEquals(
|
||||
expected = ZipData4("hello", 2, false, 1.5),
|
||||
actual = result.value
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsFirstErrIfSomeOfFourErr() {
|
||||
val result = zip(
|
||||
{ Ok("hello") },
|
||||
{ Ok(2).and { Err(1) } },
|
||||
{ Ok(false) },
|
||||
{ Ok(1.5).and { Err(2) } },
|
||||
::ZipData4
|
||||
)
|
||||
|
||||
result as Err
|
||||
|
||||
assertEquals(
|
||||
expected = 1,
|
||||
actual = result.error
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsTransformedValueIfFiveOk() {
|
||||
val result = zip(
|
||||
{ Ok("hello") },
|
||||
{ Ok(2) },
|
||||
{ Ok(false) },
|
||||
{ Ok(1.5) },
|
||||
{ Ok('a') },
|
||||
::ZipData5
|
||||
)
|
||||
|
||||
result as Ok
|
||||
|
||||
assertEquals(
|
||||
expected = ZipData5("hello", 2, false, 1.5, 'a'),
|
||||
actual = result.value
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun returnsFirstErrIfSomeOfFiveErr() {
|
||||
val result = zip(
|
||||
{ Ok("hello").and { Err(1) } },
|
||||
{ Ok(2) },
|
||||
{ Ok(false) },
|
||||
{ Ok(1.5) },
|
||||
{ Ok('a').and { Err(2) } },
|
||||
::ZipData5
|
||||
)
|
||||
|
||||
result as Err
|
||||
|
||||
assertEquals(
|
||||
expected = 1,
|
||||
actual = result.error
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user