EN
PréludeChargé par défaut — aucun import nécessaire.

Gen — générateurs purs avec réduction intégrée (à la Hedgehog)

Synopsis
data Susp a = Susp (Lazy a)

Une valeur gardée en attente, là où Lazy ne peut pas s'écrire (dans une liste, un Maybe, un résultat) : Susp e range e sans le calculer, et demand le lit, en le calculant une seule fois. (Lazy s'écrit sur un paramètre ou un champ.)

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.

unfoldShrinkTree : (a -> List a) -> a -> ShrinkTree a

Construit un arbre en appliquant répétitivement une fonction de réduction (enfants suspendus).

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.

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).

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