TBD
-
Breaking change: confusingly named
StringNoNnulls
is renamed toStringNoNullChar
. -
Breaking change: The operators
|@
,@|
and%>
are removed. Please useProp.label
instead. -
Added more
ForAll
overloads for variousTask
types. -
The collections types
NonEmptySet
,NonEmptyArray
andFixedLengthArray
now implementIEnnumerable
to avoid a call toGet
in common scenarios. -
Enabled source linking and deterministic builds. (by Patrick Stevens)
-
Negative decimals are now also generated. (by Stephen Smith)
-
Relaxed FsCheck.Xunit's restriction on xUnit versions. (by Tom Rijnbeek)
-
Made
Gen.choose64
public. -
Removed dependency on FAKE and paket in favor of standard .NET tools. (by Patrick Stevens)
-
Enable properties that return
Task<T>
. (by Mark Seemann) -
Includes all changes up to 2.16.6.
-
Fixed bug that caused exceptions not to be propagated to output correctly.
-
Added a few missing methods in
Fluent.Arbitrary
. -
Add a few missing
Prop.ForAll
overloads. -
Includes changes in 2.16.4.
-
Backwards incompatible: Refactor and split of the
Gen
andArbitrary
APIs intoFsCheck.FSharp
andFsCheck.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 toopen FsCheck
. If you are a C# or VB.NET user, addusing 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 viaConfig.WithArbitrary
on the test. -
Detailed changes to
FsCheck.FSharp.Gen
: AddedRequireQualifiedAccess
. Addedapply
andbind
. Renamedcollect
andsequence
tocollect/sequenceToList/Array/Seq
for clarity. Removedunzip
andunzip3
- their implementation is problematic, and it's hard to see a use case for them. RemovedsubListOfToIlist
,subListOfArr
- these returnedIList<'T>
types. Un-tupledrows,cols
arguments inarray2DOfDim
. -
Detailed changes to
FsCheck.Fluent.Gen
: Split into non-extension methods onGen
and extension methods onGen<T>
type inGenExtensions
. RemovedGen.Apply
- not useful without partial application.Two
,Three
,Four
andZip
now output ValueTuples, which is idiomatic in modern C#, and are only visible as extension methods onGen<T>
. Removed the overloads ofZip
with arity 3. Changed the return type of methods that returnedIList<T>
previously toList<T>
. Split theSample
method with optional arguments in three overloads, this is better for backwards compatibility going forward. -
Detailed changes to
FsCheck.FSharp.Arb
: RemovedfromGenShrinkFunc
. Removedregister
,registerByType
,from
,generate
andshrink
- these are replaced by functions onArbMap
, resp.mergeWith
,mergeWithType
,arbitrary
andgenerate
. MadeArb.Default
internal. Default types should now be looked up usingArbMap
, e.g.ArbMap.defaults |> ArbMap.arbitrary<list<int>>
. -
Detailed changes to
FsCheck.Fluent.Arb
: Removed extension methodToArbitrary
that took an F# function as argument for the shrinker. RenamedArb.From
methods toArbitrary.From
- C# does not tolerate ambiguity between using two types of the same name in the same namespace. RemovedRegister
,RegisterByType
,From
,Generate
andShrink
- these are replaced by methods onArbMap
, resp.Merge<'T>
,Merge
,ArbFor
andGeneratorFor
. MadeArb.Default
internal. Default Arbitrary types should now be looked up usingArbMap
, 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.
-
Target netstandard 2.0 only.
-
Dependency upgrades: FSharp.Core to 4.5.0, xUnit to 2.4.1 and NUnit to 3.10.1.
-
FsCheck, FsCheck.Xunit and FsCheck.NUnit are now signed, aka strongly named assemblies.
-
Harmonize Config types (by Laurence King)
-
Accumulate all changes in versions 2.12 to 2.14.3.
- Propagate thread-local arbitraries to thread pool threads that are executing tests.
- NuGet packaging: relax FSharp.Core constraint to 4.0 and higher for .NET Desktop.
-
Remove PCL builds. NET Standard is the way forward. Latest FSharp.Core builds don't even include PCL versions. As a result of the FSharp.Core dependency, FsCheck targets NET Standard 1.6.
-
Remove Prop.within.
-
Remove tuple and list testables.
-
Bug fix: Tasks that were faulted or cancelled were not detected as test failures (by chrisoverzero)
-
Update random number generator to SplitMix algorithm. (with thanks to Jack Pappas for making it fast)
-
Add support for parallel and async testing. (by Sergey - great effort!)
-
Simplify sampling data: Gen.sample et al.
- Added Map and Return methods to make FsCheck more F#+ friendly. (by Gustavo Leon)
- Improved C# record type generation - previously no values for some properties were not generated.
-
Fixed display issue affecting custom F# exceptions.
-
Prop.throws
now fails the test if an unexpected exception is thrown.
-
Allow configuration in FsCheck.Xunit.PropertiesAttribute to affect properties on nested types or modules. PropertiesAttribute on the closest enclosing type takes precedence.
-
Add FsCheck.Xunit.TestOutputRunner - a simple runner which just redirects output to xUnit's TestOutputHelper.
- Support generation and shrinking of System.Collections.Immutable types via reflection.
- Include inherited methods when registering Arbitrary instances. (by Bennie Copeland)
- Support generating C# record types.
-
Allow shrinking private unions. (by Sander van Dijk)
-
Limit total number of shrink attempts to 5000, to avoid infinite loops in general, and in particular if an argument is mutated in the test.
-
Enabled FsCheck.Xunit's
PropertiesAttribute
to work at assembly level. (by Laurence King) -
Added
UnicodeString
andUnicodeChar
generators.
- Fixed a bug in FsCheck.Xunit: using ITestOutputHelper did not show output in
Property
-attributed tests.
-
Updated NUnit to 3.13.1, and set that as the lowest allowable version in FsCheck.NUnit package. Fixed resulting incompatibility.
-
Since NUnit 3.13 no longer supports netstandard 1.6, removed netstandard 1.6 support from FsCheck.NUnit as well.
- Restrict NUnit version range to versions < 3.13.1, as that introduced an incompatibility with FsCheck.NUnit.
- Workaround for suspected F# compiler bug: prevented compiler from inlining
Prop.discard
. (by Okke Hendriks)
- Fix NullRef in
isCSharpDtoType
when a property with only a setter was encountered.
- Fix FsCheck.Xunit so it properly calls Dispose if the test class implements IDisposable. (by Laurence King)
- Assembly metadata fix. This caused version 2.14.1 to be unusable in some cases; it was unlisted.
- Add support for struct type generation and shrinking. (by Kody Musick)
- Support setting PropertyAttribute.Replay to null. (by Eirik Tsarpalis)
-
Add shrinker for data transfer objects. (by Carlo Zancanaro)
-
Add shrinker for Interval type. (by Nazar Vinnichuk)
-
Add shrinker for flags enums. (by Nazar Vinnichuk)
-
Add new Arbitrary instances for Numerics.Complex and ConsoleKeyInfo. (by Nazar Vinnichuk)
-
Fix float, int32 and int64 generators so their distribution is uniform. This also improves downstream generators. (by Nazar Vinnichuk)
-
Fix decimal generator so size is respected. (by Nazar Vinnichuk)
-
Add Gen.scale and ScaleSize extension method which can remove some boilerplate. (by Nazar Vinnichuk)
-
Stop shipping Portable Class Libraries (PCL), which are essentially deprecated by Microsoft in favor of .NET Standard. FsCheck now targets .NET Standard 1.0 (which takes the place of 3 PCLs that were previously included, while it still run on all those platforms and more), .NET Standard 1.6 (which is the lowest version modern FSharp.Core versions support) and .NET Standard 2.0 (which is advised by NuGet so clients don't need to download as much stuff if they can target 2.0 or higher). FsCheck also still targets .NET Framework 4.5.2 and upwards as a convenience.
-
FsCheck.Xunit and FsCheck.NUnit similarly target .NET Standard 1.6 and 2.0, as well as .NET Framework 4.5.2. They've never targeted PCL before.
-
It's my hope and expectation that this makes FsCheck usable on the same range of platforms (and more) as before, while greatly simplifying development: there is now just one solution (instead of three), and only one FsCheck project (instead of five) and so on.
-
Add NonWhiteSpaceString to default generated types. (by Stijn Moreels)
-
Fix FsCheck.Xunit's CheckExtensions so that the throwing methods actually throw on failure.
-
Add new generator extensions for C#: Zip, Zip3, Or and OrNull. (by Stijn Moreels)
-
Add Gen.collect and variations. (by Stijn Moreels)
-
Fix to offset of DateTimeOffset generator. (by Evgeny Grebenyuk)
-
Update NUnit to 3.10.1.
-
Add Arbitrary instance for XML encoded string. (by Stijn Moreels)
-
DateTime now also generates kind and milliseconds (by Matthew Peacock)
-
Removed EditorBrowsable.Never from all but the obsoleted methods. F# intellisense now also honors these attributes, and so they were hiding a bunch of methods unnecessarily. The upshot is that C# users will see more of the API that is F# specific.
- Gen.subListOf can now generate the entire given list, where previously it would always generate a strict sublist. (by Michał Niegrzybowski)
- FsCheck.NUnit: Bugs fixed and added support for Ignore and Category attributes. (by Eirik Tsarpalis)
- Add some C# extension members to combine boolean properties. (by Stijn Moreels)
-
Fix FsCheck.NUnit issue - failure output was not shown. (by adj123)
-
Add C# Implies extension method. (by adj123)
- NuGet packaging: relax FSharp.Core constraint to 4.0 and higher for .NET Desktop and PCL targets.
-
NuGet Packaging updates. (by Enrico Sada)
-
Small performance improvements in Gen.apply and mapN.
-
Change NuGet dependency of FsCheck.Xunit and FsCheck.NUnit on FsCheck to strict equality constraint.
-
Add specific dependency group to nuspec for net45 so that NuGet does not download a bunch of packages needlessly.
- Don't escape newline and tab characters.
- Fix stack overflow in Gen.piles, listOf and arrayOf when generating long collections.
-
Make Gen.variant thread safe.
-
Allow registration of Arbitrary instances that are defined as properties, in addition to methods.
-
Show control characters, which are unprintable, as escaped ascii codes in the output.
- Update FsCheck.NUnit to work with NUnit 3.8.1. FsCheck.NUnit is not backwards compatible with earlier NUnit versions because NUnit changed the name of a few methods in their extension API.
- Gen.listOf and Gen.arrayOf now divide the size among the element generators, to avoid exponential explosion of size when high-dimensional types like
int list list list
are generated. This is the approach advocated in https://gupea.ub.gu.se/handle/2077/22087. The effect on list and array generators is as follows, quoting from that text: This adjustment of the list generator impacts the distribution in several ways. Most apparently it inverts the correlation between the length of the list and the size of the elements, long lists will tend to have small elements instead of large. Short lists with small elements will be generated whenever n is low. Short lists with large elements will occur when n is large and a small k is chosen. If a large k is chosen instead, long list with small elements will be generated. The only way to generate long lists with large elements is if n is very large, which is natural given that the purpose of the modified algorithm is to reduce the size of test data. - Add Gen.piles generator, which generates a list of random elements that add up to a given sum.
- Fix a bug in recursive union type generation that could lead to stack overflow in some cases.
- Add NegativeInt type and Arbitrary instance. (by Stijn Moreels)
- Update SourceLink to v2. (by Cameron Taggart)
- Add a .NET Standard 1.6 build to FsCheck, FsCheck.NUnit and FsCheck.Xunit NuGet packages. (with Enrico Sada)
- Update to latest FSharp.Core 4.1. The last version to support 3.1 or higher is FsCheck 2.8.2.
- Add Gen.optionOf. (by Mark Seemann)
- Added support to generate POCOs (reflectively) with a default ctor and settable properties. (by Giacomo Citi)
- Removed support for .NET 4.5 and 4.5.1 frameworks as they are no longer supported by Microsoft.
- Updated to xUnit 2.2.
- Updated to NUnit 3.6.1.
- FsCheck.Xunit now shows currently executing test in UI test runner. (by Lukas Rieger)
- Improve reflection based generator for union cases - now also detect if a union case is recursive via any number of other types.
- Improve shrinking - when many possible values are tried, the shrinking was not tail recursive which could lead to stack overflow in rare situations. (by Lukas Rieger)
- Improvements to Experimental.StateMachine: some stats about generated operations are now printed and shrinking of operations can be customized (by Silvio Marcovic). Also the Setup shrinking phase now works correctly.
- Switch FsCheck.NUnit to use NUnit 3. This solves a lot of issues with NUnit 2's wonky plugin model. FsCheck.NUnit.Addin is no longer needed, for example, and neither is the install.ps1 in the FsCheck.NUnit package. Also, FsCheck.NUnit only needs a dependency on NUnit now, which should solve a bunch of install issues on its own. (like xUnit 2 support, another heroic contribution by Jon Hamm, and brilliantly pushed over the finish line by Mark Lambert.)
- NUnit versions < 3.0 are no longer supported. The latest FsCheck version that supports NUnit 2.6.4 is FsCheck.NUnit 2.6.3.
- Add Gen.zip, Gen.unzip, Gen.zip3 and Gen.unzip3. (by Mark Seemann)
- Add Cast() to enable type annotations in LINQ expressions. (by Mauricio Scheffer)
- Add VB.NET support back. (by Paulmichael Blasucci)
- Add HostName generator. (by Mark Seemann)
- Add Check extenions to output FsCheck output to xUnit's output helper. (by Johannes Egger)
- Also generate and shrink IPV6 addresses in IPAddress generator. (by Mark Seemann)
- Add generators for Flags enums with non-int elements - previously only int elements were supported. (by Mark Seemann)
- In FsCheck.Xunit, allow configuration on module level of all settings using PropertiesAttribute. Deprecated ArbitraryAttribute. (by Tomasz Heimowski)
- Add ToString for number wrappers so that output shows the underlying number (by Mauricio Scheffer)
- Faster array generation and shrinking (by Jack Pappas)
- Bug fix: Prop.classify did not take the last test into account. (by Silvio Marcovic)
- Bug fix: or property combinator failed overall test if an exception was thrown.
- Add Gen.growingElements.
- Add default generator and shrinker for IPAddress and MailAddress.
- Gen.eval now uses the given size directly to generate an element of that size, instead of randomly choosing a size up to the given size. This means that on average test case sizes are bigger.
- Gen.frequency now throws a clearer exception if no element can be generated.
- Renamed Gen.suchThat and Gen.suchThatOption to Gen.where or Gen.filter and Gen.tryWhere or Gen.tryFilter. (The functions/methods with the old names are still there, they are just marked Obsolete and will be removed in a future version.)
- Renamed DontSize to DoNotSize, DontShrink to DoNotShrink, DontSizeInt16 to DoNotSizeInt16 etc. (The types with the old names are still there, they are just marked Obsolete and will be removed in a future version.)
- StateMachine: operation shrinker shrinks operations too, not just the list of operations.
- Fix bug in function generator - previously generated functions were constant functions.
- Add ThrowingFunction and Arb.Default.ThrowingFunction which generates a pure function, but that also throws exceptions.
- Add Gen.shuffle which generates random permutations of a given input sequence.
- Improvements and new features for FsCheck.Experimental.StateMachine: allow tracking of results of operations through the OperationResult type. The implicit dependencies encoded by one operation using the result of another, are taken into account by the shrinker.
- Command shrinker now takes preconditions into account. Behavior could be slightly different, overall should be a clear improvement.
- Command generator now stops after trying a number of times when it can't find a command that satisfies the preconditions. Previously, it would loop forever.
- Exposed Command.generate and Command.shrink. Obsoleted Command.generateCommands in favour of Command.generate.
- Added Gen.where as a synonym for Gen.suchThat.
- Expanded StateMachine with stop command and max number of commands, better shrinking that also removes loops, and lots of bugfixes.
- Fix timing of xUnit runs.
- Add static factory methods to Configuration like Config.
- Add function and method to Command module to allow users to specify generator and shrinker explicitly.
- Improvements to Experimental.StateMachine: better shrinking, expose some more API.
- Fix output of FsCheck.Xunit - was not correctly reported in all runners (by Matt Ellis)
- Allow shrinking null for C# compatibility (by William Pleasant-Ryan)
- Fix default generators to not rely on static dictionary - this caused some weird side-effects and behavior when overriding default generators.
- Now also reflectively generate union types with private constructors.
- Fix bug in xunit integration: Verbose didn't show any output.
- Major performance improvements in generators, particularly reflection-based generators. (with M�rten R�nge)
- Bug fix: xUnit runner did not update failed count correctly in some cases.
- Fix overly constrained FSharp.Core dependency in FsCheck NuGet package.
- Add QuietOnSuccess option to vanilla runner.
- Add bigint generator.
- Deprecate some infrequently used and incorrectly named methods.
- Lots of internal and mostly syntactic code clean-up.
- Switch to paket for creating NuGet packages.
- Switch to xunit 2.1. Note: Needs -noshadow argument on Mono due to Mono bug. A fix for Mono is submitted and is expected in Mono 4.3. (heroic achievement by Jon Hamm - thanks to all who tested early versions and found bugs.)
- xunit versions < 2.1 are no longer supported. The latest FsCheck version that supports xunit 1.9.2 is currently FsCheck.Xunit 2.0.7.
- Made Arbitrary overrides (e.g. using Arb.register, passing arbitrary to Config, or setting them in PropertyAttribute) thread-local. This is mainly to support xunit2: it runs tests in the same class in parallel by default. Not making the overrides thread local causes overrides from one test to mistakenly apply to others.
- FsCheck.Runner.init is Obsolete, it should not longer be necessary to call it explicitly. (though I am cautious here - please report any issues.)
- Fix for AppVeryor NuGet feed dependency problem.
- Add assembly level ExtensionAttribute so VB.NET sees extension methods too. (by Paulmichael Blasucci)
- Undo removal of GenBuilder.delay - this is needed otherwise while and for don't work correctly.
- Optimize GenBuilder.While.
- Add Gen.(>>=), monadic bind operator.
- Make Gen operators <*> and <!> actual operators on the Gen type, instead of functions to avoid name clashes. (by Paul Young)
- Add FsCheck.Experimental.StateMachine for more advanced state machine-based checking, i.e. for mutable systems.
- Fix GenBuilder.delay so that generators inside gen computation expression are not needlessly re-created.
- Add Fun active pattern to make using shrinkable and printable functions easier.
- Fix FsCheck.NUnit NuGet package.
- Add support for Portable Class Library profiles 7,78 and 259.
- Update NuGet package with new project home.
- Add missing frequency overload.
- Added some more C# examples to documentation.
- Internal changes related to use of reflection API to eventually support PCL.
- Fix bug in Commands.
- Improved output - now shows argument before and after shrinking.
- Because apparently there there is some problem with FsCheck.Xunit and FsCheck.NUnit's NuGet dependencies to unstable versions.
- Improve assert failure reporting in FsCheck.Xunit (by Mark Seemann)
- Add discard method (by Mauricio Scheffer)
- Fix capitalization of Fscheck.NUnit package
- Rename FsCheckTestCaseBuider to Builder. (potentially breaking change)
- Add RequireQualifiedAccess to TestResult and Outcome. (breaking change for IRunner implementations and test framework integrations)
- Remove Fluent API and SpecBuilder in favor of overloads in Prop and extension methods on Property (breaking change)
- Add extension methods to allow working with Arbitrary from C#/VB.
- Rename Any to Gen. Rename pretty much all methods on Any to match the existing methods they wrap on Gen module. (breaking change)
- Add missing Gen and Arbitrary extension methods and C#/VB wrappers.
- Make Property a real type instead of a type alias.
- Add discard (by Mauricio Scheffer)
- Various improvements and changes to Command interface for easier consumption, also from C#/VB (breaking change)
- Add explicit dependency on FSharp.Core Nuget package to hopefully reduce version confusion and make things easier for C#/VB users.
- Add
NonNull<T>
.
- Add option to FsCheck.Xunit and FsCheck.Nunit to suppress output on success.
- Moved default Arb registration to Arb module. This should fix issues folks have been having with the default generators not being registered in time.
- Add XML docs, mostly in C# API and xUnit integration attributes.
- Document FsCheck.Xunit and FsCheck.NUnit properly.
- Start using FAKE to automate releases
- Release NUnit addin
- Start using semantic versioning, hence the jump to 1.0.0
- Start releasing all NuGet packages simultaneously and with the same version.
- Start using FSharp.Formatting and publish documentation to github.io
- Start building for mono on non-windows platforms.
- Start using CI (appveyor for windows, Travis CI for MacOS).
- Update to .NET4.5 to take advantage of ExceptionDispatchInfo.
- Fix: sbyte overflow bug in shrinker.
- Fix: CultureInfo generator and shrinker.
- Update to F# 3.1
- Hardened other generators against the new null-generating string generator.
- String generator now generates null