geval/app/Main.hs

44 lines
1.4 KiB
Haskell
Raw Normal View History

2015-08-17 23:32:00 +02:00
module Main where
2015-08-23 08:14:47 +02:00
import GEval.Core
import GEval.OptionsParser
2015-08-17 23:32:00 +02:00
2015-08-23 08:14:47 +02:00
import System.Environment
2015-08-22 00:00:46 +02:00
import Options.Applicative
2015-09-12 15:36:50 +02:00
import Text.Printf
2018-06-08 12:38:45 +02:00
import System.IO
import System.Exit
import Data.Conduit.SmartSource
2015-08-17 23:32:00 +02:00
main :: IO ()
main = do
args <- getArgs
2015-09-12 15:36:50 +02:00
result <- runGEvalGetOptions args
case result of
Left parseResult -> handleParseResult parseResult >> return ()
2018-06-08 12:38:45 +02:00
Right (opts, Just results) -> showTheResult opts results
2015-09-12 15:36:50 +02:00
Right (_, Nothing) -> return ()
showTheResult :: GEvalOptions -> [(SourceSpec, [MetricValue])] -> IO ()
showTheResult opts [(_, vals)] = showTheResult' opts vals
showTheResult _ _ = error "multiple outputs not handled yet"
showTheResult' :: GEvalOptions -> [MetricValue] -> IO ()
2018-06-08 12:38:45 +02:00
-- do not show the metric if just one was given
showTheResult' opts [val] = putStrLn $ formatTheResult (gesPrecision $ geoSpec opts) val
showTheResult' opts [] = do
2018-06-08 12:38:45 +02:00
hPutStrLn stderr "no metric given, use --metric option"
exitFailure
showTheResult' opts vals = mapM_ putStrLn $ map (formatTheMetricAndResult (gesPrecision $ geoSpec opts)) $ zip (gesMetrics $ geoSpec opts) vals
2018-06-08 12:38:45 +02:00
formatTheMetricAndResult :: Maybe Int -> (Metric, MetricValue) -> String
formatTheMetricAndResult mPrecision (metric, val) = (show metric) ++ "\t" ++ (formatTheResult mPrecision val)
2015-09-12 15:36:50 +02:00
formatTheResult :: Maybe Int -> MetricValue -> String
formatTheResult Nothing = show
formatTheResult (Just prec) = printf "%0.*f" prec