timeseries-0.4.0: benchmark/Benchmarks.hs
import Criterion.Main
import Control.DeepSeq
import Data.Time (UTCTime)
import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
import Data.Text.Time (parseISODateTime)
import qualified Data.TimeSeries as TS
instance NFData a => NFData (TS.Series a) where
rnf xs = rnf (TS.toList xs)
seriesSize :: Integer
seriesSize = 10^6
index :: Integer -> UTCTime
index n = posixSecondsToUTCTime (fromIntegral n)
lastIndex :: UTCTime
lastIndex = index (seriesSize - 1)
bigSeries :: TS.Series Double
bigSeries = TS.tsSeries [1..seriesSize] [1..]
smallSeries :: TS.Series Double
smallSeries = TS.tsSeries [1..10^4] [1..]
startTime :: UTCTime
startTime = posixSecondsToUTCTime 1
main :: IO ()
main = defaultMain
[ bgroup "Basic operations"
[ bench "size" $ nf TS.size bigSeries
, bench "valueAt" $ nf (TS.valueAt lastIndex) bigSeries
, bench "slice" $ nf (TS.valueAt (index 1) . TS.slice (index 2) lastIndex) bigSeries
, bench "max" $ nf maximum bigSeries
, bench "fmap" $ nf (fmap (+ 2)) bigSeries
]
, bgroup "Group operation"
[ bench "rolling" $ nf (TS.rolling 20 sum) smallSeries
, bench "resampling" $ nf (TS.resample startTime (TS.seconds 20)) smallSeries
]
, bgroup "IO"
[ bench "load CSV" $ nfIO (TS.loadCSV TS.NoHeader parseISODateTime "testdata/test-100K.csv") ]
]