Skip to content

Commit 093510b

Browse files
matwoodstepango
authored andcommitted
Added Additional Singles Zip Helpers (ReactiveX#124)
* Added Additional Singles Zip Helpers Added 3->9 sources to match what is available starting here: https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/Single.java#L1113 * Added parameter order tests for Singles Helpers
1 parent 45c2b19 commit 093510b

File tree

2 files changed

+173
-2
lines changed

2 files changed

+173
-2
lines changed

src/main/kotlin/io/reactivex/rxkotlin/Singles.kt

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,69 @@ package io.reactivex.rxkotlin
33
import io.reactivex.Single
44
import io.reactivex.SingleSource
55
import io.reactivex.functions.BiFunction
6+
import io.reactivex.functions.Function3
7+
import io.reactivex.functions.Function4
8+
import io.reactivex.functions.Function5
9+
import io.reactivex.functions.Function6
10+
import io.reactivex.functions.Function7
11+
import io.reactivex.functions.Function8
12+
import io.reactivex.functions.Function9
613

714

815
object Singles {
916
inline fun <T, U, R> zip(s1: SingleSource<T>, s2: SingleSource<U>, crossinline zipper: (T, U) -> R): Single<R>
10-
= Single.zip(s1,s2, BiFunction { t, u -> zipper.invoke(t, u) })
17+
= Single.zip(s1, s2, BiFunction { t, u -> zipper.invoke(t, u) })
18+
19+
inline fun <T1, T2, T3, R>
20+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>, s3: SingleSource<T3>,
21+
crossinline zipper: (T1, T2, T3) -> R): Single<R>
22+
= Single.zip(s1, s2, s3, Function3 { t1, t2, t3 -> zipper.invoke(t1, t2, t3) })
23+
24+
inline fun <T1, T2, T3, T4, R>
25+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>,
26+
s3: SingleSource<T3>, s4: SingleSource<T4>,
27+
crossinline zipper: (T1, T2, T3, T4) -> R): Single<R>
28+
= Single.zip(s1, s2, s3, s4, Function4 { t1, t2, t3, t4 -> zipper.invoke(t1, t2, t3, t4) })
29+
30+
inline fun <T1, T2, T3, T4, T5, R>
31+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>,
32+
s3: SingleSource<T3>, s4: SingleSource<T4>,
33+
s5: SingleSource<T5>,
34+
crossinline zipper: (T1, T2, T3, T4, T5) -> R): Single<R>
35+
= Single.zip(s1, s2, s3, s4, s5, Function5 { t1, t2, t3, t4, t5 -> zipper.invoke(t1, t2, t3, t4, t5) })
36+
37+
inline fun <T1, T2, T3, T4, T5, T6, R>
38+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>,
39+
s3: SingleSource<T3>, s4: SingleSource<T4>,
40+
s5: SingleSource<T5>, s6: SingleSource<T6>,
41+
crossinline zipper: (T1, T2, T3, T4, T5, T6) -> R): Single<R>
42+
= Single.zip(s1, s2, s3, s4, s5, s6, Function6 { t1, t2, t3, t4, t5, t6 -> zipper.invoke(t1, t2, t3, t4, t5, t6) })
43+
44+
inline fun <T1, T2, T3, T4, T5, T6, T7, R>
45+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>,
46+
s3: SingleSource<T3>, s4: SingleSource<T4>,
47+
s5: SingleSource<T5>, s6: SingleSource<T6>,
48+
s7: SingleSource<T7>,
49+
crossinline zipper: (T1, T2, T3, T4, T5, T6, T7) -> R): Single<R>
50+
= Single.zip(s1, s2, s3, s4, s5, s6, s7, Function7 { t1, t2, t3, t4, t5, t6, t7 -> zipper.invoke(t1, t2, t3, t4, t5, t6, t7) })
51+
52+
inline fun <T1, T2, T3, T4, T5, T6, T7, T8, R>
53+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>,
54+
s3: SingleSource<T3>, s4: SingleSource<T4>,
55+
s5: SingleSource<T5>, s6: SingleSource<T6>,
56+
s7: SingleSource<T7>, s8: SingleSource<T8>,
57+
crossinline zipper: (T1, T2, T3, T4, T5, T6, T7, T8) -> R): Single<R>
58+
= Single.zip(s1, s2, s3, s4, s5, s6, s7, s8, Function8 { t1, t2, t3, t4, t5, t6, t7, t8 -> zipper.invoke(t1, t2, t3, t4, t5, t6, t7, t8) })
59+
60+
inline fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, R>
61+
zip(s1: SingleSource<T1>, s2: SingleSource<T2>,
62+
s3: SingleSource<T3>, s4: SingleSource<T4>,
63+
s5: SingleSource<T5>, s6: SingleSource<T6>,
64+
s7: SingleSource<T7>, s8: SingleSource<T8>,
65+
s9: SingleSource<T9>,
66+
crossinline zipper: (T1, T2, T3, T4, T5, T6, T7, T8, T9) -> R): Single<R>
67+
= Single.zip(s1, s2, s3, s4, s5, s6, s7, s8, s9, Function9 { t1, t2, t3, t4, t5, t6, t7, t8, t9 -> zipper.invoke(t1, t2, t3, t4, t5, t6, t7, t8, t9) })
1168
}
1269

1370
inline fun <T, U, R> Single<T>.zipWith(other: SingleSource<U>, crossinline zipper: (T, U) -> R): Single<R>
14-
= zipWith(other, BiFunction { t, u -> zipper.invoke(t, u) })
71+
= zipWith(other, BiFunction { t, u -> zipper.invoke(t, u) })
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package io.reactivex.rxkotlin
2+
3+
import io.reactivex.Single
4+
import io.reactivex.SingleSource
5+
import org.junit.Test
6+
7+
class SinglesTest : KotlinTests() {
8+
9+
@Test fun testParameterOrder() {
10+
Singles.zip(
11+
SingleSourceInt(1), SingleSourceInt(2),
12+
{one, two ->
13+
assert(one == 1, { -> "Should equal one"})
14+
assert(two == 2, { -> "Should equal two"})
15+
}).blockingGet()
16+
17+
Singles.zip(
18+
SingleSourceInt(1), SingleSourceInt(2),
19+
SingleSourceInt(3),
20+
{one, two, three ->
21+
assert(one == 1, { -> "Should equal one"})
22+
assert(two == 2, { -> "Should equal two"})
23+
assert(three == 3, { -> "Should equal three"})
24+
}).blockingGet()
25+
26+
Singles.zip(
27+
SingleSourceInt(1), SingleSourceInt(2),
28+
SingleSourceInt(3), SingleSourceInt(4),
29+
{one, two, three, four ->
30+
assert(one == 1, { -> "Should equal one"})
31+
assert(two == 2, { -> "Should equal two"})
32+
assert(three == 3, { -> "Should equal three"})
33+
assert(four == 4, { -> "Should equal four"})
34+
}).blockingGet()
35+
36+
Singles.zip(
37+
SingleSourceInt(1), SingleSourceInt(2),
38+
SingleSourceInt(3), SingleSourceInt(4),
39+
SingleSourceInt(5),
40+
{one, two, three, four, five ->
41+
assert(one == 1, { -> "Should equal one"})
42+
assert(two == 2, { -> "Should equal two"})
43+
assert(three == 3, { -> "Should equal three"})
44+
assert(four == 4, { -> "Should equal four"})
45+
assert(five == 5, { -> "Should equal five"})
46+
}).blockingGet()
47+
48+
Singles.zip(
49+
SingleSourceInt(1), SingleSourceInt(2),
50+
SingleSourceInt(3), SingleSourceInt(4),
51+
SingleSourceInt(5), SingleSourceInt(6),
52+
{one, two, three, four, five, six ->
53+
assert(one == 1, { -> "Should equal one"})
54+
assert(two == 2, { -> "Should equal two"})
55+
assert(three == 3, { -> "Should equal three"})
56+
assert(four == 4, { -> "Should equal four"})
57+
assert(five == 5, { -> "Should equal five"})
58+
assert(six == 6, { -> "Should equal six"})
59+
}).blockingGet()
60+
61+
Singles.zip(
62+
SingleSourceInt(1), SingleSourceInt(2),
63+
SingleSourceInt(3), SingleSourceInt(4),
64+
SingleSourceInt(5), SingleSourceInt(6),
65+
SingleSourceInt(7),
66+
{one, two, three, four, five, six, seven ->
67+
assert(one == 1, { -> "Should equal one"})
68+
assert(two == 2, { -> "Should equal two"})
69+
assert(three == 3, { -> "Should equal three"})
70+
assert(four == 4, { -> "Should equal four"})
71+
assert(five == 5, { -> "Should equal five"})
72+
assert(six == 6, { -> "Should equal six"})
73+
assert(seven == 7, { -> "Should equal seven"})
74+
}).blockingGet()
75+
76+
Singles.zip(
77+
SingleSourceInt(1), SingleSourceInt(2),
78+
SingleSourceInt(3), SingleSourceInt(4),
79+
SingleSourceInt(5), SingleSourceInt(6),
80+
SingleSourceInt(7), SingleSourceInt(8),
81+
{one, two, three, four, five, six, seven, eight ->
82+
assert(one == 1, { -> "Should equal one"})
83+
assert(two == 2, { -> "Should equal two"})
84+
assert(three == 3, { -> "Should equal three"})
85+
assert(four == 4, { -> "Should equal four"})
86+
assert(five == 5, { -> "Should equal five"})
87+
assert(six == 6, { -> "Should equal six"})
88+
assert(seven == 7, { -> "Should equal seven"})
89+
assert(eight == 8, { -> "Should equal eight"})
90+
}).blockingGet()
91+
92+
Singles.zip(
93+
SingleSourceInt(1), SingleSourceInt(2),
94+
SingleSourceInt(3), SingleSourceInt(4),
95+
SingleSourceInt(5), SingleSourceInt(6),
96+
SingleSourceInt(7), SingleSourceInt(8),
97+
SingleSourceInt(9),
98+
{one, two, three, four, five, six, seven, eight, nine ->
99+
assert(one == 1, { -> "Should equal one"})
100+
assert(two == 2, { -> "Should equal two"})
101+
assert(three == 3, { -> "Should equal three"})
102+
assert(four == 4, { -> "Should equal four"})
103+
assert(five == 5, { -> "Should equal five"})
104+
assert(six == 6, { -> "Should equal six"})
105+
assert(seven == 7, { -> "Should equal seven"})
106+
assert(eight == 8, { -> "Should equal eight"})
107+
assert(nine == 9, { -> "Should equal nine"})
108+
}).blockingGet()
109+
}
110+
}
111+
112+
fun SingleSourceInt(i: Int): SingleSource<Int> {
113+
return Single.create({ s -> s.onSuccess(i)})
114+
}

0 commit comments

Comments
 (0)