Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Version.props
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<Project>
<PropertyGroup>
<!-- updating this version will trigger a publish after merge to 'main' -->
<Version>0.3.0</Version>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>

<IsPackable>false</IsPackable>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>

<ItemGroup>
<Content Remove="C:\Users\Abel\.nuget\packages\fsharp.control.taskseq\0.3.0\contentFiles\any\netstandard2.1\release-notes.txt" />
</ItemGroup>

<ItemGroup>
<Compile Include="SmokeTests.fs" />
<Compile Include="Program.fs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="FSharp.Control.TaskSeq" Version="0.3.0" />
<PackageReference Include="FsUnit.xUnit" Version="5.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

</Project>
1 change: 1 addition & 0 deletions src/FSharp.Control.TaskSeq.SmokeTests/Program.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module Program = let [<EntryPoint>] main _ = 0
97 changes: 97 additions & 0 deletions src/FSharp.Control.TaskSeq.SmokeTests/SmokeTests.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
module Tests

open System
open System.Threading.Tasks
open Xunit
open FSharp.Control
open FsUnit.Xunit

//
// this file can be used to hand-test NuGet deploys
// esp. when there are changes in the surface area
//
// This project gets compiled in CI, but is not part
// of the structured test reports currently.
// However, a compile error will fail the CI pipeline.
//


type private MultiDispose(disposed: int ref) =
member _.Get1() = 1

interface IDisposable with
member _.Dispose() = disposed.Value <- 1

interface IAsyncDisposable with
member _.DisposeAsync() = ValueTask(task { do disposed.Value <- -1 })

[<Fact>]
let ``Use and execute a minimal taskSeq from nuget`` () =
taskSeq { yield 10 }
|> TaskSeq.toArray
|> fun x -> Assert.Equal<int array>(x, [| 10 |])

[<Fact>]
let ``Use taskSeq from nuget with multiple keywords v0.2.2`` () =
taskSeq {
do! task { do! Task.Delay 10 }
let! x = task { return 1 }
yield x
let! vt = ValueTask<int>(task { return 2 })
yield vt
yield 10
}
|> TaskSeq.toArray
|> fun x -> Assert.Equal<int array>(x, [| 1; 2; 10 |])

// from version 0.3.0:

[<Fact>]
let ``Use taskSeq from nuget with multiple keywords v0.3.0`` () =
taskSeq {
do! task { do! Task.Delay 10 }
do! Task.Delay 10 // only in 0.3
let! x = task { return 1 } :> Task // only in 0.3
yield 1
let! vt = ValueTask<int>(task { return 2 })
yield vt
let! vt = ValueTask(task { return 2 }) // only in 0.3
do! ValueTask(task { return 2 }) // only in 0.3
yield 3
yield 10
}
|> TaskSeq.toArray
|> fun x -> Assert.Equal<int array>(x, [| 1; 2; 3; 10 |])

[<Fact>]
let ``Use taskSeq when type implements IDisposable and IAsyncDisposable`` () =
let disposed = ref 0

let ts = taskSeq {
use! x = task { return new MultiDispose(disposed) } // Used to fail to compile (see #97, fixed in v0.3.0)
yield x.Get1()
}

ts
|> TaskSeq.length
|> Task.map (should equal 1)
|> Task.map (fun _ -> disposed.Value |> should equal -1) // must favor IAsyncDisposable, not IDisposable

[<Fact>]
let ``Use taskSeq as part of an F# task CE`` () = task {
let ts = taskSeq { yield! [ 0..99 ] }
let ra = ResizeArray()

// loop through a taskSeq, support added in v0.3.0
for v in ts do
ra.Add v

ra.ToArray() |> should equal [| 0..99 |]
}

[<Fact>]
let ``New surface area functions availability tests v0.3.0`` () = task {
let ts = TaskSeq.singleton 10 // added in v0.3.0
let! ls = TaskSeq.toListAsync ts
List.exactlyOne ls |> should equal 10
}
6 changes: 6 additions & 0 deletions src/FSharp.Control.TaskSeq.sln
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{B198D5
..\assets\taskseq-icon.png = ..\assets\taskseq-icon.png
EndProjectSection
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Control.TaskSeq.SmokeTests", "FSharp.Control.TaskSeq.SmokeTests\FSharp.Control.TaskSeq.SmokeTests.fsproj", "{784DAB92-C61A-4A00-890B-E6E3B1805473}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -48,6 +50,10 @@ Global
{06CA2C7E-04DA-4A85-BB8E-4D94BD67AEB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06CA2C7E-04DA-4A85-BB8E-4D94BD67AEB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06CA2C7E-04DA-4A85-BB8E-4D94BD67AEB3}.Release|Any CPU.Build.0 = Release|Any CPU
{784DAB92-C61A-4A00-890B-E6E3B1805473}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{784DAB92-C61A-4A00-890B-E6E3B1805473}.Debug|Any CPU.Build.0 = Debug|Any CPU
{784DAB92-C61A-4A00-890B-E6E3B1805473}.Release|Any CPU.ActiveCfg = Release|Any CPU
{784DAB92-C61A-4A00-890B-E6E3B1805473}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down