Releases: jqwik-team/jqwik
Some Upgrades
New and Enhanced Features
- Added 
Action.JustTransform.description()to public API.
See this pull request for context. 
Breaking Changes
- New 
Action.JustTransform.description()may break binary compatibility. 
Dependency Upgrades and Bug Fixes
- Upgraded to Kotlin 2.1.21
 - Upgraded to JUnit Platform 1.13.1
 - Upgraded to KotlinX 1.10.2
 
Minor Bugfix
New and Enhanced Features
- Upgraded to Kotlin 2.1.0
 
Breaking Changes
- The bug fix for issue 599 can
lead to different exception types -IllegalArgumentExceptioninstead ofCannotFindArbitraryException-
for provider methods that create objects of the wrong type. 
Dependency Upgrades and Bug Fixes
- Fixed bug reported in issue 599
by making return type matching for provider methods loose again. 
JqwikSession Enhancements
New and Enhanced Features
- 
Introduced API to handle random seeds outside jqwik's lifecycle.
See issue 581.- Added 
JqwikSession.getRandom() - Added 
JqwikSession.start(String randomSeed) - Added 
JqwikSession.run(String randomSeed, Runnable runnable) 
 - Added 
 
Breaking Changes
No breaking changes
Dependency Upgrades and Bug Fixes
- Upgrade to Gradle 8.10.2
 - Upgraded to JUnit Platform 1.11.1
 - Upgraded to KotlinX 1.9.0
 
Kotlin 2.0 and Nullability Annotations
New and Enhanced Features
- 
Upgraded to Kotlin 2.0.0
 - 
Upgraded to JUnit Platform 1.10.3
 
Breaking Changes
- 
StatisticsCoverage.checkQuery(Predicate<? super List<?>> query):
queryis now of typePredicate<? super List<?>>instead ofPredicate<? super List<Object>>. - 
Nullability annotations have been added to many API methods and interfaces.
This could lead to compile-time warnings or errors in your code if you are using tool chains that validate those. - 
UniqueElements.by()now requires aClass<? extends Function<? extends @Nullable Object, ?>>
instead of aClass<? extends Function<?, Object>>. 
Bug Fixes
- 
Tools like CheckerFramework did not play well with jqwik's (wrong) usage of
@Nullableon type variables.
This has been fixed. See issue 575 for details.
Thanks to vlsi for working out all the nitty, gritty details! - 
Fixed type matching bug as revealed in this comment
 
Bug Fix
Some Kotlin Care
Platform Upgrade and a few Fixes
New and Enhanced Features
- 
Upgraded to KotlinX 1.8.0
 - 
Upgraded to JUnit Platform 1.10.2
 - 
Upgraded to Kotlin 1.9.22
 
Breaking Changes
No breaking changes
Bug Fixes
Important Fixes for Java >= 18
New and Enhanced Features
- Upgraded to JUnit Platform 1.10.0
 
Breaking Changes
No breaking changes
Bug Fixes
- 
Nested test containers using
@Grouphave not been working properly with JDK >= 18.
Now they do. See issue 528. - 
Fixed stack overflow exception while shrinking.
See issue 526. - 
Fixed out of memory error while shrinking.
See issue 527.
Many thanks to Juhan Oskar Hennoste for providing a fix. 
Just Fixing Bugs
Consolidate and Move Kotlin forward
New and Enhanced Features
- 
Upgraded to KotlinX 1.7.3
 - 
Upgraded to JUnit Platform 1.10.0
 - 
Upgraded to Kotlin 1.9.10
 - 
Added
StringArbitrary.uniqueChars()to generate strings with unique characters.
Discussion in issue 506.
This is an experimental feature. - 
Added constraint annotation
@UniqueCharsfor String parameters.
This is an experimental feature. - 
Added
Arbitraries.fromGeneratorWithSize(..).
See issue 494.
This is an experimental feature. - 
The Kotlin module got a brand new Combinator DSL.
 - 
Configurators that are based on
ArbitraryConfiguratorBasewill now consider
any public method the name of which starts withconfigureas a configuration method candidate.
This allows heterogeneous arbitrary configurators
that differ in arbitrary type only. - 
Multiple
@CharRangeannotations are now also possible for@ForAll charparameters. - 
EXPERIMENTALAPIs promoted toMAINTAINED:Arbitrary.edgeCases(Consumer<EdgeCases.Config<T>> configurator)Arbitrary.withoutEdgeCases()@Property.edgeCases()@ForAll.supplier()@From.supplier()@Provide.ignoreExceptions()Combinator[2-8].filter(..)ListCombinator.filter(..)NumericalArbitrary.withDistribution(..)TraverseArbitraryTypeArbitrary.enableRecursion()@UseType.enableRecursion()DomainContext.getReportingFormats()JqwikSession
 
Breaking Changes
- 
Configurators that are based on
ArbitraryConfiguratorBasemust mark their
configure()methods aspublic.
Private and package-scope methods are no longer supported considered as
configuration method candidates. - 
TypeUsage.canBeAssignedTo(TypeUsage)behaves now closer to the Java compiler's rules
about allowing assignments - including co- and contravariance.
This has the potential to break domains, arbitrary providers, and lifecycle hooks
that depend on the old, more loose, behaviour. - 
@Providemethods are now matched more strictly, based on assignability of returned arbitrary type.
That means that potential mismatches of generated values and the corresponding@ForAll
parameters will show up already at property setup time through aCannotFindArbitraryException. - 
StringArbitrary.repeatChars(0.0)will now redirect toStringArbitrary.uniqueChars().
Previously it used to just make the probability of repeating characters very low.
See discussion in issue 506. - 
Removed deprecated method
TypeArbitrary.use(Executable). - 
Removed deprecated methods
ActionChainArbitrary.addAction(action)
andActionChainArbitrary.addAction(weight, action).