module Run where
import Control.Monad.Error
import Benchmark
import Definitions
import Report
import Shellish hiding ( run )
import Standard
import qualified TabularRST as TR
benchMany :: [(TestRepo, [Benchmark a])] -> [TestBinary] -> Command [(Test a, Maybe MemTimeOutput)]
benchMany reposbenches bins = do
fmap concat $ forM reposbenches $ \(r,benches) -> do
res <- sequence
[ do let test = Test bench repo bin
memtime <- run test
return (test, memtime)
| bin <- bins
, repo <- repoAndVariants bin r
, bench <- filter (noSkip r) benches ]
case repoTables benchmarks res of
[] -> echo $ "No benchmarks to run for " ++ trCoreName r
[t] -> echo_n $ TR.render id id id $ tabulateRepo formatTimeResult t
_ -> error "Not expecting more than one table for a repo and its variants"
return res
where
noSkip r b = not (description b `elem` trSkip r)
repoAndVariants bin r = map (r `tweakVia`) (appropriateVariants bin (trVariants r))
tweakVia tr v =
case vId v of
DefaultVariant -> tr
_ -> tr { trPath = variantRepoName v (trPath tr)
, trName = trName tr ++ " " ++ vShortName v
}