blacktip-0.1.0.0: benchmarks/benches.hs
module Main where
import Control.Monad (replicateM)
import Control.Concurrent.Async (mapConcurrently)
import Criterion.Main
import qualified Database.Blacktip as BT
import qualified Network.Info as NI
import qualified Data.Time.Clock.POSIX as PSX
import Data.Maybe (fromJust)
import System.IO.Unsafe (unsafePerformIO)
{-# NOINLINE interf #-}
interf :: NI.NetworkInterface
interf = fromJust $ unsafePerformIO $ BT.getInterfaceByName "wlan0"
wc :: BT.Config
wc = BT.defaultConfig { BT.interface = BT.NIInterface interf }
gen :: BT.Config -> IO (Either BT.NoInterfaceError BT.UniqueId)
gen = BT.generateUniqueId
genMany :: BT.Config -> Int -> IO [Either BT.NoInterfaceError BT.UniqueId]
genMany config n = mapConcurrently gen (replicate n config)
timeJustMultiply :: IO PSX.POSIXTime
timeJustMultiply = fmap (*1000) PSX.getPOSIXTime
main :: IO ()
main = defaultMain
[ bench "one unique id" $ whnfIO (gen wc)
, bench "sequential 1000 unique ids" $ whnfIO (replicateM 1000 (gen wc))
, bench "sequential 100,000 unique ids" $ whnfIO (replicateM 100000 (gen wc))
-- , bench "concurrent 1000 unique ids" $ nfIO (genMany wc 1000)
, bench "get Unix Millis" $ whnfIO BT.getUnixMillis
-- , bench "get POSIX time" $ nfIO PSX.getPOSIXTime
-- , bench "POSIX time w/ mult" $ nfIO timeJustMultiply
, bench "get interface by name" $ whnfIO (BT.getInterfaceByName "wlan0")
]