dhodovsk / source-git / ghc-aeson

Forked from source-git/ghc-aeson 4 years ago
Clone

Blame benchmarks/AesonEncode.hs

Packit 9a2dfb
{-# LANGUAGE BangPatterns #-}
Packit 9a2dfb
{-# LANGUAGE OverloadedStrings #-}
Packit 9a2dfb
Packit 9a2dfb
module Main (main) where
Packit 9a2dfb
Packit 9a2dfb
import Prelude ()
Packit 9a2dfb
import Prelude.Compat
Packit 9a2dfb
Packit 9a2dfb
import Control.DeepSeq
Packit 9a2dfb
import Control.Monad
Packit 9a2dfb
import Data.Aeson
Packit 9a2dfb
import Data.Attoparsec.ByteString (IResult(..), parseWith)
Packit 9a2dfb
import Data.Char (isDigit)
Packit 9a2dfb
import Data.Time.Clock
Packit 9a2dfb
import System.Environment (getArgs)
Packit 9a2dfb
import System.IO
Packit 9a2dfb
import qualified Data.ByteString as B
Packit 9a2dfb
Packit 9a2dfb
main :: IO ()
Packit 9a2dfb
main = do
Packit 9a2dfb
  args0 <- getArgs
Packit 9a2dfb
  let (cnt,args) = case args0 of
Packit 9a2dfb
        (i:c:a) | all isDigit i && all isDigit c -> (c,a)
Packit 9a2dfb
        (c:a) -> (c,a)
Packit 9a2dfb
        [] -> error "Unexpected empty list"
Packit 9a2dfb
  let count = read cnt :: Int
Packit 9a2dfb
  forM_ args $ \arg -> withFile arg ReadMode $ \h -> do
Packit 9a2dfb
    putStrLn $ arg ++ ":"
Packit 9a2dfb
    let refill = B.hGet h 16384
Packit 9a2dfb
    result0 <- parseWith refill json =<< refill
Packit 9a2dfb
    r0 <- case result0 of
Packit 9a2dfb
            Done _ r -> return r
Packit 9a2dfb
            _        -> fail $ "failed to read " ++ show arg
Packit 9a2dfb
    start <- getCurrentTime
Packit 9a2dfb
    let loop !n r
Packit 9a2dfb
            | n >= count = return ()
Packit 9a2dfb
            | otherwise = {-# SCC "loop" #-}
Packit 9a2dfb
          rnf (encode r) `seq` loop (n+1) r
Packit 9a2dfb
    loop 0 r0
Packit 9a2dfb
    delta <- flip diffUTCTime start `fmap` getCurrentTime
Packit 9a2dfb
    let rate = fromIntegral count / realToFrac delta :: Double
Packit 9a2dfb
    putStrLn $ "  " ++ cnt ++ " good, " ++ show delta
Packit 9a2dfb
    putStrLn $ "  " ++ show (round rate :: Int) ++ " per second"