clojure.test.check.generators
->Generator
(->Generator gen)
Positional factory function for class clojure.test.check.generators.Generator.
any
A recursive generator that will generate many different, often nested, values
any-printable
Like any, but avoids characters that the shell will interpret as actions, like 7 and 14 (bell and alternate character set command)
bind
(bind generator k)
Create a new generator that passes the result of gen
into function k
. k
should return a new generator. This allows you to create new generators that depend on the value of other generators. For example, to create a generator which first generates a vector of integers, and then chooses a random element from that vector:
(gen/bind (gen/such-that not-empty (gen/vector gen/int))
;; this function takes a realized vector,
;; and then returns a new generator which
;; chooses a random element from it
gen/elements)
bind-helper
(bind-helper k)
boolean
Generates one of true
or false
. Shrinks to false
.
byte
Generates java.lang.Byte
s, using the full byte-range.
bytes
Generates byte-arrays.
char
Generates character from 0-255.
char-alpha
Generate alpha characters.
char-alpha-numeric
deprecated in 0.6.0
Deprecated - use char-alphanumeric instead.
Generate alphanumeric characters.
char-alphanumeric
Generate alphanumeric characters.
char-ascii
Generate only ascii character.
choose
(choose lower upper)
Create a generator that returns numbers in the range min-range
to max-range
, inclusive.
container-type
(container-type inner-type)
elements
(elements coll)
Create a generator that randomly chooses an element from coll
.
Examples:
(gen/elements [:foo :bar :baz])
fmap
(fmap f gen)
frequency
(frequency pairs)
Create a generator that chooses a generator from pairs
based on the provided likelihoods. The likelihood of a given generator being chosen is its likelihood divided by the sum of all likelihoods
Examples:
(gen/frequency [[5 gen/int] [3 (gen/vector gen/int)] [2 gen/boolean]])
generator?
(generator? x)
Test is x
is a generator. Generators should be treated as opaque values.
hash-map
(hash-map & kvs)
Like clojure.core/hash-map, except the values are generators. Returns a generator that makes maps with the supplied keys and values generated using the supplied generators.
Examples:
(gen/hash-map :a gen/boolean :b gen/nat)
int
Generates a positive or negative integer bounded by the generator’s size
parameter. (Really returns a long)
keyword
Generate keywords without namespaces.
keyword-ns
added in 0.5.9
Generate keywords with optional namespaces.
list
(list generator)
Like vector
, but generates lists.
make-gen
(make-gen generator-fn)
map
(map key-gen val-gen)
Create a generator that generates maps, with keys chosen from key-gen
and values chosen from val-gen
.
map->Generator
(map->Generator m__5869__auto__)
Factory function for class clojure.test.check.generators.Generator, taking a map of keywords to field values.
nat
Generates natural numbers, starting at zero. Shrinks to zero.
neg-int
Generate negative integers bounded by the generator’s size
parameter.
no-shrink
(no-shrink gen)
Create a new generator that is just like gen
, except does not shrink at all. This can be useful when shrinking is taking a long time or is not applicable to the domain.
not-empty
(not-empty gen)
Modifies a generator so that it doesn’t generate empty collections.
Examples:
;; generate a vector of booleans, but never the empty vector
(gen/not-empty (gen/vector gen/boolean))
one-of
(one-of generators)
Create a generator that randomly chooses a value from the list of provided generators. Shrinks toward choosing an earlier generator, as well as shrinking the value generated by the chosen generator.
Examples:
(one-of [gen/int gen/boolean (gen/vector gen/int)])
pos-int
Generate positive integers bounded by the generator’s size
parameter.
ratio
Generates a clojure.lang.Ratio
. Shrinks toward 0. Not all values generated will be ratios, as many values returned by /
are not ratios.
recursive-gen
added in 0.5.9
(recursive-gen container-gen-fn scalar-gen)
This is a helper for writing recursive (tree-shaped) generators. The first argument should be a function that takes a generator as an argument, and produces another generator that ‘contains’ that generator. The vector function in this namespace is a simple example. The second argument is a scalar generator, like boolean. For example, to produce a tree of booleans:
(gen/recursive-gen gen/vector gen/boolean)
Vectors or maps either recurring or containing booleans or integers:
(gen/recursive-gen (fn [inner] (gen/one-of [(gen/vector inner) (gen/map inner inner)])) (gen/one-of [gen/boolean gen/int]))
recursive-helper
(recursive-helper container-gen-fn scalar-gen scalar-size children-size height)
resize
(resize n generator)
Create a new generator with size
always bound to n
.
return
(return value)
Create a generator that always returns value
, and never shrinks. You can think of this as the constantly
of generators.
s-neg-int
Generate strictly negative integers bounded by the generator’s size
parameter.
s-pos-int
Generate strictly positive integers bounded by the generator’s size
parameter.
sample
(sample generator)
(sample generator num-samples)
Return a sequence of num-samples
(default 10) realized values from generator
.
sample-seq
(sample-seq generator)
(sample-seq generator max-size)
Return a sequence of realized values from generator
.
shrink-2
(shrink-2 gen)
Create a new generator like gen
, but will consider nodes for shrinking even if their parent passes the test (up to one additional level).
shuffle
added in 0.6.0
(shuffle coll)
Create a generator that generates random permutations of coll
. Shrinks toward the original collection: coll
. coll
will be turned into a vector, if it’s not already.
simple-type
simple-type-printable
sized
(sized sized-gen)
Create a generator that depends on the size parameter. sized-gen
is a function that takes an integer and returns a generator.
string
Generate strings. May generate unprintable characters.
string-alpha-numeric
deprecated in 0.6.0
Deprecated - use string-alphanumeric instead.
Generate alphanumeric strings.
string-alphanumeric
Generate alphanumeric strings.
string-ascii
Generate ascii strings.
such-that
(such-that pred gen)
(such-that pred gen max-tries)
Create a generator that generates values from gen
that satisfy predicate pred
. Care is needed to ensure there is a high chance gen
will satisfy pred
. By default, such-that
will try 10 times to generate a value that satisfies the predicate. If no value passes this predicate after this number of iterations, a runtime exception will be throw. You can pass an optional third argument to change the number of times tried. Note also that each time such-that retries, it will increase the size parameter.
Examples:
;; generate non-empty vectors of integers
;; (note, gen/not-empty does exactly this)
(gen/such-that not-empty (gen/vector gen/int))
symbol
Generate symbols without namespaces.
symbol-ns
added in 0.5.9
Generate symbols with optional namespaces.
tuple
(tuple & generators)
Create a generator that returns a vector, whose elements are chosen from the generators in the same position. The individual elements shrink according to their generator, but the value will never shrink in count.
Examples:
(def t (tuple gen/int gen/boolean))
(sample t)
;; => ([1 true] [2 true] [2 false] [1 false] [0 true] [-2 false] [-6 false]
;; => [3 true] [-4 false] [9 true]))
vector
(vector generator)
(vector generator num-elements)
(vector generator min-elements max-elements)
Create a generator whose elements are chosen from gen
. The count of the vector will be bounded by the size
generator parameter.