Skip to content

Commit f3a04ab

Browse files
committed
Add tests for async with do!
1 parent 8b4b2f5 commit f3a04ab

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

src/FSharp.Control.TaskSeq.Test/TaskSeq.Do.Tests.fs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ let ``CE taskSeq: use 'do!' with a non-generic valuetask`` () =
4141
let ``CE taskSeq: use 'do!' with a non-generic task`` () =
4242
let mutable value = 0
4343

44-
taskSeq { do! (task { do value <- value + 1 }) |> Task.ignore }
44+
taskSeq { do! task { do value <- value + 1 } |> Task.ignore }
4545
|> verifyEmpty
4646
|> Task.map (fun _ -> value |> should equal 1)
4747

@@ -56,3 +56,47 @@ let ``CE taskSeq: use 'do!' with a task-delay`` () =
5656
}
5757
|> verifyEmpty
5858
|> Task.map (fun _ -> value |> should equal 2)
59+
60+
[<Fact>]
61+
let ``CE taskSeq: use 'do!' with Async`` () =
62+
let mutable value = 0
63+
64+
taskSeq {
65+
do value <- value + 1
66+
do! Async.Sleep 50
67+
do value <- value + 1
68+
}
69+
|> verifyEmpty
70+
|> Task.map (fun _ -> value |> should equal 2)
71+
72+
[<Fact>]
73+
let ``CE taskSeq: use 'do!' with Async - mutables`` () =
74+
let mutable value = 0
75+
76+
taskSeq {
77+
do! async { value <- value + 1 }
78+
do! Async.Sleep 50
79+
do! async { value <- value + 1 }
80+
}
81+
|> verifyEmpty
82+
|> Task.map (fun _ -> value |> should equal 2)
83+
84+
[<Fact>]
85+
let ``CE taskSeq: use 'do!' with all kinds of overloads at once`` () =
86+
let mutable value = 0
87+
88+
// this test should be expanded in case any new overload is added
89+
// that is supported by `do!`, to ensure the high/low priority
90+
// overloads still work properly
91+
taskSeq {
92+
do! task { do value <- value + 1 } |> Task.ignore
93+
do! ValueTask <| task { do value <- value + 1 }
94+
do! ValueTask.ofTask (task { do value <- value + 1 })
95+
do! ValueTask<_>(()) // unit valuetask that completes immediately
96+
do! Task.fromResult (()) // unit Task that completes immediately
97+
do! Task.Delay 0
98+
do! Async.Sleep 0
99+
do! async { value <- value + 1 } // eq 4
100+
}
101+
|> verifyEmpty
102+
|> Task.map (fun _ -> value |> should equal 4)

0 commit comments

Comments
 (0)