Blame benchmarks/JsonParse.hs
|
Packit |
9a2dfb |
{-# LANGUAGE BangPatterns #-}
|
|
Packit |
9a2dfb |
{-# LANGUAGE ScopedTypeVariables #-}
|
|
Packit |
9a2dfb |
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
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.Time.Clock
|
|
Packit |
9a2dfb |
import System.Environment (getArgs)
|
|
Packit |
9a2dfb |
import Text.JSON
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
instance NFData JSValue where
|
|
Packit |
9a2dfb |
rnf JSNull = ()
|
|
Packit |
9a2dfb |
rnf (JSBool b) = rnf b
|
|
Packit |
9a2dfb |
rnf (JSRational b r) = rnf b `seq` rnf r `seq` ()
|
|
Packit |
9a2dfb |
rnf (JSString s) = rnf (fromJSString s)
|
|
Packit |
9a2dfb |
rnf (JSArray vs) = rnf vs
|
|
Packit |
9a2dfb |
rnf (JSObject kvs) = rnf (fromJSObject kvs)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
main :: IO ()
|
|
Packit |
9a2dfb |
main = do
|
|
Packit |
9a2dfb |
(cnt:args) <- getArgs
|
|
Packit |
9a2dfb |
let count = read cnt :: Int
|
|
Packit |
9a2dfb |
forM_ args $ \arg -> do
|
|
Packit |
9a2dfb |
putStrLn $ arg ++ ":"
|
|
Packit |
9a2dfb |
start <- getCurrentTime
|
|
Packit |
9a2dfb |
let loop !good !bad
|
|
Packit |
9a2dfb |
| good+bad >= count = return (good, bad)
|
|
Packit |
9a2dfb |
| otherwise = do
|
|
Packit |
9a2dfb |
s <- readFile arg
|
|
Packit |
9a2dfb |
case decodeStrict s of
|
|
Packit |
9a2dfb |
Ok (_::JSValue) -> loop (good+1) 0
|
|
Packit |
9a2dfb |
_ -> loop 0 (bad+1)
|
|
Packit |
9a2dfb |
(good, _) <- loop 0 0
|
|
Packit |
9a2dfb |
end <- getCurrentTime
|
|
Packit |
9a2dfb |
putStrLn $ " " ++ show good ++ " good, " ++ show (diffUTCTime end start)
|