import Criterion.Main import Dodge.RandomHelp import Geometry import System.Random import Control.Monad (replicateM) import Data.Functor ((<&>)) import Control.Monad.State import Data.List (zip4) main :: IO () main = do [ps1, ps2, ps3, ps4] <- mapM randomPoints [500,500,500,500] fs <- replicateM 500 (randomRIO (1,20)) defaultMain [ bgroup "circLine tests" [ bench "circLine" $ nf (map $ uncurry4 circOnLine) (zip4 ps1 ps2 ps3 fs) , bench "circLine'" $ nf (map $ uncurry4 circOnLine') (zip4 ps1 ps2 ps3 fs) ] ] uncurry4 f (a,b,c,d) = f a b c d randomPoints :: Int -> IO [Point2] randomPoints i = getStdGen <&> evalState (replicateM i $ randInCirc 500)