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.Bytes, 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.