packages feed

hegel-0.1.0: conformance/TestIntegers.hs

{-# LANGUAGE OverloadedStrings #-}

-- | Conformance binary: generates integer 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 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 minVal = getIntParam params "min_value"
  let maxVal = getIntParam params "max_value"
  testCases <- getTestCases
  runHegelTest (\settings -> settings { settingsTestCases = testCases }) $ \tc -> do
    n <- draw tc (integers def { rangeMin = minVal, rangeMax = maxVal })
    writeMetrics [("value", show n)]