Permalink
Browse files

Compare number reading performance to ByteString functions.

  • Loading branch information...
1 parent eedca06 commit 910a58a6ad5a73e7f387baccf5a8379b6a314dd9 @bos bos committed Oct 22, 2010
Showing with 16 additions and 1 deletion.
  1. +16 −1 tests/benchmarks/ReadNumbers.hs
@@ -1,9 +1,11 @@
{-# LANGUAGE BangPatterns #-}
-import Control.Monad ()
+
import Data.List (foldl')
import System.Environment (getArgs)
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as BL
+import qualified Data.ByteString.Lex.Double as B
+import qualified Data.ByteString.Lex.Lazy.Double as BL
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
@@ -18,10 +20,19 @@ readem act reader = print . foldl' go 1000000 =<< act
Left err -> error err
Right (n,_) -> min n z
+bytey :: (Ord a, Num a) =>
+ IO [t] -> (t -> Maybe (a,t)) -> IO ()
+bytey act reader = print . foldl' go 1000000 =<< act
+ where go z t = case reader t of
+ Nothing -> error "barf"
+ Just (n,_) -> min n z
+
main = do
args <- getArgs
let strict = (T.lines . T.decodeUtf8) `fmap` B.getContents
lazy = (TL.lines . TL.decodeUtf8) `fmap` BL.getContents
+ bs = B.lines `fmap` B.getContents
+ lbs = BL.lines `fmap` BL.getContents
case args of
["dec"] -> readem strict (T.signed T.decimal :: T.Reader Int)
["hex"] -> readem strict (T.signed T.hexadecimal :: T.Reader Int)
@@ -31,3 +42,7 @@ main = do
["lhex"] -> readem lazy (TL.signed TL.hexadecimal :: TL.Reader Int)
["ldouble"] -> readem lazy (TL.double :: TL.Reader Double)
["lrational"] -> readem lazy (TL.rational :: TL.Reader Double)
+ ["bdec"] -> bytey bs B.readInt
+ ["bdouble"] -> bytey bs B.readDouble
+ ["bldec"] -> bytey lbs BL.readInt
+ ["bldouble"] -> bytey lbs BL.readDouble

0 comments on commit 910a58a

Please sign in to comment.