module BuildBox.FileFormat.BuildResults
( BuildResults(..)
, mergeResults)
where
import BuildBox.Time
import BuildBox.Benchmark
import BuildBox.Command.Environment
import BuildBox.Pretty
import BuildBox.Aspect
import Data.List
data BuildResults
= BuildResults
{ buildResultTime :: UTCTime
, buildResultEnvironment :: Environment
, buildResultBench :: [BenchResult Single] }
deriving (Show, Read)
instance Pretty BuildResults where
ppr results
= hang (ppr "BuildResults") 2 $ vcat
[ ppr "time: " <> (ppr $ buildResultTime results)
, ppr $ buildResultEnvironment results
, ppr ""
, vcat $ punctuate (ppr "\n")
$ map ppr
$ buildResultBench results ]
mergeResults :: [BuildResults] -> BuildResults
mergeResults results
= let
benchResults
= concatMap buildResultBench results
benchNames
= sort $ nub
$ map benchResultName
$ concatMap buildResultBench results
Just newBenchResults
= sequence
$ [ find (\br -> benchResultName br == name) benchResults
| name <- benchNames]
(lastResults : _) = reverse results
in BuildResults
{ buildResultTime = buildResultTime lastResults
, buildResultEnvironment = buildResultEnvironment lastResults
, buildResultBench = newBenchResults }