packages feed

arena-0.1: bench/bench.hs

{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections       #-}

module Main where

import           Criterion.Main
import           Data.Semigroup
import           Database.Arena
import           System.Directory

prepDirectory :: IO ()
prepDirectory = do
  createDirectoryIfMissing True "test_data"
  removeDirectoryRecursive "test_data"
  createDirectoryIfMissing True "test_data/journal"
  createDirectoryIfMissing True "test_data/data"

main = defaultMain [
        bgroup "inserts" [ bench "20"    . nfIO $ inserts 20
                         , bench "10000" . nfIO $ inserts 10000]
       ]


startTestArena :: Int -> IO (ArenaDB (Sum Int, Sum Int) Int Int)
startTestArena n = startArena ((1,) . Sum) (getSum . snd) ((succ n <=) . getSum . fst) "test_data"

inserts :: Int -> IO ()
inserts n = do
  prepDirectory
  ad <- startTestArena n
  runArena ad $ mapM_ addData [1..n]