on master help sign in
use the same test file for all benchmarks
213ac6bHarendra Kumar
benchmark/FileIO.hs+61−49
@@ -21,7 +21,6 @@ import qualified Streamly.Prelude as S
21
21
22#ifdef DEVBUILD
22#ifdef DEVBUILD
23import Data.Char (ord, chr)
23import Data.Char (ord, chr)
24−import System.IO (hSeek, SeekMode(..))
25import qualified Streamly.Fold as FL
24import qualified Streamly.Fold as FL
26import qualified Streamly.String as SS
25import qualified Streamly.String as SS
27#endif
26#endif
@@ -67,6 +66,13 @@ isSpace c
67
66
68main :: IO ()
67main :: IO ()
69main = do
68main = do
69+#ifdef DEVBUILD
70+ -- This is a 500MB text file for text processing benchmarks. We cannot
71+ -- have it in the repo, therefore we use it locally with DEVBUILD
72+ -- conditional (enabled by "dev" cabal flag). Some tests that depend on
73+ -- this file are available only in DEVBUILD mode.
74+ inHandle <- openFile "benchmark/text-processing/gutenberg-500.txt" ReadMode
75+#else
70 -- XXX will this work on windows/msys?
76 -- XXX will this work on windows/msys?
71 let cmd = "mkdir -p " ++ scratchDir
77 let cmd = "mkdir -p " ++ scratchDir
72 ++ "; test -e " ++ infile
78 ++ "; test -e " ++ infile
@@ -78,16 +84,10 @@ main = do
78
84
79 runProcess_ (shell cmd)
85 runProcess_ (shell cmd)
80 inHandle <- openFile infile ReadMode
86 inHandle <- openFile infile ReadMode
87+#endif
81 outHandle <- openFile outfile WriteMode
88 outHandle <- openFile outfile WriteMode
82 href <- newIORef $ Handles inHandle outHandle
89 href <- newIORef $ Handles inHandle outHandle
83
90
84−-- This is a 500MB text file for text processing benchmarks. We cannot have it
85−-- in the repo, therefore we use it locally with DEVBUILD conditional (enabled
86−-- by "dev" cabal flag).
87−#ifdef DEVBUILD
88− inText <- openFile "benchmark/text-processing/gutenberg-500.txt" ReadMode
89−#endif
90−
91 defaultMain
91 defaultMain
92 [ bgroup "readArray"
92 [ bgroup "readArray"
93 [ mkBench "last" href $ do
93 [ mkBench "last" href $ do
@@ -136,13 +136,13 @@ main = do
136 ]
136 ]
137 -- This needs an ascii file, as decode just errors out.
137 -- This needs an ascii file, as decode just errors out.
138 , bgroup "decode-encode"
138 , bgroup "decode-encode"
139− [ mkBench "encodeChar8-decodeChar8" href $ do
139+ [ mkBench "char8" href $ do
140 Handles inh outh <- readIORef href
140 Handles inh outh <- readIORef href
141 FH.write outh
141 FH.write outh
142 $ SS.encodeChar8
142 $ SS.encodeChar8
143 $ SS.decodeChar8
143 $ SS.decodeChar8
144 $ FH.read inh
144 $ FH.read inh
145− , mkBench "encodeUtf8-decodeUtf8" href $ do
145+ , mkBench "utf8" href $ do
146 Handles inh outh <- readIORef href
146 Handles inh outh <- readIORef href
147 FH.write outh
147 FH.write outh
148 $ SS.encodeUtf8
148 $ SS.encodeUtf8
@@ -196,68 +196,85 @@ main = do
196 toarr = A.fromList . map (fromIntegral . ord)
196 toarr = A.fromList . map (fromIntegral . ord)
197 in bgroup "splitting"
197 in bgroup "splitting"
198 [ bgroup "predicate"
198 [ bgroup "predicate"
199− [ mkBenchText "splitBy \\n (line count)" inText $ do
199+ [ mkBench "splitBy \\n (line count)" href $ do
200+ Handles inh _ <- readIORef href
200 (S.length $ FL.splitBy (== lf) FL.drain
201 (S.length $ FL.splitBy (== lf) FL.drain
201− $ FH.read inText) >>= print
202+ $ FH.read inh) -- >>= print
202− , mkBenchText "splitSuffixBy \\n (line count)" inText $ do
203+ , mkBench "splitSuffixBy \\n (line count)" href $ do
204+ Handles inh _ <- readIORef href
203 (S.length $ FL.splitSuffixBy (== lf) FL.drain
205 (S.length $ FL.splitSuffixBy (== lf) FL.drain
204− $ FH.read inText) >>= print
206+ $ FH.read inh) -- >>= print
205− , mkBenchText "wordsBy isSpace (word count)" inText $ do
207+ , mkBench "wordsBy isSpace (word count)" href $ do
208+ Handles inh _ <- readIORef href
206 (S.length $ FL.wordsBy isSp FL.drain
209 (S.length $ FL.wordsBy isSp FL.drain
207− $ FH.read inText) >>= print
210+ $ FH.read inh) -- >>= print
208 ]
211 ]
209
212
210 , bgroup "empty-pattern"
213 , bgroup "empty-pattern"
211− [ mkBenchText "splitOn \"\"" inText $ do
214+ [ mkBench "splitOn \"\"" href $ do
215+ Handles inh _ <- readIORef href
212 (S.length $ FL.splitOn (A.fromList []) FL.drain
216 (S.length $ FL.splitOn (A.fromList []) FL.drain
213− $ FH.read inText) >>= print
217+ $ FH.read inh) -- >>= print
214− , mkBenchText "splitSuffixOn \"\"" inText $ do
218+ , mkBench "splitSuffixOn \"\"" href $ do
219+ Handles inh _ <- readIORef href
215 (S.length $ FL.splitSuffixOn (A.fromList []) FL.drain
220 (S.length $ FL.splitSuffixOn (A.fromList []) FL.drain
216− $ FH.read inText) >>= print
221+ $ FH.read inh) -- >>= print
217 ]
222 ]
218 , bgroup "short-pattern"
223 , bgroup "short-pattern"
219− [ mkBenchText "splitOn \\n (line count)" inText $ do
224+ [ mkBench "splitOn \\n (line count)" href $ do
225+ Handles inh _ <- readIORef href
220 (S.length $ FL.splitOn lfarr FL.drain
226 (S.length $ FL.splitOn lfarr FL.drain
221− $ FH.read inText) >>= print
227+ $ FH.read inh) -- >>= print
222− , mkBenchText "splitSuffixOn \\n (line count)" inText $ do
228+ , mkBench "splitSuffixOn \\n (line count)" href $ do
229+ Handles inh _ <- readIORef href
223 (S.length $ FL.splitSuffixOn lfarr FL.drain
230 (S.length $ FL.splitSuffixOn lfarr FL.drain
224− $ FH.read inText) >>= print
231+ $ FH.read inh) -- >>= print
225− , mkBenchText "splitOn a" inText $ do
232+ , mkBench "splitOn a" href $ do
233+ Handles inh _ <- readIORef href
226 (S.length $ FL.splitOn (toarr "a") FL.drain
234 (S.length $ FL.splitOn (toarr "a") FL.drain
227− $ FH.read inText) >>= print
235+ $ FH.read inh) -- >>= print
228− , mkBenchText "splitOn \\r\\n" inText $ do
236+ , mkBench "splitOn \\r\\n" href $ do
237+ Handles inh _ <- readIORef href
229 (S.length $ FL.splitOn (toarr "\r\n") FL.drain
238 (S.length $ FL.splitOn (toarr "\r\n") FL.drain
230− $ FH.read inText) >>= print
239+ $ FH.read inh) -- >>= print
231− , mkBenchText "splitSuffixOn \\r\\n)" inText $ do
240+ , mkBench "splitSuffixOn \\r\\n)" href $ do
241+ Handles inh _ <- readIORef href
232 (S.length $ FL.splitSuffixOn (toarr "\r\n") FL.drain
242 (S.length $ FL.splitSuffixOn (toarr "\r\n") FL.drain
233− $ FH.read inText) >>= print
243+ $ FH.read inh) -- >>= print
234− , mkBenchText "splitOn aa" inText $ do
244+ , mkBench "splitOn aa" href $ do
245+ Handles inh _ <- readIORef href
235 (S.length $ FL.splitOn (toarr "aa") FL.drain
246 (S.length $ FL.splitOn (toarr "aa") FL.drain
236− $ FH.read inText) >>= print
247+ $ FH.read inh) -- >>= print
237− , mkBenchText "splitOn aaaa" inText $ do
248+ , mkBench "splitOn aaaa" href $ do
249+ Handles inh _ <- readIORef href
238 (S.length $ FL.splitOn (toarr "aaaa") FL.drain
250 (S.length $ FL.splitOn (toarr "aaaa") FL.drain
239− $ FH.read inText) >>= print
251+ $ FH.read inh) -- >>= print
240− , mkBenchText "splitOn abcdefgh" inText $ do
252+ , mkBench "splitOn abcdefgh" href $ do
253+ Handles inh _ <- readIORef href
241 (S.length $ FL.splitOn (toarr "abcdefgh") FL.drain
254 (S.length $ FL.splitOn (toarr "abcdefgh") FL.drain
242− $ FH.read inText) >>= print
255+ $ FH.read inh) -- >>= print
243 ]
256 ]
244 , bgroup "long-pattern"
257 , bgroup "long-pattern"
245− [ mkBenchText "splitOn abcdefghi" inText $ do
258+ [ mkBench "splitOn abcdefghi" href $ do
259+ Handles inh _ <- readIORef href
246 (S.length $ FL.splitOn (toarr "abcdefghi") FL.drain
260 (S.length $ FL.splitOn (toarr "abcdefghi") FL.drain
247− $ FH.read inText) >>= print
261+ $ FH.read inh) -- >>= print
248− , mkBenchText "splitOn catcatcatcatcat" inText $ do
262+ , mkBench "splitOn catcatcatcatcat" href $ do
263+ Handles inh _ <- readIORef href
249 (S.length $ FL.splitOn (toarr "catcatcatcatcat") FL.drain
264 (S.length $ FL.splitOn (toarr "catcatcatcatcat") FL.drain
250− $ FH.read inText) >>= print
265+ $ FH.read inh) -- >>= print
251− , mkBenchText "splitOn abc...xyz" inText $ do
266+ , mkBench "splitOn abc...xyz" href $ do
267+ Handles inh _ <- readIORef href
252 (S.length $ FL.splitOn
268 (S.length $ FL.splitOn
253 (toarr "abcdefghijklmnopqrstuvwxyz")
269 (toarr "abcdefghijklmnopqrstuvwxyz")
254 FL.drain
270 FL.drain
255− $ FH.read inText) >>= print
271+ $ FH.read inh) -- >>= print
256− , mkBenchText "splitSuffixOn abc...xyz" inText $ do
272+ , mkBench "splitSuffixOn abc...xyz" href $ do
273+ Handles inh _ <- readIORef href
257 (S.length $ FL.splitSuffixOn
274 (S.length $ FL.splitSuffixOn
258 (toarr "abcdefghijklmnopqrstuvwxyz")
275 (toarr "abcdefghijklmnopqrstuvwxyz")
259 FL.drain
276 FL.drain
260− $ FH.read inText) >>= print
277+ $ FH.read inh) -- >>= print
261 ]
278 ]
262 ]
279 ]
263#endif
280#endif
@@ -276,8 +293,3 @@ main = do
276 writeIORef ref (Handles inHandle outHandle)
293 writeIORef ref (Handles inHandle outHandle)
277 )
294 )
278 (\_ -> action)
295 (\_ -> action)
279−
280−#ifdef DEVBUILD
281− mkBenchText name h action =
282− bench name $ perRunEnv (hSeek h AbsoluteSeek 0) (\_ -> action)
283−#endif