3.0.0-beta1
Pre-releaseBackwards incompatible*: Refactor and split of the Gen
and Arbitrary
APIs into FsCheck.FSharp
and FsCheck.Fluent
. This is a first step in splitting the entire API into a functional (for F# consumers) and fluent (for C# and VB.NET consumers) interface. This should be clearer for both kinds of consumers.
By and large, if you are an F# user, now open FsCheck.FSharp
in addition to open FsCheck
. If you are a C# or VB.NET user, add using FsCheck.Fluent
.
Backwards incompatible*: redesigned API for per-type Arbitrary instance discovery and lookup. There is no longer a single global, mutable map of type to Arbitrary instances, instead there are any number of immutable IArbMap
s that can be configured at your leisure, and set via Config.WithArbitrary
on the test.
Detailed changes to FsCheck.FSharp.Gen
: Added RequireQualifiedAccess
. Added apply
and bind
. Renamed collect
and sequence
to collect/sequenceToList/Array/Seq
for clarity. Removed unzip
and unzip3
- their implementation is problematic, and it's hard to see a use case for them. Removed subListOfToIlist
, subListOfArr
- these returned IList<'T>
types. Untupled rows,cols
arguments in array2DOfDim
.
Detailed changes to FsCheck.Fluent.Gen
: Split into non-extension methods on Gen
and extension methods on Gen<T>
type in GenExtensions
. Removed Gen.Apply
- not useful without partial application. Two
, Three
, Four
and Zip
now output ValueTuples, which is idiomatic in modern C#, and are only visible as extension methods on Gen<T>
. Removed the overloads of Zip
with arity 3. Changed the return type of methods that returned IList<T>
previously to List<T>
. Split the Sample
method with optional arguments in three overloads, this is better for backwards compatibilty going forward.
Detailed changes to FsCheck.FSharp.Arb
: Removed fromGenShrinkFunc
. Removed register
, registerByType
, from
, generate
and shrink
- these are replaced by functions on ArbMap
, resp. mergeWith
, mergeWithType
, arbitrary
and generate
. Made Arb.Default
internal. Default types should now be looked up using ArbMap
, e.g. ArbMap.defaults |> ArbMap.arbitrary<list<int>>
.
Detailed changes to FsCheck.Fluent.Arb
: Removed extension method ToArbitrary
that took an F# function as argument for the shrinker. Renamad Arb.From
methods to Arbitrary.From
- C# does not tolerate ambiguity between using two types of the same name in the same namespace. Removed Register
, RegisterByType
, From
, Generate
and Shrink
- these are replaced by methods on ArbMap
, resp. Merge<'T>
, Merge
, ArbFor
and GeneratorFor
. Made Arb.Default
internal. Default Arbitrary types should now be looked up using ArbMap
, e.g. ArbMap.Default.ArbFor<int[]>()
.
First pass at improving XML docs for Gen API.
Fixed bug in try..with
computation expression builder.
Added support for let!...and!...
syntax in computation expression builder.