packages feed

complexity-0.1: Test/Complexity/Utils.hs

{-|
Some utilities to quickly perform experiments.
-}

module Test.Complexity.Utils
    ( quickPerformExps
    , simpleMeasureNs
    , simpleSmartMeasure
    ) where

import Test.Complexity.Base   ( MeasurementStats
                              , Experiment
                              , InputSize
                              , performExperiment
                              , inputSizeFromList
                              , simpleLinearHeuristic
                              )
import Test.Complexity.Chart  (showStatsChart)
import Test.Complexity.Pretty (printStats)


quickPerformExps :: (a -> IO MeasurementStats) -> [a] -> IO ()
quickPerformExps f xs = do stats <- mapM f xs
                           printStats     stats
                           showStatsChart stats

simpleMeasureNs :: [InputSize] -> Integer -> Double -> [Experiment] -> IO ()
simpleMeasureNs ns numSamples maxTime =
    quickPerformExps (performExperiment (inputSizeFromList ns) numSamples maxTime)


simpleSmartMeasure :: Double -> InputSize -> Integer -> Double -> [Experiment] -> IO ()
simpleSmartMeasure step maxN numSamples maxTime xs =
    let tMax = maxTime / (fromIntegral $ length xs)
    in quickPerformExps (performExperiment (simpleLinearHeuristic step maxN) numSamples tMax) xs