updates to tests
diff --git a/data.py b/data.py
new file mode 100644
index 0000000..5569616
--- /dev/null
+++ b/data.py
@@ -0,0 +1,113 @@
+import re
+import sys
+
+
+splitter_rr = "(?ms)=====+\n"
+
+
+def get_data_from_output(fname):
+    results = {}
+    fc = open(fname).read()
+
+    for block in re.split(splitter_rr, fc):
+        block = block.strip()
+        if not block.startswith("[{u'__meta__':"):
+            continue
+        for val in eval(block):
+            meta = val['__meta__']
+            meta['sync'] = 's' if meta['sync'] else 'a'
+            key = "{action} {sync} {blocksize}k".format(**meta)
+            results.setdefault(key, []).append(val['bw_mean'])
+
+    processed_res = {}
+
+    for k, v in results.items():
+        v.sort()
+        med = float(sum(v)) / len(v)
+        ran = sum(abs(x - med) for x in v) / len(v)
+        processed_res[k] = (int(med), int(ran))
+
+    return processed_res
+
+
+def ksort(x):
+    op, sync, sz = x.split(" ")
+    return (op, sync, int(sz[:-1]))
+
+
+def show_data(path1, path2=None):
+    templ_1 = "  {:>10}  {:>5}  {:>5}     {:>6} ~ {:>5} {:>2}% {:>5}"
+    templ_2 = templ_1 + "      {:>6} ~ {:>5} {:>2}% {:>5} ----  {:>6}%  "
+
+    ln_1 = templ_1.replace("<", "^").replace(">", "^")
+    ln_1 = ln_1.format("Oper", "Sync", "BSZ", "BW1", "DEV1", "%", "IOPS1")
+
+    ln_2 = templ_2.replace("<", "^").replace(">", "^")
+    ln_2 = ln_2.format("Oper", "Sync", "BSZ", "BW1", "DEV1", "%",
+                       "IOPS1", "BW2", "DEV2", "%", "IOPS2", "DIFF %")
+
+    sep_1 = '-' * len(ln_1)
+    sep_2 = '-' * len(ln_2)
+
+    res_1 = get_data_from_output(path1)
+
+    if path2 is None:
+        res_2 = None
+        sep = sep_1
+        ln = ln_1
+        templ = templ_1
+    else:
+        res_2 = get_data_from_output(path2)
+        sep = sep_2
+        ln = ln_2
+        templ = templ_2
+
+    print sep
+    print ln
+    print sep
+
+    prev_tp = None
+
+    common_keys = set(res_1.keys())
+
+    if res_2 is not None:
+        common_keys &= set(res_2.keys())
+
+    for k in sorted(common_keys, key=ksort):
+        tp = k.rsplit(" ", 1)[0]
+        op, s, sz = k.split(" ")
+        s = 'sync' if s == 's' else 'async'
+
+        if tp != prev_tp and prev_tp is not None:
+            print sep
+
+        prev_tp = tp
+
+        m1, d1 = res_1[k]
+        iops1 = m1 / int(sz[:-1])
+        perc1 = int(d1 * 100.0 / m1 + 0.5)
+
+        if res_2 is not None:
+            m2, d2 = res_2[k]
+            iops2 = m2 / int(sz[:-1])
+            perc2 = int(d2 * 100.0 / m2 + 0.5)
+            avg_diff = int(((m2 - m1) * 100.) / m2 + 0.5)
+
+        if res_2 is not None:
+            print templ.format(op, s, sz, m1, d1, perc1, iops1,
+                               m2, d2, perc2, iops2, avg_diff)
+        else:
+            print templ.format(op, s, sz, m1, d1, perc1, iops1)
+
+    print sep
+
+
+def main(argv):
+    path1 = argv[0]
+    path2 = argv[1] if len(argv) > 1 else None
+    show_data(path1, path2)
+    return 0
+
+if __name__ == "__main__":
+    exit(main(sys.argv[1:]))
+# print " ", results[k]