diff --git a/Expecto.Tests/Tests.fs b/Expecto.Tests/Tests.fs index 07911e34..5246fce5 100644 --- a/Expecto.Tests/Tests.fs +++ b/Expecto.Tests/Tests.fs @@ -1450,6 +1450,22 @@ let taskTests = testTask "inner skip" { skiptest "skipped" } + testTask "can let! bind ValueTask" { + let expected = 5 + let valueTask = ValueTask.FromResult(expected) + let! actual = valueTask + Expect.equal expected actual "should be able to let! bind ValueTask" + } + testTask "can do! bind ValueTask" { + let valueTask = ValueTask.CompletedTask + do! valueTask + } + testTask "can let! bind Async" { + let expected = 5 + let asyncValue = async.Return(expected) + let! actual = asyncValue + Expect.equal expected actual "should be able to let! bind ValueTask" + } ] ] diff --git a/Expecto/Expecto.fs b/Expecto/Expecto.fs index be4fc76e..e200691f 100644 --- a/Expecto/Expecto.fs +++ b/Expecto/Expecto.fs @@ -243,6 +243,13 @@ module Tests = | Focused -> ftestCaseTask name a | Pending -> ptestCaseTask name a + [] + module TestTaskExtensions = + type TestTaskBuilder with + member inline __.Bind(p1:ValueTask<'a>, p2:'a->_) = task.Bind(p1, p2) + member inline __.Bind(p1:ValueTask, p2:unit->_) = task.Bind(p1, p2) + member inline __.Bind(p1:Async<'a>, p2:'a->_) = task.Bind(p1, p2) + /// Builds a task test case let inline testTask name = TestTaskBuilder (name, Normal)