public static void latexOutput(BenchPerformance[] tests, PrintStream ps) {
    String header = "\\begin{tabular}{|l|";
    for (int i = 0; i < tests.length; i++) header += "r";
    header += "|}";
    ps.println(header);
    ps.println("\\hline");

    ps.printf("%35s ", "measure");
    for (BenchPerformance t : tests) ps.printf("& %10s ", t.g.getId());
    ps.println("\\\\");
    ps.println("\\hline");

    for (Measures m : Measures.values()) {
      // skip if not measured
      if (!tests[0].measureValues.containsKey(m)) continue;
      ps.printf("%35s ", "\\lstinline~" + m.name() + "~");
      for (BenchPerformance t : tests) {
        double val = t.measureValues.get(m);
        if (m == Measures.MEMORY) val /= 1 << 20;
        else val /= 1000;
        ps.printf("& %10.3f ", val);
      }
      ps.println("\\\\");
    }
    ps.println("\\hline");
    ps.println("\\end{tabular}");
  }