{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}

module Main (main) where

import Prelude ()
import Prelude.Compat

import Criterion.Main
import qualified Data.Aeson.Parser.UnescapeFFI as FFI
import qualified Data.Aeson.Parser.UnescapePure as Pure

import qualified Data.ByteString.Char8 as BS
import System.Environment (getArgs, withArgs)

main :: IO ()
main = do
  args_ <- getArgs
  let (args, p, n) =
        case args_ of
          "--pattern" : p : args_ -> k p args_
          _ -> k "\\\"" args_
      k p args_ =
        case args_ of
          "--repeat" : n : args_ -> (args_, p, read n)
          args_ -> (args_, p, 10000)
      input = BS.concat $ replicate n $ BS.pack p
  withArgs args $ defaultMain
    [ bench "ffi"  $ whnf FFI.unescapeText input
    , bench "pure" $ whnf Pure.unescapeText input
    ]
