crosperf: unit test for CPU cycles table generator

This patch added unit test for CPU table generation in tabulator.py

TEST=passed all unit tests in cros_utils and crosperf
BUG=chromium:917484
CQ-DEPEND=CL:1389035

Change-Id: Ib10bea1470fca1c5dbab8ad39b9684dd473a6183
Reviewed-on: https://chromium-review.googlesource.com/1392428
Commit-Ready: Zhizhou Yang <zhizhouy@google.com>
Tested-by: Zhizhou Yang <zhizhouy@google.com>
Reviewed-by: Luis Lozano <llozano@chromium.org>
diff --git a/cros_utils/tabulator_test.py b/cros_utils/tabulator_test.py
index 21cd1e7..6d3ff55 100644
--- a/cros_utils/tabulator_test.py
+++ b/cros_utils/tabulator_test.py
@@ -103,6 +103,47 @@
     table = tf.GetCellTable()
     self.assertTrue(table)
 
+  def testCPUCyclesTableGenerator(self):
+    keyvals = {'bench1': [[{'cpu_cycles': 1}, {'cpu_cycles': 2}],
+                          [{'cpu_cycles': 3}, {'cpu_cycles': 4}]],
+               'bench2': [[{'cpu_cycles': 5}, {}],
+                          [{'cpu_cycles': 6}, {'cpu_cycles': 7}]]}
+    weights = {'bench1': 0.2, 'bench2': 0.7}
+    iter_counts = {'bench1': 2, 'bench2': 2}
+    labels = ['vanilla', 'modified']
+    tg = tabulator.CPUCyclesTableGenerator(keyvals, labels, iter_counts,
+                                           weights)
+    (table, new_keyvals, new_iter_counts) = tg.GetTable()
+
+    columns = [
+        tabulator.Column(tabulator.IterationResult(), tabulator.Format()),
+        tabulator.Column(tabulator.AmeanResult(), tabulator.Format()),
+        tabulator.Column(tabulator.AmeanRatioResult(),
+                         tabulator.PercentFormat()),
+    ]
+    # This is the function to load column info.
+    tf = tabulator.TableFormatter(table, columns, cpu_table=True)
+    # This is the function where to do all weighting calculation.
+    cell_table = tf.GetCellTable('summary')
+    self.assertTrue(cell_table)
+
+    header = table.pop(0)
+    self.assertTrue(header == ['Benchmarks', 'Weights', 'vanilla', 'modified'])
+    row = table.pop(0)
+    self.assertTrue(row == ['bench1', 0.2, ((2, 0), [1*0.2, 2*0.2]),
+                                           ((2, 0), [3*0.2, 4*0.2])])
+    row = table.pop(0)
+    self.assertTrue(row == ['bench2', 0.7, ((1, 1), [5*0.7, None]),
+                                           ((2, 0), [6*0.7, 7*0.7])])
+    row = table.pop(0)
+    self.assertTrue(row == ['Composite Benchmark (cycles)', 'N/A',
+                            ((1, 1), [1*0.2+5*0.7, None]),
+                            ((2, 0), [3*0.2+6*0.7, 4*0.2+7*0.7])])
+
+    self.assertTrue('Composite Benchmark' in new_keyvals.keys())
+    self.assertTrue('Composite Benchmark' in new_iter_counts.keys())
+
+
   def testColspan(self):
     simple_table = [
         ['binary', 'b1', 'b2', 'b3'],