All notable changes to this project are documented in this file.
This project adheres to Semantic Versioning.
0.9.0-alpha.0 (2020-11-22)
- Now
forAny
requires a function that returns aTestResult
(issue: #85, pr: #244)
0.8.4 (2020-11-22)
- Convenience functions to create pair/triple generator/simplifier/fuzzer when elements are using the same generator/simplifier/fuzzer (#248) (692c253)
0.8.3 (2020-10-20)
- The experimental annotation '@ExperimentalKwikFuzzer' has been deprecated in favor of the new '@ExperimentalKwikApi' annotation (03362bb)
-
Incomplete domain of Java Instant generation (#228) (6ed57fc)
Thanks to @mmiikkkkaa
-
Missing values near boundary for instant and duration generators (#229) (68a6fb9)
Thanks to @mmiikkkkaa
0.8.2 (2020-10-13)
0.8.1 (2020-10-12)
0.8.0 (2020-10-02)
- Deprecated functions have been removed (
Generator.create
andsimplifier
). The deprecation level has also been raised to "error" forGenerator.flatMap
. Make sure you're not using any deprecated members before updating.
-
Add character generator (#215) (2e8b7a6) And let the string generator be configured using a character generator.
Thanks to @Kantis
- Recomands to use fun interface capabilities to create a generator (instead of the deprecated
create
method) (#197) (8ab7b38) - Remove gitter badge (da4d049)
0.7.0 (2020-08-15)
- Kwik now requires Kotlin 1.4.0 or newer
Generator.create
andsimplifier
(11aa0ae)
0.6.2 (2020-08-04)
0.6.1 - 2020-07-20
- Remove noisy prints of "nextSeed" in the console
0.6.0 - 2020-04-01
0.5.0 - 2020-03-29
Reintroduce core
core module that add all transitive dependencies
necessary for property based testing.
A new module fuzzer
has been added. It contain an experimental
abstraction layer which is meant to be above the Generator
. (Note that
fuzzer-api
is transitively added by evaluator
and core
The (existing) Generator is responsible only for generating random value (without even knowing if it is for testing purpose or not).
A Fuzzer
is specialized for property based testing. It contains a
Generator
, a Simplifier
and a list of guarantees that must be
satisfied at least once during evaluation.
- A new function
forAny
is provided to run test usingFuzzer
instead ofGenerator
in moduleevaluator
. In case of property falsification, this function will simplify the input to the simplest input that still falsify the property. - Simplifier combination
Simplifier.pair(Simplifier, Simplifier)
andSimplier.triple(Simplifier, Simplifier, Simplifier)
Are provided Arbitrary
an empty object type that can be used to findFuzzer
factories (regardless of the module they come from)Arbitrary.pair
andArbitrary.triple
to combine fuzzers.
- Kotlin (from
1.3.61
to1.3.71
)
0.4.0 - 2020-02-08
- Allow to configure default number of iteration via environment
variable
KWIK_ITERATIONS
on JVM and Linux (on JVM the system property has precedence over the environment variable) - Allow to configure default seed via system property
kwik.seed
(on JVM) or via environment variableKWIK_SEED
on JVM and Linux (on JVM the system property has precedence over the environment variable)
0.3.0 - 2020-01-24
- Module
core
. It was an empty module only to provide transitive dependencies to most common used modules.
linux
andwindows
targets (x64 arch) Thanks to drodel and michellesantos
-
Before updating to 0.3.0 (so using version 0.2.0)
-
Remove all usage of deprecated members
- Use
Generator.withSamples
instead ofGenerator.samples
- Use
Generator.randomSequence
instead ofGenerator.randoms
- Replace dependencies of module
core
byevaluator
andgenerator-stdlib
Example with gradle for JVM project:dependencies { testImplementation("com.github.jcornaz.kwik:kwik-evaluator-jvm:0.2.0") testImplementation("com.github.jcornaz.kwik:kwik-generator-stdlib-jvm:0.2.0") }
0.3.0-alpha.1 - 2019-12-05
-
Generator.samples
property has been removed. Now the generator have to have a probability to generate the edge cases ingenerate
. The recommended option when building a generator, is to usewithSamples
-
Generator.randoms
function has been removed.Generator.generate
orGenerator.randomSequence
should be used instead.
All generators no longer statically provide samples
. Instead they have
a good probability to generate edge cases.
- (Breaking binary)
withSample
now takes a probability argument, and include the samples in the generation
ensureAtLeastOne
utility in evaluation context, that will force property evaluation until a given predicate gets satisfied. Thanks to alessandroagnelli
- Kotlin (from
1.3.60
to1.3.61
)
0.2.0 - 2019-11-19
samples
property inGenerator
interface. (Samples are about to be included in generation ofgenerate
) One should usewithSamples
andfrequency
instead.
andThen
operator to make easier building complex generation pipelinefrequency
combinator, allowing to create a frequency-parametrized generator
- Kotlin (from
1.3.50
to1.3.60
)
0.2.0-rc.1 - 2019-09-18
- default max size/length for string,collection and sequence generators set to [50]{.title-ref} (instead of [200]{.title-ref})
sequences
generatoruuids
generator
0.2.0-beta.2 - 2019-09-16
- Method
Generator.randoms(Long)
the generator should generate single values, not a sequence.
- (Breaking) method
generate(Random): T
in interfaceGenerator
to generate single value. checkForAll
. An alternative toforAll
allowing to use assertion (throw in case of error) instead of returning a boolean. It can be especially helpful to more descriptive message about what is wrong.Generator.randomSequence
extension function to replace the deprecatedGenerator.randoms(Long): Sequence<T>
0.2.0-beta.1 - 2019-09-15
- Wrap exceptions thrown by the properties so that an helpful message can be displayed (number of attempts, arguments, etc.)
- Kotlin (from
1.3.41
to1.3.50
)
0.1.0 - 2019-07-28
-
StringCharSets
object withnumeric
,alphaLowerCase
,alphaUpperCase
,alpha
andalphaNumeric
. Sets of character to easily configure the string generator. -
kwik.iterations
system property to globally define a default number of iteration.
- Generator API moved to
generator-api
module (artifactsgenerator-api-common
andgenerator-api-jvm
) - Generators for types of the kotlin standard library is moved to
[generator-stdlib]{.title-ref} module (artifacts
generator-stdlib-common
andgenerator-stdlib-jvm
) - The property evaluation is moved to [evaluator]{.title-ref}
(artifacts
evaluator-common
andevaluator-jvm
)
NOTE: The module core
remains as an alias of all the modules above. So it is
still easy to get started with Kwik by simply adding core
as a
dependency
The packages have been renamed, and classes/files have been moved to reflect their new module (see Modules extracted from core)
- (Breaking) The content
com.github.jcornaz.kwik.generator
as been moved tocom.github.jcornaz.kwik.generator.stdlib
- (Breaking) The content
com.github.jcornaz.kwik
as been splitted intocom.github.jcornaz.kwik.generator.api
andcom.github.jcornaz.kwik.evaluator
- Kotlin (from
1.3.40
to1.3.41
)
0.1.0-beta.1 - 2019-07-01
-
(Breaking)
PropertyEvaluationContext
available as a type-receiver in property evaluation -
skipIf
function onPropertyEvaluationContext
allowing to skip a property evaluation for some specific set of input -
Few aliases to get common generators:
positiveInts
,naturalInts
,negativeInts
andnonZeroInts
positiveLongs
,naturalLongs
,negativeLongs
andnonZeroLongs
positiveFloats
,negativeFloats
andnonZeroFloats
positiveDoubles
,negativeDoubles
andnonZeroDoubles
nonEmptyStrings
andnonBlankStrings
nonEmptyLists
,nonEmptySets
andnonEmptyMaps
- Show test details in console only in case of success
- Improved exception message in case of falsified property (and
introduce typed exception
FalsifiedPropertyError
- Kotlin (from
1.3.31
to1.3.40
)
0.1.0-alpha.4 - 2019-06-10
filter
operator for generators- (Breaking)
samples
property in theGenerator
interface to improve management of the value samples (edge-cases) forAll
non-inline function, allowing to hide implementation details.+
operator for generator, allowing to merge 2 operators. Example:nonZeroInts() = ints(max = -1) + ints(min = 1)
- (Breaking) Renamed arguments
from
anduntil
offloats
anddoubles
generators for more consistency with the int and long generators - (Breaking) Make the lambda of
forAll
crossinline, to allow usage of a non-inline function and hide implementation details. - Now the size probability for strings a collections generators is similar for all sizes. Instead, they have empty and singletons instances as samples
combine
andcombineWith
now start by a combination of the source generators and will randomly add samples in the random generations.- Prevent error when passing a big min size/length without a max size/length for collection and strings generators
- (Breaking)
ratio
argument from thewithSamples
andwithNull
operators
0.1.0-alpha.3 - 2019-06-08
Generator.combine
as a style alternative to combine generators
- (Breaking)
zip
operator renamed tocombineWith
for better clarity and discoverability
0.1.0-alpha.2 - 2019-05-19
ints
,longs
,floats
,doubles
andboolean
generatorsmap
operator to transform an existing generatorGenerator.of()
to create a generator from a finite set of samplesenum
to create a generator from an enumstrings
to create a String generatordefault
Capable of inferring what generator to return for a given typelists
,sets
andmaps
generators
- (Breaking) Default generator arguments added in
forAll
andcheckForAll
- (Breaking)
checkForAll
functions as it was unsafe, allowing to forget assertions without compile-time error
0.1.0-alpha.1 - 2019-05-18
Generator
interface for generating random valuesrandomSequence
helper to easily create a random (yet predictable) sequence of valueforAll
andcheckForAll
function to assess a property of the system under testwithSample
andwithNull
to inject constants values to be always testedzip
operator to combine two given generators