summaryrefslogtreecommitdiff
path: root/bench.hs
diff options
context:
space:
mode:
Diffstat (limited to 'bench.hs')
-rw-r--r--bench.hs50
1 files changed, 50 insertions, 0 deletions
diff --git a/bench.hs b/bench.hs
new file mode 100644
index 0000000..561eef1
--- /dev/null
+++ b/bench.hs
@@ -0,0 +1,50 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Main where
+
+import Control.Monad
+import Criterion
+import Criterion.Main
+import qualified Data.ByteString.Char8 as B
+import Data.FastQ
+import Data.Function
+import qualified Streamly.Data.Fold as F
+import qualified Streamly.Data.Stream as S
+import qualified Streamly.Data.Unfold as U
+import Test.QuickCheck.Arbitrary
+import Test.QuickCheck.Gen
+import Prelude hiding (Read)
+import System.IO.Temp
+import Options.Generic
+import qualified Dedumi as D
+import Data.Maybe
+import qualified Data.Text as T
+import Debug.Trace
+
+instance Arbitrary Read where
+ arbitrary = Read <$> genStr <*> genStr <*> genStr
+ where
+ genBS = fmap B.pack . listOf1 . elements
+ genStr = genBS $ [' ' .. '~']
+
+--sizes = [2 ^ i | i <- [11 .. 19]]
+sizes = [2*8192]
+
+setupEnv root size = do
+ let fileroot = root <> "/" <> show size
+ a = fileroot <> "a"
+ b = fileroot <> "b"
+ rp <- replicateM size $ generate $ arbitrary
+ S.unfold U.fromList rp & unparse a b
+ pure (a, b)
+
+main :: IO ()
+main = withSystemTempDirectory "dedumi-bench" $ \tmpdir ->
+ defaultMain
+ [ bgroup "main" $ map (\s -> env (setupEnv tmpdir s) $ \ ~(a,b) -> bench (show s) (run (T.pack a) (T.pack b))) sizes
+ ]
+
+run fq1 fq2 = nfAppIO D.go $ fromJust $ unwrapRecordPure [fq1, fq2, "/dev/null", "/dev/null"]