diff --git a/paket.dependencies b/paket.dependencies index 02b7758..a8cd9bd 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -3,12 +3,13 @@ source http://nuget.org/api/v2 nuget FAKE nuget SourceLink.Fake nuget Nuget.CommandLine -nuget FSharp.Core ~> 3.1.2 +nuget FSharp.Core ~> 4.0.0.1 nuget Rx-Experimental ~> 2.2.5 nuget Rx-Main ~> 2.2.5 nuget Rx-PlatformServices ~> 2.2.5 nuget Rx-Testing ~> 2.2.5 nuget NUnit nuget NUnit.Runners +nuget FsCheck.NUnit nuget FSharp.Formatting nuget FSharp.Compiler.Service diff --git a/paket.lock b/paket.lock index 6f67970..2ca9162 100644 --- a/paket.lock +++ b/paket.lock @@ -1,15 +1,21 @@ NUGET - remote: http://nuget.org/api/v2 + remote: http://www.nuget.org/api/v2 specs: - FAKE (4.0.3) - FSharp.Compiler.Service (1.4.0.1) - FSharp.Core (3.1.2.5) + FAKE (4.12.2) + FsCheck (2.2.4) + FSharp.Core (>= 3.1.2.5) + FsCheck.Nunit (2.2.4) + FsCheck (>= 2.2.4) + NUnit (>= 2.6.4 < 2.7.0) + NUnit.Runners (>= 2.6.4 < 2.7.0) + FSharp.Compiler.Service (2.0.0.2) + FSharp.Core (4.0.0.1) FSharp.Formatting (2.10.0) FSharp.Compiler.Service (>= 0.0.87) FSharpVSPowerTools.Core (1.8.0) FSharpVSPowerTools.Core (1.8.0) FSharp.Compiler.Service (>= 0.0.87) - NuGet.CommandLine (2.8.6) + NuGet.CommandLine (3.3.0) NUnit (2.6.4) NUnit.Runners (2.6.4) Rx-Core (2.2.5) @@ -35,4 +41,4 @@ NUGET Rx-Main (>= 2.2.5) Rx-Testing (2.2.5) Rx-Main (>= 2.2.5) - SourceLink.Fake (1.0.0) + SourceLink.Fake (1.1.0) diff --git a/src/FSharp.Control.Reactive.fsproj b/src/FSharp.Control.Reactive.fsproj index 013011c..d3ef53f 100644 --- a/src/FSharp.Control.Reactive.fsproj +++ b/src/FSharp.Control.Reactive.fsproj @@ -55,79 +55,35 @@ + + True + - - - - ..\packages\FSharp.Core\lib\net20\FSharp.Core.dll - True - True - - - - - - - ..\packages\FSharp.Core\lib\portable-net45+netcore45\FSharp.Core.dll - True - True - - - - - - - ..\packages\FSharp.Core\lib\net40\FSharp.Core.dll - True - True - - - - - - - ..\packages\FSharp.Core\lib\portable-net45+sl5+netcore45\FSharp.Core.dll - True - True - - - - - - - ..\packages\FSharp.Core\lib\portable-net45+netcore45+wp8\FSharp.Core.dll - True - True - - - - + - - ..\packages\FSharp.Core\lib\portable-net45+netcore45+wpa81+wp8\FSharp.Core.dll + + ..\packages\Rx-Core\lib\windows8\System.Reactive.Core.dll True True - - - + - ..\packages\Rx-Core\lib\windows8\System.Reactive.Core.dll + ..\packages\Rx-Core\lib\net40\System.Reactive.Core.dll True True - + - ..\packages\Rx-Core\lib\net40\System.Reactive.Core.dll + ..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll True True @@ -160,10 +116,10 @@ - + - ..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll + ..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll True True @@ -187,15 +143,6 @@ - - - - ..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll - True - True - - - @@ -225,6 +172,15 @@ + + + + ..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + True + True + + + @@ -252,10 +208,10 @@ - + - ..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + ..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll True True @@ -279,15 +235,6 @@ - - - - ..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll - True - True - - - @@ -317,6 +264,15 @@ + + + + ..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + True + True + + + @@ -344,10 +300,10 @@ - + - ..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + ..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll True True @@ -371,15 +327,6 @@ - - - - ..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll - True - True - - - @@ -409,6 +356,15 @@ + + + + ..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + True + True + + + @@ -436,10 +392,10 @@ - + - ..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + ..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll True True @@ -463,15 +419,6 @@ - - - - ..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll - True - True - - - @@ -513,10 +460,10 @@ - + - ..\packages\Rx-Providers\lib\sl5\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\net45\System.Reactive.Providers.dll True True @@ -528,10 +475,10 @@ - + - ..\packages\Rx-Providers\lib\windowsphone71\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\sl5\System.Reactive.Providers.dll True True @@ -543,10 +490,10 @@ - + - ..\packages\Rx-Providers\lib\windowsphone8\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\windowsphone71\System.Reactive.Providers.dll True True @@ -558,10 +505,10 @@ - + - ..\packages\Rx-Providers\lib\net45\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\windowsphone8\System.Reactive.Providers.dll True True @@ -573,10 +520,10 @@ - + - ..\packages\Rx-Providers\lib\portable-win81+wpa81\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\portable-windows8+net45+wp8\System.Reactive.Providers.dll True True @@ -588,10 +535,10 @@ - + - ..\packages\Rx-Providers\lib\portable-net40+sl5+win8+wp8\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\portable-win81+wpa81\System.Reactive.Providers.dll True True @@ -603,10 +550,10 @@ - + - ..\packages\Rx-Providers\lib\portable-windows8+net45+wp8\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\portable-net40+sl5+win8+wp8\System.Reactive.Providers.dll True True diff --git a/src/FSharp.Control.Reactive/FSharp.Control.Reactive.fsproj b/src/FSharp.Control.Reactive/FSharp.Control.Reactive.fsproj index 7532de1..70a75b4 100644 --- a/src/FSharp.Control.Reactive/FSharp.Control.Reactive.fsproj +++ b/src/FSharp.Control.Reactive/FSharp.Control.Reactive.fsproj @@ -69,7 +69,16 @@ - + + + + ..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll + True + True + + + + ..\..\packages\FSharp.Core\lib\portable-net45+netcore45\FSharp.Core.dll @@ -78,10 +87,10 @@ - + - ..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll + ..\..\packages\FSharp.Core\lib\portable-net45+monoandroid10+monotouch10+xamarinios10\FSharp.Core.dll True True @@ -134,6 +143,15 @@ + + + + ..\..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll + True + True + + + @@ -161,10 +179,10 @@ - + - ..\..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll + ..\..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll True True @@ -188,15 +206,6 @@ - - - - ..\..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll - True - True - - - @@ -226,6 +235,15 @@ + + + + ..\..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + True + True + + + @@ -253,10 +271,10 @@ - + - ..\..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + ..\..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll True True @@ -280,15 +298,6 @@ - - - - ..\..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll - True - True - - - @@ -318,6 +327,15 @@ + + + + ..\..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + True + True + + + @@ -345,10 +363,10 @@ - + - ..\..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + ..\..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll True True @@ -372,15 +390,6 @@ - - - - ..\..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll - True - True - - - @@ -410,6 +419,15 @@ + + + + ..\..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + True + True + + + @@ -437,10 +455,10 @@ - + - ..\..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + ..\..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll True True @@ -464,15 +482,6 @@ - - - - ..\..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll - True - True - - - @@ -514,10 +523,10 @@ - + - ..\..\packages\Rx-Providers\lib\sl5\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\net45\System.Reactive.Providers.dll True True @@ -529,10 +538,10 @@ - + - ..\..\packages\Rx-Providers\lib\windowsphone71\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\sl5\System.Reactive.Providers.dll True True @@ -544,10 +553,10 @@ - + - ..\..\packages\Rx-Providers\lib\windowsphone8\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\windowsphone71\System.Reactive.Providers.dll True True @@ -559,10 +568,10 @@ - + - ..\..\packages\Rx-Providers\lib\net45\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\windowsphone8\System.Reactive.Providers.dll True True @@ -574,10 +583,10 @@ - + - ..\..\packages\Rx-Providers\lib\portable-win81+wpa81\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\portable-windows8+net45+wp8\System.Reactive.Providers.dll True True @@ -589,10 +598,10 @@ - + - ..\..\packages\Rx-Providers\lib\portable-net40+sl5+win8+wp8\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\portable-win81+wpa81\System.Reactive.Providers.dll True True @@ -604,10 +613,10 @@ - + - ..\..\packages\Rx-Providers\lib\portable-windows8+net45+wp8\System.Reactive.Providers.dll + ..\..\packages\Rx-Providers\lib\portable-net40+sl5+win8+wp8\System.Reactive.Providers.dll True True diff --git a/src/Observable.fs b/src/Observable.fs index b29927c..4687628 100644 --- a/src/Observable.fs +++ b/src/Observable.fs @@ -560,7 +560,7 @@ module Observable = /// Filters the observable elements of a sequence based on a predicate by /// incorporating the element's index let filteri predicate (source: IObservable<'T>) = - Observable.Where( source, Func<_,_> predicate ) + Observable.Where( source, Func<_,_,_> (fun i x -> predicate x i) ) /// Invokes a specified action after the source observable sequence @@ -1028,12 +1028,7 @@ module Observable = /// Maps the given observable with the given function and the /// index of the element let mapi (f:int -> 'Source -> 'Result) (source:IObservable<'Source>) = - source - |> Observable.scan ( fun (i,_) x -> (i+1,Some(x))) (-1,None) - |> Observable.map - ( function - | i, Some(x) -> f i x - | _, None -> invalidOp "Invalid state" ) + Observable.Select (source, Func<_,_,_> (fun i x -> f x i)) /// Maps two observables to the specified function. diff --git a/tests/FSharp.Control.Reactive.Tests.fsproj b/tests/FSharp.Control.Reactive.Tests.fsproj index da9c547..53ec695 100644 --- a/tests/FSharp.Control.Reactive.Tests.fsproj +++ b/tests/FSharp.Control.Reactive.Tests.fsproj @@ -9,7 +9,7 @@ Library FSharp.Control.Reactive.Tests FSharp.Control.Reactive.Tests - v4.0 + v4.5.2 FSharp.Control.Reactive.Tests ..\ @@ -49,11 +49,23 @@ + + True + + + True + + + ..\packages\NUnit.Runners\tools\lib\nunit.core.dll + + + ..\packages\NUnit.Runners\tools\lib\nunit.core.interfaces.dll + @@ -66,55 +78,53 @@ - + - - ..\packages\FSharp.Core\lib\net20\FSharp.Core.dll + + ..\packages\FsCheck\lib\net45\FsCheck.dll True True - + - - ..\packages\FSharp.Core\lib\portable-net45+netcore45\FSharp.Core.dll + + ..\packages\FsCheck\lib\portable-net45+netcore45\FsCheck.dll True True - + - - ..\packages\FSharp.Core\lib\net40\FSharp.Core.dll + + ..\packages\FsCheck\lib\portable-net45+netcore45+wp8\FsCheck.dll True True - + - - ..\packages\FSharp.Core\lib\portable-net45+sl5+netcore45\FSharp.Core.dll + + ..\packages\FsCheck\lib\portable-net45+netcore45+wpa81+wp8\FsCheck.dll True True - + + + - - ..\packages\FSharp.Core\lib\portable-net45+netcore45+wp8\FSharp.Core.dll + + ..\packages\FsCheck.Nunit\lib\net45\FsCheck.NUnit.Addin.dll True True - - - - - - ..\packages\FSharp.Core\lib\portable-net45+netcore45+wpa81+wp8\FSharp.Core.dll + + ..\packages\FsCheck.Nunit\lib\net45\FsCheck.NUnit.dll True True @@ -147,6 +157,15 @@ + + + + ..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll + True + True + + + @@ -174,10 +193,10 @@ - + - ..\packages\Rx-Core\lib\net45\System.Reactive.Core.dll + ..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll True True @@ -201,15 +220,6 @@ - - - - ..\packages\Rx-Core\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll - True - True - - - @@ -239,6 +249,15 @@ + + + + ..\packages\Rx-Experimental\lib\net45\System.Reactive.Experimental.dll + True + True + + + @@ -266,10 +285,10 @@ - + - ..\packages\Rx-Experimental\lib\net45\System.Reactive.Experimental.dll + ..\packages\Rx-Experimental\lib\portable-windows8+net45+wp8\System.Reactive.Experimental.dll True True @@ -293,15 +312,6 @@ - - - - ..\packages\Rx-Experimental\lib\portable-windows8+net45+wp8\System.Reactive.Experimental.dll - True - True - - - @@ -331,6 +341,15 @@ + + + + ..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + True + True + + + @@ -358,10 +377,10 @@ - + - ..\packages\Rx-Interfaces\lib\net45\System.Reactive.Interfaces.dll + ..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll True True @@ -385,15 +404,6 @@ - - - - ..\packages\Rx-Interfaces\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll - True - True - - - @@ -423,6 +433,15 @@ + + + + ..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + True + True + + + @@ -450,10 +469,10 @@ - + - ..\packages\Rx-Linq\lib\net45\System.Reactive.Linq.dll + ..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll True True @@ -477,15 +496,6 @@ - - - - ..\packages\Rx-Linq\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll - True - True - - - @@ -515,6 +525,15 @@ + + + + ..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + True + True + + + @@ -542,10 +561,10 @@ - + - ..\packages\Rx-PlatformServices\lib\net45\System.Reactive.PlatformServices.dll + ..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll True True @@ -569,15 +588,6 @@ - - - - ..\packages\Rx-PlatformServices\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll - True - True - - - @@ -619,10 +629,10 @@ - + - ..\packages\Rx-Providers\lib\sl5\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\net45\System.Reactive.Providers.dll True True @@ -634,10 +644,10 @@ - + - ..\packages\Rx-Providers\lib\windowsphone71\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\sl5\System.Reactive.Providers.dll True True @@ -649,10 +659,10 @@ - + - ..\packages\Rx-Providers\lib\windowsphone8\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\windowsphone71\System.Reactive.Providers.dll True True @@ -664,10 +674,10 @@ - + - ..\packages\Rx-Providers\lib\net45\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\windowsphone8\System.Reactive.Providers.dll True True @@ -679,10 +689,10 @@ - + - ..\packages\Rx-Providers\lib\portable-win81+wpa81\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\portable-windows8+net45+wp8\System.Reactive.Providers.dll True True @@ -694,10 +704,10 @@ - + - ..\packages\Rx-Providers\lib\portable-net40+sl5+win8+wp8\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\portable-win81+wpa81\System.Reactive.Providers.dll True True @@ -709,10 +719,10 @@ - + - ..\packages\Rx-Providers\lib\portable-windows8+net45+wp8\System.Reactive.Providers.dll + ..\packages\Rx-Providers\lib\portable-net40+sl5+win8+wp8\System.Reactive.Providers.dll True True @@ -762,46 +772,46 @@ - + - ..\packages\Rx-Testing\lib\sl5\Microsoft.Reactive.Testing.dll + ..\packages\Rx-Testing\lib\net45\Microsoft.Reactive.Testing.dll True True - + True - + - ..\packages\Rx-Testing\lib\windowsphone71\Microsoft.Reactive.Testing.dll + ..\packages\Rx-Testing\lib\sl5\Microsoft.Reactive.Testing.dll True True + + True + - + - ..\packages\Rx-Testing\lib\windowsphone8\Microsoft.Reactive.Testing.dll + ..\packages\Rx-Testing\lib\windowsphone71\Microsoft.Reactive.Testing.dll True True - + - ..\packages\Rx-Testing\lib\net45\Microsoft.Reactive.Testing.dll + ..\packages\Rx-Testing\lib\windowsphone8\Microsoft.Reactive.Testing.dll True True - - True - diff --git a/tests/FsCheckAddin.fs b/tests/FsCheckAddin.fs new file mode 100644 index 0000000..3a349a6 --- /dev/null +++ b/tests/FsCheckAddin.fs @@ -0,0 +1,15 @@ +namespace FsCheck.NUnit.Examples + +open NUnit.Core.Extensibility + +open FsCheck.NUnit +open FsCheck.NUnit.Addin + +[] +type FsCheckAddin() = + interface IAddin with + override x.Install host = + let tcBuilder = new FsCheckTestCaseBuilder() + host.GetExtensionPoint("TestCaseBuilders").Install(tcBuilder) + true + diff --git a/tests/ObservableSpecs.fs b/tests/ObservableSpecs.fs index a889f4a..1ebabf0 100644 --- a/tests/ObservableSpecs.fs +++ b/tests/ObservableSpecs.fs @@ -5,6 +5,7 @@ open System.Reactive.Linq open FSharp.Control.Reactive open Builders open NUnit.Framework +open FsCheck.NUnit open Microsoft.Reactive.Testing open System.Reactive.Subjects open System.Reactive.Concurrency @@ -550,4 +551,34 @@ let ``FlatMapAsync should take F# async workflows and flatmap them to observable Assert.That(result.Count, Is.EqualTo 3) Assert.That(result.[0], Is.EqualTo expected) Assert.That(result.[1], Is.EqualTo expected) - Assert.That(result.[2], Is.EqualTo expected) \ No newline at end of file + Assert.That(result.[2], Is.EqualTo expected) + +[] +let ``Observable.mapi should be equivalent to Array.mapi`` (items : int array) = + items + |> Observable.ofSeq + |> Observable.mapi (fun i x -> (i, x)) + |> Observable.toEnumerable + |> Seq.toArray + |> (=) (items |> Array.mapi (fun i x -> (i, x))) + +[] +let ``filteri should be equivalent to mapi then filter`` (items : int array) = + let predicate i x = (i % 2 = 0) && (x > 0) + + let filtered = + items + |> Observable.ofSeq + |> Observable.mapi (fun i x -> (i, x)) + |> Observable.filter (fun (i, x) -> predicate i x) + |> Observable.map snd + |> Observable.toEnumerable + |> Seq.toArray + + let filtered' = + Observable.ofSeq items + |> Observable.filteri predicate + |> Observable.toEnumerable + |> Seq.toArray + + filtered = filtered' \ No newline at end of file diff --git a/tests/paket.references b/tests/paket.references index 9e1763c..163f51b 100644 --- a/tests/paket.references +++ b/tests/paket.references @@ -1,6 +1,7 @@ FSharp.Core NUnit NUnit.Runners +FsCheck.NUnit Rx-Core Rx-Experimental Rx-Interfaces