changeset 1197:03adf23f98ed

7901389: LaTeX formatters should honor -Djmh.scorePrecision settings and pretty printing
author shade
date Wed, 15 Apr 2015 22:04:59 +0300
parents 5f5bfa899790
children 1c90c38e04d5
files jmh-core/src/main/java/org/openjdk/jmh/results/format/LaTeXResultFormat.java jmh-core/src/main/java/org/openjdk/jmh/util/ScoreFormatter.java jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.root jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.ru jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.us
diffstat 5 files changed, 98 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/jmh-core/src/main/java/org/openjdk/jmh/results/format/LaTeXResultFormat.java	Wed Apr 15 19:25:00 2015 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/results/format/LaTeXResultFormat.java	Wed Apr 15 22:04:59 2015 +0300
@@ -28,6 +28,7 @@
 import org.openjdk.jmh.results.Result;
 import org.openjdk.jmh.results.RunResult;
 import org.openjdk.jmh.util.ClassUtils;
+import org.openjdk.jmh.util.ScoreFormatter;
 
 import java.io.PrintStream;
 import java.util.Collection;
@@ -52,11 +53,14 @@
 
         Set<String> units = new HashSet<String>();
         for (RunResult rr : results) {
+            String benchmark = rr.getParams().getBenchmark();
+            benchNames.add(benchmark);
             params.addAll(rr.getParams().getParamsKeys());
             units.add(rr.getPrimaryResult().getScoreUnit());
-            benchNames.add(rr.getParams().getBenchmark());
-            for (String label : rr.getSecondaryResults().keySet()) {
-                benchNames.add(rr.getParams().getBenchmark() + ":" + label);
+            Map<String, Result> secondaries = rr.getSecondaryResults();
+            for (String label : secondaries.keySet()) {
+                benchNames.add(benchmark + ":" + label);
+                units.add(secondaries.get(label).getScoreUnit());
             }
         }
 
@@ -68,14 +72,16 @@
         printHeader(params, singleUnit, unit);
 
         for (RunResult rr : results) {
-            BenchmarkParams benchmarkParams = rr.getParams();
+            BenchmarkParams bp = rr.getParams();
+            String benchmark = bp.getBenchmark();
             Result res = rr.getPrimaryResult();
 
-            printLine(benchmarkParams.getBenchmark(), benchmarkParams, params, prefixes, singleUnit, res);
+            printLine(benchmark, bp, params, prefixes, singleUnit, res);
 
-            for (String label : rr.getSecondaryResults().keySet()) {
-                Result subRes = rr.getSecondaryResults().get(label);
-                printLine(benchmarkParams.getBenchmark() + ":" + label, benchmarkParams, params, prefixes, singleUnit, subRes);
+            Map<String, Result> secondaries = rr.getSecondaryResults();
+            for (String label : secondaries.keySet()) {
+                Result subRes = secondaries.get(label);
+                printLine(benchmark + ":" + label, bp, params, prefixes, singleUnit, subRes);
             }
         }
 
@@ -90,30 +96,33 @@
         out.print("rl" + (singleUnit ? "" : "l") + "}\n");
         out.print(" \\multicolumn{1}{c|}{\\texttt{Benchmark}} & ");
         for (String p : params) {
-            out.printf("\\texttt{%s}", p);
-            out.print(" & ");
+            out.printf("\\texttt{%s} & ", p);
         }
-        out.print(" \\multicolumn{" + (singleUnit ? 2 : 3) + "}{c}{\\texttt{Score" + (singleUnit ? ", " + unit : "") + "}} \\\\\n");
+        out.print("\\multicolumn{" + (singleUnit ? 2 : 3) + "}{c}{\\texttt{Score" + (singleUnit ? ", " + unit : "") + "}} \\\\\n");
         out.print("\\hline\n");
     }
 
-    private void printFooter() {out.print("\\end{tabular}");}
+    private void printFooter() {
+        out.print("\\end{tabular}");
+    }
 
     private void printLine(String label, BenchmarkParams benchParams, SortedSet<String> params,
                            Map<String, String> prefixes, boolean singleUnit, Result res) {
         out.printf("\\texttt{%s} & ", escape(prefixes.get(label)));
         for (String p : params) {
-            out.printf("\\texttt{%s}", escape(benchParams.getParam(p)));
-            out.print(" & ");
+            out.printf("\\texttt{%s} & ", escape(benchParams.getParam(p)));
         }
-        out.printf("\\texttt{%5.3f} & ", res.getScore());
-        out.printf("\\scriptsize $\\pm$ \\texttt{%5.3f}", res.getScoreError());
+        out.printf("\\texttt{%s} & ", ScoreFormatter.formatLatex(res.getScore()));
+
+        if (!Double.isNaN(res.getScoreError()) && !ScoreFormatter.isApproximate(res.getScore())) {
+            out.printf("\\scriptsize $\\pm$ \\texttt{%s} ", ScoreFormatter.formatError(res.getScoreError()));
+        }
+
         if (!singleUnit) {
-            out.printf(" & \\texttt{%s}", res.getScoreUnit());
+            out.print("& ");
+            out.printf("\\texttt{%s}", res.getScoreUnit());
         }
-        out.print(" \\\\");
-
-        out.print("\n");
+        out.print(" \\\\\n");
     }
 
     private static String escape(String s) {
--- a/jmh-core/src/main/java/org/openjdk/jmh/util/ScoreFormatter.java	Wed Apr 15 19:25:00 2015 +0300
+++ b/jmh-core/src/main/java/org/openjdk/jmh/util/ScoreFormatter.java	Wed Apr 15 22:04:59 2015 +0300
@@ -52,6 +52,15 @@
         }
     }
 
+    public static String formatLatex(double score) {
+        if (isApproximate(score)) {
+            int power = (int) Math.round(Math.log10(score));
+            return "$\\approx " + ((power != 0) ? "10^{" + power + "}" : "0") + "$";
+        } else {
+            return String.format("%." + PRECISION + "f", score);
+        }
+    }
+
     public static String formatError(double error) {
         return String.format("%." + PRECISION + "f", Math.max(error, ULP));
     }
--- a/jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.root	Wed Apr 15 19:25:00 2015 +0300
+++ b/jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.root	Wed Apr 15 22:04:59 2015 +0300
@@ -1,23 +1,23 @@
 \begin{tabular}{r|l|l|l|l|l|rl}
- \multicolumn{1}{c|}{\texttt{Benchmark}} & \texttt{param0} & \texttt{param1} & \texttt{param2} & \texttt{param3} & \texttt{param4} &  \multicolumn{2}{c}{\texttt{Score, ops/ms}} \\
+ \multicolumn{1}{c|}{\texttt{Benchmark}} & \texttt{param0} & \texttt{param1} & \texttt{param2} & \texttt{param3} & \texttt{param4} & \multicolumn{2}{c}{\texttt{Score, ops/ms}} \\
 \hline
-\texttt{benchmark\_0} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{528.857} & \scriptsize $\pm$ \texttt{278.142} \\
-\texttt{benchmark\_0:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{549.714} & \scriptsize $\pm$ \texttt{320.227} \\
-\texttt{benchmark\_0:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{615.500} & \scriptsize $\pm$ \texttt{319.210} \\
-\texttt{benchmark\_0:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{246.000} & \scriptsize $\pm$ \texttt{847.566} \\
-\texttt{benchmark\_1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{439.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_1:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{953.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_1:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{367.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{545.000} & \scriptsize $\pm$ \texttt{553.337} \\
-\texttt{benchmark\_2:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{434.444} & \scriptsize $\pm$ \texttt{465.183} \\
-\texttt{benchmark\_2:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{470.333} & \scriptsize $\pm$ \texttt{502.273} \\
-\texttt{benchmark\_2:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{574.400} & \scriptsize $\pm$ \texttt{969.535} \\
-\texttt{benchmark\_3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{417.571} & \scriptsize $\pm$ \texttt{362.814} \\
-\texttt{benchmark\_3:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{672.214} & \scriptsize $\pm$ \texttt{287.982} \\
-\texttt{benchmark\_3:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{560.143} & \scriptsize $\pm$ \texttt{289.800} \\
-\texttt{benchmark\_3:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{432.833} & \scriptsize $\pm$ \texttt{1036.758} \\
-\texttt{benchmark\_4} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{956.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{688.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{237.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{599.000} & \scriptsize $\pm$ \texttt{  NaN} \\
+\texttt{benchmark\_0} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{528.857} & \scriptsize $\pm$ \texttt{278.142}  \\
+\texttt{benchmark\_0:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{549.714} & \scriptsize $\pm$ \texttt{320.227}  \\
+\texttt{benchmark\_0:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{615.500} & \scriptsize $\pm$ \texttt{319.210}  \\
+\texttt{benchmark\_0:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{246.000} & \scriptsize $\pm$ \texttt{847.566}  \\
+\texttt{benchmark\_1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{439.000} &  \\
+\texttt{benchmark\_1:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{953.000} &  \\
+\texttt{benchmark\_1:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{367.000} &  \\
+\texttt{benchmark\_2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{545.000} & \scriptsize $\pm$ \texttt{553.337}  \\
+\texttt{benchmark\_2:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{434.444} & \scriptsize $\pm$ \texttt{465.183}  \\
+\texttt{benchmark\_2:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{470.333} & \scriptsize $\pm$ \texttt{502.273}  \\
+\texttt{benchmark\_2:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{574.400} & \scriptsize $\pm$ \texttt{969.535}  \\
+\texttt{benchmark\_3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{417.571} & \scriptsize $\pm$ \texttt{362.814}  \\
+\texttt{benchmark\_3:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{672.214} & \scriptsize $\pm$ \texttt{287.982}  \\
+\texttt{benchmark\_3:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{560.143} & \scriptsize $\pm$ \texttt{289.800}  \\
+\texttt{benchmark\_3:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{432.833} & \scriptsize $\pm$ \texttt{1036.758}  \\
+\texttt{benchmark\_4} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{956.000} &  \\
+\texttt{benchmark\_4:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{688.000} &  \\
+\texttt{benchmark\_4:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{237.000} &  \\
+\texttt{benchmark\_4:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{599.000} &  \\
 \end{tabular}
\ No newline at end of file
--- a/jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.ru	Wed Apr 15 19:25:00 2015 +0300
+++ b/jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.ru	Wed Apr 15 22:04:59 2015 +0300
@@ -1,23 +1,23 @@
 \begin{tabular}{r|l|l|l|l|l|rl}
- \multicolumn{1}{c|}{\texttt{Benchmark}} & \texttt{param0} & \texttt{param1} & \texttt{param2} & \texttt{param3} & \texttt{param4} &  \multicolumn{2}{c}{\texttt{Score, ops/ms}} \\
+ \multicolumn{1}{c|}{\texttt{Benchmark}} & \texttt{param0} & \texttt{param1} & \texttt{param2} & \texttt{param3} & \texttt{param4} & \multicolumn{2}{c}{\texttt{Score, ops/ms}} \\
 \hline
-\texttt{benchmark\_0} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{528,857} & \scriptsize $\pm$ \texttt{278,142} \\
-\texttt{benchmark\_0:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{549,714} & \scriptsize $\pm$ \texttt{320,227} \\
-\texttt{benchmark\_0:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{615,500} & \scriptsize $\pm$ \texttt{319,210} \\
-\texttt{benchmark\_0:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{246,000} & \scriptsize $\pm$ \texttt{847,566} \\
-\texttt{benchmark\_1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{439,000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_1:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{953,000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_1:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{367,000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{545,000} & \scriptsize $\pm$ \texttt{553,337} \\
-\texttt{benchmark\_2:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{434,444} & \scriptsize $\pm$ \texttt{465,183} \\
-\texttt{benchmark\_2:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{470,333} & \scriptsize $\pm$ \texttt{502,273} \\
-\texttt{benchmark\_2:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{574,400} & \scriptsize $\pm$ \texttt{969,535} \\
-\texttt{benchmark\_3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{417,571} & \scriptsize $\pm$ \texttt{362,814} \\
-\texttt{benchmark\_3:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{672,214} & \scriptsize $\pm$ \texttt{287,982} \\
-\texttt{benchmark\_3:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{560,143} & \scriptsize $\pm$ \texttt{289,800} \\
-\texttt{benchmark\_3:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{432,833} & \scriptsize $\pm$ \texttt{1036,758} \\
-\texttt{benchmark\_4} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{956,000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{688,000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{237,000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{599,000} & \scriptsize $\pm$ \texttt{  NaN} \\
+\texttt{benchmark\_0} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{528,857} & \scriptsize $\pm$ \texttt{278,142}  \\
+\texttt{benchmark\_0:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{549,714} & \scriptsize $\pm$ \texttt{320,227}  \\
+\texttt{benchmark\_0:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{615,500} & \scriptsize $\pm$ \texttt{319,210}  \\
+\texttt{benchmark\_0:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{246,000} & \scriptsize $\pm$ \texttt{847,566}  \\
+\texttt{benchmark\_1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{439,000} &  \\
+\texttt{benchmark\_1:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{953,000} &  \\
+\texttt{benchmark\_1:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{367,000} &  \\
+\texttt{benchmark\_2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{545,000} & \scriptsize $\pm$ \texttt{553,337}  \\
+\texttt{benchmark\_2:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{434,444} & \scriptsize $\pm$ \texttt{465,183}  \\
+\texttt{benchmark\_2:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{470,333} & \scriptsize $\pm$ \texttt{502,273}  \\
+\texttt{benchmark\_2:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{574,400} & \scriptsize $\pm$ \texttt{969,535}  \\
+\texttt{benchmark\_3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{417,571} & \scriptsize $\pm$ \texttt{362,814}  \\
+\texttt{benchmark\_3:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{672,214} & \scriptsize $\pm$ \texttt{287,982}  \\
+\texttt{benchmark\_3:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{560,143} & \scriptsize $\pm$ \texttt{289,800}  \\
+\texttt{benchmark\_3:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{432,833} & \scriptsize $\pm$ \texttt{1036,758}  \\
+\texttt{benchmark\_4} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{956,000} &  \\
+\texttt{benchmark\_4:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{688,000} &  \\
+\texttt{benchmark\_4:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{237,000} &  \\
+\texttt{benchmark\_4:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{599,000} &  \\
 \end{tabular}
\ No newline at end of file
--- a/jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.us	Wed Apr 15 19:25:00 2015 +0300
+++ b/jmh-core/src/test/resources/org/openjdk/jmh/results/format/output-golden.latex.us	Wed Apr 15 22:04:59 2015 +0300
@@ -1,23 +1,23 @@
 \begin{tabular}{r|l|l|l|l|l|rl}
- \multicolumn{1}{c|}{\texttt{Benchmark}} & \texttt{param0} & \texttt{param1} & \texttt{param2} & \texttt{param3} & \texttt{param4} &  \multicolumn{2}{c}{\texttt{Score, ops/ms}} \\
+ \multicolumn{1}{c|}{\texttt{Benchmark}} & \texttt{param0} & \texttt{param1} & \texttt{param2} & \texttt{param3} & \texttt{param4} & \multicolumn{2}{c}{\texttt{Score, ops/ms}} \\
 \hline
-\texttt{benchmark\_0} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{528.857} & \scriptsize $\pm$ \texttt{278.142} \\
-\texttt{benchmark\_0:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{549.714} & \scriptsize $\pm$ \texttt{320.227} \\
-\texttt{benchmark\_0:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{615.500} & \scriptsize $\pm$ \texttt{319.210} \\
-\texttt{benchmark\_0:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{246.000} & \scriptsize $\pm$ \texttt{847.566} \\
-\texttt{benchmark\_1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{439.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_1:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{953.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_1:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{367.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{545.000} & \scriptsize $\pm$ \texttt{553.337} \\
-\texttt{benchmark\_2:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{434.444} & \scriptsize $\pm$ \texttt{465.183} \\
-\texttt{benchmark\_2:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{470.333} & \scriptsize $\pm$ \texttt{502.273} \\
-\texttt{benchmark\_2:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{574.400} & \scriptsize $\pm$ \texttt{969.535} \\
-\texttt{benchmark\_3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{417.571} & \scriptsize $\pm$ \texttt{362.814} \\
-\texttt{benchmark\_3:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{672.214} & \scriptsize $\pm$ \texttt{287.982} \\
-\texttt{benchmark\_3:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{560.143} & \scriptsize $\pm$ \texttt{289.800} \\
-\texttt{benchmark\_3:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{432.833} & \scriptsize $\pm$ \texttt{1036.758} \\
-\texttt{benchmark\_4} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{956.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{688.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{237.000} & \scriptsize $\pm$ \texttt{  NaN} \\
-\texttt{benchmark\_4:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{599.000} & \scriptsize $\pm$ \texttt{  NaN} \\
+\texttt{benchmark\_0} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{528.857} & \scriptsize $\pm$ \texttt{278.142}  \\
+\texttt{benchmark\_0:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{549.714} & \scriptsize $\pm$ \texttt{320.227}  \\
+\texttt{benchmark\_0:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{615.500} & \scriptsize $\pm$ \texttt{319.210}  \\
+\texttt{benchmark\_0:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{246.000} & \scriptsize $\pm$ \texttt{847.566}  \\
+\texttt{benchmark\_1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{439.000} &  \\
+\texttt{benchmark\_1:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{953.000} &  \\
+\texttt{benchmark\_1:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{367.000} &  \\
+\texttt{benchmark\_2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{545.000} & \scriptsize $\pm$ \texttt{553.337}  \\
+\texttt{benchmark\_2:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{434.444} & \scriptsize $\pm$ \texttt{465.183}  \\
+\texttt{benchmark\_2:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{470.333} & \scriptsize $\pm$ \texttt{502.273}  \\
+\texttt{benchmark\_2:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{574.400} & \scriptsize $\pm$ \texttt{969.535}  \\
+\texttt{benchmark\_3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{417.571} & \scriptsize $\pm$ \texttt{362.814}  \\
+\texttt{benchmark\_3:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{672.214} & \scriptsize $\pm$ \texttt{287.982}  \\
+\texttt{benchmark\_3:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{560.143} & \scriptsize $\pm$ \texttt{289.800}  \\
+\texttt{benchmark\_3:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{432.833} & \scriptsize $\pm$ \texttt{1036.758}  \\
+\texttt{benchmark\_4} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{956.000} &  \\
+\texttt{benchmark\_4:secondary1} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{688.000} &  \\
+\texttt{benchmark\_4:secondary2} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{237.000} &  \\
+\texttt{benchmark\_4:secondary3} & \texttt{value0} & \texttt{value1} & \texttt{value2} & \texttt{value3} & \texttt{value4} & \texttt{599.000} &  \\
 \end{tabular}
\ No newline at end of file