+latexProgTable :: [ResultTable] -> PerProgTableSpec -> Normalise -> ShowS
+latexProgTable results (SpecP _long_name _ _ get_result get_status result_ok) norm
+ = latex_show_results results get_result get_status result_ok norm
+
+latex_show_results
+ :: Result a
+ => [ResultTable]
+ -> (Results -> Maybe a)
+ -> (Results -> Status)
+ -> (a -> Bool)
+ -> Normalise
+ -> ShowS
+
+latex_show_results [] _ _ _ _
+ = error "latex_show_results: Can't happen?"
+latex_show_results (r:rs) f stat _result_ok norm
+ = makeLatexTable $
+ [ TableRow (BoxString prog : boxes) |
+ (prog,boxes) <- results_per_prog ] ++
+ if nodevs then [] else
+ [ TableLine,
+ TableRow (BoxString "Min" : mins),
+ TableRow (BoxString "Max" : maxs),
+ TableRow (BoxString "Geometric Mean" : gms) ]
+ where
+ -- results_per_prog :: [ (String,[BoxValue a]) ]
+ results_per_prog = [ (prog,tail xs) | (prog,xs) <- map calc (Map.toList r) ]
+ calc = calc_result rs f stat (const True) (normalise norm)
+
+ results_per_run = transpose (map snd results_per_prog)
+ (_lows,gms,_highs) = unzip3 (map calc_gmsd results_per_run)
+ (mins, maxs) = unzip (map calc_minmax results_per_run)
+
+normalise :: Result a => Normalise -> a -> a -> BoxValue
+normalise norm = case norm of
+ NormalisePercent -> convert_to_percentage
+ NormaliseRatio -> normalise_to_base
+ NormaliseNone -> \_base res -> toBox res
+