{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Main where
import Criterion.Main as Criterion
import Data.Fixed
import Data.GenValidity.Criterion
import Data.Int
import Data.List.NonEmpty (NonEmpty (..))
import Data.Ratio
import Data.Word
import Numeric.Natural
main :: IO ()
main =
Criterion.defaultMain
[ bgroup
"generators"
[ genValidBench @(),
genValidBench @Bool,
genValidBench @Ordering,
genValidBench @Char,
genValidBench @Int,
genValidBench @(Int, Int),
genValidBench @(Int, Int, Int),
genValidBench @(Int, Int, Int, Int),
genValidBench @(Maybe Int),
genValidBench @(Either Int Int),
genValidBench @[Int],
genValidBench @[[Int]],
genValidBench @(NonEmpty Int),
genValidBench @(NonEmpty (NonEmpty Int)),
genValidBench @(Ratio Int),
genValidBench @Rational,
genValidBench @Int8,
genValidBench @Int16,
genValidBench @Int32,
genValidBench @Int64,
genValidBench @Integer,
genValidBench @Word8,
genValidBench @Word16,
genValidBench @Word32,
genValidBench @Word64,
genValidBench @Natural,
genValidBench @Float,
genValidBench @Double,
genValidBench @(Fixed E12),
genValidBench @String
],
bgroup
"shrinkers"
[ shrinkValidBench @(),
shrinkValidBench @Bool,
shrinkValidBench @Ordering,
shrinkValidBench @Char,
shrinkValidBench @Int,
shrinkValidBench @(Int, Int),
shrinkValidBench @(Int, Int, Int),
shrinkValidBench @(Int, Int, Int, Int),
shrinkValidBench @(Maybe Int),
shrinkValidBench @(Either Int Int),
shrinkValidBench @[Int],
shrinkValidBench @[[Int]],
shrinkValidBench @(NonEmpty Int),
shrinkValidBench @(NonEmpty (NonEmpty Int)),
shrinkValidBench @(Ratio Int),
shrinkValidBench @Rational,
shrinkValidBench @Int8,
shrinkValidBench @Int16,
shrinkValidBench @Int32,
shrinkValidBench @Int64,
shrinkValidBench @Integer,
shrinkValidBench @Word8,
shrinkValidBench @Word16,
shrinkValidBench @Word32,
shrinkValidBench @Word64,
shrinkValidBench @Natural,
shrinkValidBench @Float,
shrinkValidBench @Double,
shrinkValidBench @(Fixed E12),
shrinkValidBench @String
]
]