hegel-0.1.0: conformance/TestText.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Conformance binary: generates text values and writes metrics.
module Main (main) where
import qualified Data.Aeson as Aeson
import Data.Aeson (Value (..))
import qualified Data.ByteString.Lazy.Char8 as LBS
import Data.Maybe (fromMaybe, listToMaybe)
import qualified Data.Map.Strict as Map
import qualified Data.Text as T
import Hegel
import System.Environment (getArgs)
parseParams :: IO (Map.Map String Value)
parseParams = do
args <- getArgs
pure $
fromMaybe Map.empty $
Aeson.decode . LBS.pack =<< listToMaybe args
getIntParam :: Map.Map String Value -> String -> Maybe Int
getIntParam m k = round <$> (getNumber =<< Map.lookup k m)
where
getNumber (Number n) = Just n
getNumber _ = Nothing
main :: IO ()
main = do
params <- parseParams
let minSize = getIntParam params "min_size"
let maxSize = getIntParam params "max_size"
testCases <- getTestCases
runHegelTest (\settings -> settings { settingsTestCases = testCases }) $ \tc -> do
t <- draw tc (text def { rangeMin = minSize, rangeMax = maxSize })
-- T.length counts Unicode codepoints
writeMetrics [("length", show (T.length t))]