~/bend-docscommunity

property.bend relies on unsafe/foreign

raw source on the hub · import bend-kit-property@0.2.0.0/property.bend as Property

Reproducible property checks with generated inputs and greedy shrinking.

4 imports
import Base
import bend-kit-random@0.1.0.1/random.bend as Rand
import ./generate.bend as Gen
import ./shrink.bend as Shrink

Types

type Failure source · line 7 · raw

@-T:Type -> Type

Templates

template smaller source · line 11 · raw

@-T:Type -> @-test:(@_:T -> Pair(T, Bool)) -> @xs:List<&1, T> -> @tested:Pair(T, Bool) -> Maybe<&1, T>

Scan candidates in order; a predicate returns its input so affine values work.

template smaller.start source · line 28 · raw

@-T:Type -> @-test:(@_:T -> Pair(T, Bool)) -> @xs:List<&1, T> -> Maybe<&1, T>

template attempt.pair source · line 35 · raw

@-T:Type -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @pair:Pair(T, T) -> Pair(T, Maybe<&1, T>)

template attempt source · line 39 · raw

@-T:Type -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @value:T -> Pair(T, Maybe<&1, T>)

template minimize source · line 43 · raw

@-T:Type -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @fuel:Nat -> @state:Pair(T, Maybe<&1, T>) -> T

Each accepted failure restarts shrinking; fuel bounds user-supplied shrinkers.

template minimize.start source · line 57 · raw

@-T:Type -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @value:T -> T

template draw.pair source · line 61 · raw

@-T:Type -> @-test:(@_:T -> Pair(T, Bool)) -> @pair:Pair(T, 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng) -> Pair(Pair(T, Bool), 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)

template draw source · line 65 · raw

@-T:Type -> @-gen:(@_:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Pair(T, 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)) -> @-test:(@_:T -> Pair(T, Bool)) -> @rng:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Pair(Pair(T, Bool), 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)

template check.go source · line 68 · raw

@-T:Type -> @-gen:(@_:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Pair(T, 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)) -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @remaining:Nat -> @+seed:U32 -> @+trial:Nat -> @state:Pair(Pair(T, Bool), 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng) -> Maybe<&1, Failure<T>>

template check.start source · line 93 · raw

@-T:Type -> @-gen:(@_:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Pair(T, 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)) -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @remaining:Nat -> @seed:U32 -> @rng:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Maybe<&1, Failure<T>>

template check source · line 103 · raw

@-T:Type -> @-gen:(@_:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Pair(T, 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)) -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @+seed:U32 -> @trials:Nat -> Maybe<&1, Failure<T>>

Return the first failure and its smallest reachable counterexample.

template report source · line 109 · raw

@-T:Type -> @-show:(@_:T -> String) -> @result:Maybe<&1, Failure<T>> -> IO(Bool)

Print the seed and draw index so a failing check can be replayed.

template run source · line 118 · raw

@-T:Type -> @-gen:(@_:0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng -> Pair(T, 0x46b9429cbffa7a8c1111ce19c60a3d6a/random.Rng)) -> @-copy:(@_:T -> Pair(T, T)) -> @-shrink:(@_:T -> List<&1, T>) -> @-test:(@_:T -> Pair(T, Bool)) -> @-show:(@_:T -> String) -> @seed:U32 -> @trials:Nat -> IO(Bool)