@@ -35,18 +35,23 @@ let EQ (a:AsyncSeq<'a>) (b:AsyncSeq<'a>) =
3535
3636type Assert with
3737 /// Determines equality of two async sequences by convering them to lists, ignoring side-effects.
38+ static member AreEqual ( expected : AsyncSeq < 'a >, actual : AsyncSeq < 'a >, message : string ) =
39+ Assert.AreEqual ( expected, actual, 2000 , exnEq=( fun _ _ -> true ), message= message)
40+ /// Determines equality of two async sequences by convering them to lists, ignoring side-effects.
3841 static member AreEqual ( expected : AsyncSeq < 'a >, actual : AsyncSeq < 'a >) =
39- Assert.AreEqual ( expected, actual, 1000 , exnEq=( fun _ _ -> true ))
42+ Assert.AreEqual ( expected, actual, 2000 , exnEq=( fun _ _ -> true ), message = null )
4043 /// Determines equality of two async sequences by convering them to lists, ignoring side-effects.
4144 static member AreEqual ( expected : AsyncSeq < 'a >, actual : AsyncSeq < 'a >, timeout ) =
42- Assert.AreEqual ( expected, actual, timeout= timeout, exnEq=( fun _ _ -> true ))
45+ Assert.AreEqual ( expected, actual, timeout= timeout, exnEq=( fun _ _ -> true ), message = null )
4346 /// Determines equality of two async sequences by convering them to lists, ignoring side-effects.
44- static member AreEqual ( expected : AsyncSeq < 'a >, actual : AsyncSeq < 'a >, timeout , exnEq : exn -> exn -> bool ) =
47+ static member AreEqual ( expected : AsyncSeq < 'a >, actual : AsyncSeq < 'a >, timeout , exnEq : exn -> exn -> bool , message : string ) =
4548 let exp = expected |> AsyncSeq.toListAsync |> Async.Catch
4649 let exp = Async.RunSynchronously ( exp, timeout)
4750 let act = actual |> AsyncSeq.toListAsync |> Async.Catch
4851 let act = Async.RunSynchronously( act, timeout)
49- let message = sprintf " expected=%A actual=%A " exp act
52+ let message =
53+ if message = null then sprintf " expected=%A actual=%A " exp act
54+ else sprintf " message=%s expected=%A actual=%A " message exp act
5055 match exp, act with
5156 | Choice1Of2 exp, Choice1Of2 act ->
5257 Assert.True(( exp = act), message)
@@ -1219,4 +1224,19 @@ let ``AsyncSeq.groupBy should propagate exception and terminate all groups``() =
12191224 asyncSeq { raise ( exn( " test" )) }
12201225 |> AsyncSeq.groupBy ( fun i -> i % 3 )
12211226 |> AsyncSeq.mapAsyncParallel ( snd >> AsyncSeq.toListAsync)
1222- Assert.AreEqual( expected, actual)
1227+ Assert.AreEqual( expected, actual)
1228+
1229+ [<Test>]
1230+ let ``AsyncSeq.combineLatest should behave like merge after initial`` () =
1231+ for n in 0 .. 20 do
1232+ for m in 0 .. 10 do
1233+ let ls1 = List.init n id
1234+ let ls2 = List.init m id
1235+ // expect each element to increase combined sum by 1
1236+ // expected count is sum of source counts minus 1 for first result
1237+ let expectedCount =
1238+ if n = 0 || m = 0 then 0
1239+ else max ( n + m - 1 ) 0
1240+ let expected = List.init expectedCount id |> AsyncSeq.ofSeq
1241+ let actual = AsyncSeq.combineLatest (+) ( AsyncSeq.ofSeq ls1) ( AsyncSeq.ofSeq ls2)
1242+ Assert.AreEqual( expected, actual, ( sprintf " n=%i m=%i " n m))
0 commit comments