Skip to content

Instantly share code, notes, and snippets.

@Janiczek
Created October 13, 2022 18:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Janiczek/7e1188f724e7d4c63006db6bd90184aa to your computer and use it in GitHub Desktop.
Save Janiczek/7e1188f724e7d4c63006db6bd90184aa to your computer and use it in GitHub Desktop.
module Helpers exposing (exprFuzzer)
import Fuzz exposing (Fuzzer)
exprFuzzer :
{ baseCases : List (Fuzzer a)
, recursiveCases : Fuzzer a -> List (Fuzzer a)
, maxDepth : Int
}
-> Fuzzer a
exprFuzzer config =
Fuzz.oneOf <|
if config.maxDepth <= 0 then
config.baseCases
else
config.baseCases
++ config.recursiveCases (exprFuzzer { config | maxDepth = config.maxDepth - 1 })
symbolicFuzzer : Fuzzer Symbolic
symbolicFuzzer =
Helpers.exprFuzzer
{ baseCases = baseCases
, recursiveCases = recursiveCases
, maxDepth = 3
}
baseCases : List (Fuzzer Symbolic)
baseCases =
[ Fuzz.map S.num Fuzz.niceFloat
, Fuzz.map S.var letterFuzzer
]
recursiveCases : Fuzzer Symbolic -> List (Fuzzer Symbolic)
recursiveCases recur =
[ Fuzz.map2 S.add recur recur
, Fuzz.map2 S.mul recur recur
, Fuzz.map2 S.pow recur recur
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment