modern-uri-0.3.0.0: bench/memory/Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Data.ByteString (ByteString)
import Data.Maybe (fromJust)
import Data.String (IsString (..))
import Data.Text (Text)
import Data.Void
import Text.Megaparsec
import Text.URI (URI)
import Weigh
import qualified Text.URI as URI
main :: IO ()
main = mainWith $ do
setColumns [Case, Allocated, GCs, Max]
bparser turiStr
bparserBs turiStr
brender turi
brenderBs turi
brenderStr turi
----------------------------------------------------------------------------
-- Helpers
-- | Test 'URI' as a polymorphic string.
turiStr :: IsString a => a
turiStr = "https://mark:secret@github.com:443/mrkkrp/modern-uri?foo=bar#fragment"
-- | Test 'URI' in parsed form.
turi :: URI
turi = fromJust (URI.mkURI turiStr)
-- | Benchmark memory usage of the 'URI' parser with given input.
bparser :: Text -> Weigh ()
bparser = func "text parser" (parse p "")
where
p = URI.parser <* eof :: Parsec Void Text URI
-- | Like 'bparser' but accepts a 'ByteString'.
bparserBs :: ByteString -> Weigh ()
bparserBs = func "bs parser" (parse p "")
where
p = URI.parserBs <* eof :: Parsec Void ByteString URI
-- | Benchmark memory usage of the 'URI' render with given input.
brender :: URI -> Weigh ()
brender = func "text render" URI.render
-- | The same as 'brender' but for the 'URI.renderBs' render.
brenderBs :: URI -> Weigh ()
brenderBs = func "bs render" URI.renderBs
-- | The same as 'brender' but for the 'URI.renderString' render.
brenderStr :: URI -> Weigh ()
brenderStr = func "str render" URI.renderStr