@@ -95,14 +95,33 @@ class RxScalaDemo extends JUnitSuite {
95
95
println((before ++ source).toBlockingObservable.toList)
96
96
}
97
97
98
- @ Test def mergeExample () {
98
+ @ Test def mergeTwoExample () {
99
99
val slowNumbers = Observable .interval(400 millis).take(5 ).map(" slow " + _)
100
100
val fastNumbers = Observable .interval(200 millis).take(10 ).map(" fast " + _)
101
101
val o = (slowNumbers merge fastNumbers)
102
102
o.subscribe(output(_))
103
103
waitFor(o)
104
104
}
105
105
106
+ def myInterval (period : Long ): Observable [String ] = {
107
+ Observable .interval(period.millis).map(n => s " Obs- $period emits $n" )
108
+ }
109
+
110
+ @ Test def mergeManyExample () {
111
+ val o = Observable .interval(500 millis).map(n => myInterval((n+ 1 )* 100 ))
112
+ val stopper = Observable .interval(5 seconds)
113
+ o.merge.takeUntil(stopper).toBlockingObservable.foreach(println(_))
114
+ }
115
+
116
+ @ Test def mergeSomeExample () {
117
+ // To merge some observables which are all known already:
118
+ Observable (
119
+ Observable .interval(200 millis),
120
+ Observable .interval(400 millis),
121
+ Observable .interval(800 millis)
122
+ ).merge.take(12 ).toBlockingObservable.foreach(println(_))
123
+ }
124
+
106
125
@ Test def rangeAndBufferExample () {
107
126
val o = Observable (1 to 18 )
108
127
o.buffer(5 ).subscribe((l : Seq [Int ]) => println(l.mkString(" [" , " , " , " ]" )))
@@ -178,6 +197,29 @@ class RxScalaDemo extends JUnitSuite {
178
197
assertEquals(List (0 , 1 , 2 , 3 ), t.toBlockingObservable.toList)
179
198
}
180
199
200
+ @ Test def timingTest () {
201
+ val firstOnly = false
202
+ val numbersByModulo3 = Observable .interval(1000 millis).take(9 ).groupBy(_ % 3 )
203
+
204
+ (for ((modulo, numbers) <- numbersByModulo3) yield {
205
+ println(" Observable for modulo" + modulo + " started" )
206
+
207
+ if (firstOnly) numbers.take(1 ) else numbers
208
+ }).merge.toBlockingObservable.foreach(println(_))
209
+ }
210
+
211
+ @ Test def timingTest1 () {
212
+ val numbersByModulo3 = Observable .interval(1000 millis).take(9 ).groupBy(_ % 3 )
213
+
214
+ val t0 = System .currentTimeMillis
215
+
216
+ (for ((modulo, numbers) <- numbersByModulo3) yield {
217
+ println(" Observable for modulo" + modulo + " started at t = " + (System .currentTimeMillis - t0))
218
+ numbers.take(1 ) // <- TODO very unexpected
219
+ // numbers
220
+ }).merge.toBlockingObservable.foreach(println(_))
221
+ }
222
+
181
223
@ Test def groupByExample () {
182
224
val medalsByCountry = Olympics .mountainBikeMedals.groupBy(medal => medal.country)
183
225
@@ -191,6 +233,13 @@ class RxScalaDemo extends JUnitSuite {
191
233
waitFor(firstMedalOfEachCountry)
192
234
}
193
235
236
+ @ Test def olympicsExample () {
237
+ val (go, medals) = Olympics .mountainBikeMedals.publish
238
+ medals.subscribe(println(_))
239
+ go()
240
+ waitFor(medals)
241
+ }
242
+
194
243
@ Test def exampleWithoutPublish () {
195
244
val unshared = Observable (1 to 4 )
196
245
unshared.subscribe(n => println(s " subscriber 1 gets $n" ))
@@ -260,7 +309,7 @@ class RxScalaDemo extends JUnitSuite {
260
309
assertEquals(8 , Observable (4 , 2 ).product.toBlockingObservable.single)
261
310
assertEquals(1 , Observable [Int ]().product.toBlockingObservable.single)
262
311
}
263
-
312
+
264
313
def output (s : String ): Unit = println(s)
265
314
266
315
// blocks until obs has completed
0 commit comments