Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions nri-prelude/src/Fuzz.hs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,28 @@ frequency optionFuzzers =
|> Gen.frequency
|> Fuzzer

-- | Modifies combinators which choose from a list of generators, like `oneOf` or `frequency`, so that they can be used in recursive scenarios.
--
-- @
-- data Expr =
-- Var String
-- | Lam String Expr
-- | App Expr Expr
--
-- expr :: Fuzzer Expr
-- expr = Fuzz.recursize Fuzz.oneOf
-- [ Fuzz.map Var Fuzz.text ]
-- [ Fuzz.map2 Lam Fuzz.text expr
-- , Fuzz.map2 App expr expr
-- ]
-- @
recursive :: ([Fuzzer a] -> Fuzzer a) -> [Fuzzer a] -> [Fuzzer a] -> Fuzzer a
recursive choose nonRec rec_ =
Gen.recursive (\ma -> choose (List.map Fuzzer m a) |> unFuzzer)
(map unFuzzer nonRec)
(map unFuzzer rec_)
|> Fuzzer

-- | Turn a tuple of fuzzers into a fuzzer of tuples.
tuple :: (Fuzzer a, Fuzzer b) -> Fuzzer (a, b)
tuple (fuzzerA, fuzzerB) =
Expand Down
Loading