data Susp a = Susp (Lazy a)
import nécessaire.Gen — générateurs purs avec réduction intégrée (à la Hedgehog)
Synopsis
data Susp a = Susp (Lazy a)demand : Susp a -> adata ShrinkTree a = ShrinkNode a (Lazy (List (Susp (ShrinkTree a))))treeValue : ShrinkTree a -> akidsOf : ShrinkTree a -> List (Susp (ShrinkTree a))unfoldShrinkTree : (a -> List a) -> a -> ShrinkTree asuspendForest : (a -> List a) -> List a -> List (Susp (ShrinkTree a))mapShrinkTree : (a -> b) -> ShrinkTree a -> ShrinkTree bmapForest : (a -> b) -> List (Susp (ShrinkTree a)) -> List (Susp (ShrinkTree b))bindShrinkTree : ShrinkTree a -> (a -> ShrinkTree b) -> ShrinkTree brebind : List (Susp (ShrinkTree a)) -> (a -> ShrinkTree b) -> List (Susp (ShrinkTree b))data Gen a = MkGen (Int -> Int -> ShrinkTree a)runGen : Int -> Int -> Gen a -> ShrinkTree agenValue : Int -> Int -> Gen a -> asplitSeed : Int -> (Int, Int)mapGen : (a -> b) -> Gen a -> Gen bpureGen : a -> Gen aapGen : Gen (a -> b) -> Gen a -> Gen bbindGen : Gen a -> (a -> Gen b) -> Gen bdata Range = MkRange Int Int Int -- origin lo hihalves : Int -> List Inttowards : Int -> Int -> List IntgenIntRange : Range -> Gen IntgenBool : Gen BoolshrinkCounterexample : (a -> Bool) -> ShrinkTree a -> afirstFailingChild : (a -> Bool) -> List (Susp (ShrinkTree a)) -> Maybe (ShrinkTree a)
demand : Susp a -> a
data ShrinkTree a = ShrinkNode a (Lazy (List (Susp (ShrinkTree a))))
Un arbre n-aire de réductions : une valeur et une forêt de candidats plus petits (suspendus). La forêt est paresseuse, de sorte que construire un nœud ne coûte rien pour ses enfants — ils ne sont construits que lorsque la réduction les explore réellement. Un essai qui réussit ne le force jamais.
treeValue : ShrinkTree a -> a
kidsOf : ShrinkTree a -> List (Susp (ShrinkTree a))
unfoldShrinkTree : (a -> List a) -> a -> ShrinkTree a
Construit un arbre en appliquant répétitivement une fonction de réduction (enfants suspendus).
suspendForest : (a -> List a) -> List a -> List (Susp (ShrinkTree a))
mapShrinkTree : (a -> b) -> ShrinkTree a -> ShrinkTree b
mapForest : (a -> b) -> List (Susp (ShrinkTree a)) -> List (Susp (ShrinkTree b))
bindShrinkTree : ShrinkTree a -> (a -> ShrinkTree b) -> ShrinkTree b
Liaison monadique d'arbres (le cœur de la réduction intégrée) : réduit la valeur externe (en réexécutant k sur chaque réduction externe) puis la valeur interne.
rebind : List (Susp (ShrinkTree a)) -> (a -> ShrinkTree b) -> List (Susp (ShrinkTree b))
data Gen a = MkGen (Int -> Int -> ShrinkTree a)
Gen a = Size -> Seed -> ShrinkTree a. Size et Seed sont des Int ; la graine est le splitmix d'oppi (Random).
runGen : Int -> Int -> Gen a -> ShrinkTree a
genValue : Int -> Int -> Gen a -> a
Engendre uniquement la valeur (abandonne l'arbre de réduction).
splitSeed : Int -> (Int, Int)
mapGen : (a -> b) -> Gen a -> Gen b
pureGen : a -> Gen a
apGen : Gen (a -> b) -> Gen a -> Gen b
bindGen : Gen a -> (a -> Gen b) -> Gen b
data Range = MkRange Int Int Int -- origin lo hi
Un Range fixe les bornes ET l'origine — la valeur vers laquelle la réduction se dirige. constant lo hi (voir Data.Gen) est uniforme avec pour origine lo.
halves : Int -> List Int
towards : Int -> Int -> List Int
Réductions entières de x vers origin : l'origine d'abord, puis on se rapproche de x par recherche dichotomique. Fonctionne dans les deux directions (donc se termine aussi pour x inférieur à origin). towards 0 100 = [0, 50, 75, 88, 94, 97, 99] ; towards 0 (negate 100) = [0, -50, -75, -88, -94, -97, -99].
genIntRange : Range -> Gen Int
Le moteur derrière Data.Gen.int et les instances Arbitrary : un entier uniforme dans l'intervalle, se réduisant vers son origine.
genBool : Gen Bool
Un booléen ; True se réduit en False (le cas minimal).
shrinkCounterexample : (a -> Bool) -> ShrinkTree a -> a
Étant donné l'arbre d'une valeur en échec et la propriété, descend vers une valeur en échec minimale : descend gloutonnement dans le premier enfant en échec jusqu'à ce qu'aucun n'échoue. C'est ce que fait le lanceur lorsqu'une propriété est réfutée. prop est la propriété VÉRIFIÉE ; la valeur renvoyée est la plus petite pour laquelle elle ÉCHOUE.
firstFailingChild : (a -> Bool) -> List (Susp (ShrinkTree a)) -> Maybe (ShrinkTree a)