Skip to content

Commit cd6f5ef

Browse files
committed
Realistically test behaviour of mergePreferred
1 parent f155c51 commit cd6f5ef

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

Diff for: core/shared/src/test/scala/fs2/StreamMergeSuite.scala

+23-8
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,29 @@ class StreamMergeSuite extends Fs2Suite {
243243
}
244244
}
245245

246-
test("mergePreferred prefers") {
247-
forAllF { (leftStream: Stream[Pure, Int], rightStream: Stream[Pure, Int]) =>
248-
val leftTagged = leftStream.covary[IO]
249-
val rightTagged = rightStream.covary[IO].delayBy(10.milli)
250-
leftTagged
251-
.mergePreferred(rightTagged)
252-
.assertEmitsSameAs(leftStream ++ rightStream)
253-
}
246+
test("mergePreferred prefers this over that") {
247+
248+
val units = Stream.unit.covary[IO].repeat
249+
val left = units.map(Left(_))
250+
val right = units.map(Right(_))
251+
252+
val stream = left.mergePreferred(right)
253+
254+
stream
255+
.take(10000)
256+
.fold((0L, 0L)) {
257+
case ((left, right), Left(_)) => (left + 1, right)
258+
case ((left, right), Right(_)) => (left, right + 1)
259+
}
260+
.compile
261+
.lastOrError
262+
.map { case (left, right) =>
263+
val relLeft = left.toDouble / (left + right).toDouble
264+
// Tolerate up to 2% elements of the non preferred stream.
265+
// Increase the value, if the test (ocassionally) reports false positives.
266+
val delta = 0.02d
267+
assertEqualsDouble(relLeft, 1.0d, delta)
268+
}
254269
}
255270

256271
test("mergePreferred fully consumes this") {

0 commit comments

Comments
 (0)