Skip to content

Latest commit

 

History

History
321 lines (210 loc) · 11.2 KB

CHANGELOG.md

File metadata and controls

321 lines (210 loc) · 11.2 KB

0.5.1

New Additions

  • proptest::strategy::Union and proptest::strategy::TupleUnion now work with weighted strategies even if the sum of the weights overflows a u32.

  • Added SIGNALING_NAN strategy to generate signalling NaNs if supported by the platform. Note that this is not included in ANY.

Bug Fixes

  • Fixed values produced via prop_recursive() not shrinking from the recursive to the non-recursive case.

  • Fix that QUIET_NAN would generate signalling NaNs on most platforms on Rust 1.24.0 and later.

0.5.0

Potential Breaking Changes

  • There is a small chance of breakage if you've relied on the constraints put on type inference by the closure in leaf.prop_recursive(..) having a fixed output type. The output type is now any strategy that generates the same type as leaf. This change is intended to make working with recursive types a bit easier as you no longer have to use .boxed() inside the closure you pass to .prop_recursive(..).

  • There is a small chance of breakage wrt. type inference due to the introduction of SizeRange.

  • There is a small chance of breakage wrt. type inference due to the introduction of Probability.

  • BoxedStrategy and SBoxedStrategy are now newtypes instead of being type aliases. You will only experience breaking changes if you've directly used .boxed() and not (S)BoxedStrategy<T> but rather Box<Strategy<Value = Box<ValueTree<Value = T>>>>. The probability of breakage is very small, but still possible. The benefit of this change is that calling .boxed() or .sboxed() twice only boxes once. This can happen in situations where you have functions Strategy -> BoxedStrategy or with code generation.

  • proptest::char::ANY has been removed. Any remaining uses must be replaced by proptest::char::any().

  • proptest::strategy::Singleton has been removed. Any remaining uses must be replaced by proptest::strategy::Just.

New Additions

  • Proptest now has an Arbitrary trait in proptest::arbitrary and re-exported in the proptest::prelude. Arbitrary has also been implemented for most of the standard library. The trait provides a mechanism to define a canonical Strategy for a given type just like Arbitrary in Haskell's QuickCheck. Deriving for this trait will also be provided soon in the crate proptest_derive. To use the canonical strategy for a certain type T, you can simply use any::<T>(). This is the major new addition of this release.

  • The any_with, arbitrary, arbitrary_with free functions in the module proptest::arbitrary.

  • The ArbitraryF1 and ArbitraryF2 traits in proptest::arbitrary::functor. These are "higher order" Arbitrary traits that correspond to the Arbitrary1 and Arbitrary2 type classes in Haskell's QuickCheck. They are mainly provided to support a common set of container-like types in custom deriving self-recursive types in proptest_derive. More on this later releases.

  • The strategies in proptest::option and proptest::result now accept a type Probability which is a wrapper around f64. Convertions from types such as f64 are provided to make the interface ergonomic to use. Users may also use the proptest::option::prob function to explicitly construct the type.

  • The strategies in proptest::collections now accept a type SizeRange which is a wrapper around Range<usize>. Convertions from types such as usize and Range<usize> are provided to make the interface ergonomic to use. Users may also use the proptest::collections::size_bounds function to explicitly construct the type.

  • A .prop_map_into() operation on all strategies that map using Into<OutputType>. This is a clerarer and cheaper operation than using .prop_map(OutputType::from).

  • A nonshrinking LazyJust strategy that can be used instead of Just when you have non-Clone types.

  • Anything that can be coerced to fn() -> T where T: Debug is a Strategy where ValueFor<fn() -> T> == T. This is intended to make it easier to reuse proptest for unit tests with manual input space partition where fn() -> T provides fixtures.

Minor changes

  • Relaxed the constraints of btree_map removing 'static.

  • Reduced the heap allocation inside Recursive somewhat.

0.4.2

Bug Fixes

  • The unstable feature now works again.

0.4.1

New Additions

  • The proptest::num::f32 and proptest::num::f64 modules now have additional constants (e.g., POSITIVE, SUBNORMAL, INFINITE) which can be used to generate subsets of the floating-point domain by class and sign.

Bug Fixes

  • proptest::num::f32::ANY and proptest::num::f64::ANY now actually produce arbitrary values. Previously, they had the same effect as 0.0..1.0. While this fix is a very substantial change in behaviour, it was not considered a breaking change since (a) the new behaviour is consistent with the documentation and expectations, (b) it's quite unlikely anyone was depending on the old behaviour since anyone who wanted that range would have written it out, and (c) Proptest isn't generally a transitive dependency so the chance of this update happening "by surprise" is low.

0.4.0

Deprecations and Potential Breaking Changes

  • proptest::char::ANY replaced with proptest::char::any(). proptest::char::ANY is present but deprecated, and will be removed in proptest 0.5.0.

  • Instead of returning -> Result<Self::Value, String>, strategies are expected to return -> Result<Self::Value, Reason> instead. Reason reduces the amount of heap allocations, especially for .prop_filter(..) where you may now also pass in &'static str. You will only experience breaks if you've written your own strategy types or if you've used TestCaseError::Reject or TestCaseError::Fail explicitly.

  • Update of externally-visible crate rand to 0.4.2.

New Additions

  • Added proptest::test_runner::Reason which allows you to avoid heap allocation in some places and may be used to make the API richer in the future without incurring more breaking changes.

  • Added a type alias proptest::strategy::NewTree<S> where S: Strategy defined as: type NewTree<S> = Result<<S as Strategy>::Value, Rejection>.

0.3.4

Bug Fixes

  • Cases where file!() returns a relative path, such as on Windows, are now handled more reasonably. See #24 for more details and instructions on how to migrate any persistence files that had been written to the wrong location.

0.3.3

Boxing Day Special

New Additions

  • Added support for i128 and u128. Since this is an unstable feature in Rust, this is hidden behind the feature unstable which you have to explicitly opt into in your Cargo.toml file.

  • Failing case persistence. By default, when a test fails, Proptest will now save the seed for the failing test to a file, and later runs will test the persisted failing cases before generating new ones.

  • Added UniformArrayStrategy and helper functions to simplify generating homogeneous arrays with non-Copy inner strategies.

  • Trait rand::Rng and struct rand::XorShiftRng are now included in proptest::prelude.

Bug Fixes

  • Fix a case where certain combinations of strategies, like two prop_shuffle()s in close proximity, could result in low-quality randomness.

0.3.2

New Additions

  • Added SampledBitSetStrategy to generate bit sets based on size distribution.

  • Added Strategy::sboxed() and SBoxedStrategy to make Send + Sync boxed strategies.

  • RegexGeneratorStrategy is now Send and Sync.

  • Added a type alias ValueFor<S> where S: Strategy. This is a shorter way to refer to: <<S as Strategy>::Value as ValueTree>::Value.

  • Added a type alias type W<T> = (u32, T) for a weighted strategy T in the context of union strategies.

  • TestRunner now implements Default.

  • Added Config::with_cases(number_of_cases: u32) -> Config for simpler construction of a Config that only differs by the number of test cases.

  • All default fields of Config can now be overridden by setting environment variables. See the docs of that struct for more details.

  • Bumped dependency rand = "0.3.18".

  • Added proptest::sample::subsequence which returns a strategy generating subsequences, of the source Vec, with a size within the given Range.

  • Added proptest::sample::select which returns a strategy selecting exactly one value from another collection.

  • Added prop_perturb strategy combinator.

  • Added strategy::check_strategy_sanity() function to do sanity checks on the shrinking implementation of a strategy.

  • Added prop_shuffle strategy combinator.

  • Added strategy::Fuse adaptor.

Bug Fixes

  • Fix bug where Vec, array and tuple shrinking could corrupt the state of their inner values, for example leading to out-of-range integers.

  • Fix bug where Flatten (a.k.a. the prop_flat_map combinator) could fail to converge to a failing test case during shrinking.

  • Fix TupleUnion sometimes panicking during shrinking if there were more than two choices.

0.3.1

New Additions

  • Added CharStrategy::new_borrowed.

0.3.0

New Additions

  • Union now supports weighting via Union::new_weighted. Corresponding syntax to specify weights is also available in prop_oneof!.

  • Added TupleUnion, which works like Union but permits doing static dispatch even with heterogeneous delegate strategies.

  • prop_oneof! is smarter about how it combines the input strategies.

  • Added option module to generate weighted or unweighted Option types.

  • Added result module to generate weighted or unweighted Result types.

  • All bits submodules now have a masked function to create a strategy for generating subsets of an arbitrary bitmask.

Potential Breaking Changes

  • Union::new now has a generic argument type which could impact type inference.

  • The concrete types produced by prop_oneof! have changed.

  • API functions which used to return BoxedStrategy now return a specific type.

  • BitSetStrategy<T> is no longer Copy for non-Copy types T nor Debug for non-Debug types T.

  • BitSetLike::max has been renamed to BitSetLike::len.

0.2.1

New Additions

  • Added prop_assert! macro family to assert without panicking, for quieter test failure modes.

  • New prelude module for easier importing of important things.

  • Renamed Singleton to Just. (The old name is still available.)

  • Failure messages produced by proptest! are now much more readable.

  • Added in-depth tutorial.

0.2.0

Breaking Changes

  • Strategy now requires std::fmt::Debug.

New Additions

  • Strategy now has a family of prop_flat_map() combinators for producing dynamic and higher-order strategies.

  • Strategy has a prop_recursive() combinator which allows generating recursive structures.

  • Added proptest::bool::weighted() to pull booleans from a weighted distribution.

  • New prop_oneof! macro makes it easier to select from one of several strategies.

  • New prop_compose! macro to simplify writing most types of custom strategies.

0.1.1

New Additions

Add strategy::NoShrink, Strategy::no_shrink().