From c563717f28e3ece7646cabc35c6aad2fe5620c86 Mon Sep 17 00:00:00 2001
From: zooko <zooko@zooko.com>
Date: Fri, 9 Nov 2007 23:44:55 +0530
Subject: [PATCH] zfec: add benchmarks for easyfec (untested)

darcs-hash:5fbe3fc4ef8a98da3633cccdb940740ccc2efb1e
---
 zfec/bench/bench_zfec.py | 40 ++++++++++++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/zfec/bench/bench_zfec.py b/zfec/bench/bench_zfec.py
index 6f37b21..1e85888 100644
--- a/zfec/bench/bench_zfec.py
+++ b/zfec/bench/bench_zfec.py
@@ -1,4 +1,5 @@
-from zfec import filefec
+from zfec import easyfec, Encoder, filefec
+from pyutil import mathutil
 
 import os
 
@@ -15,6 +16,22 @@ def donothing(results, reslenthing):
 K=3
 M=10
 
+d = ""
+ds = []
+easyfecenc = None
+fecenc = None
+def _make_new_rand_data(size):
+    global d, easyfecenc, fecenc
+    d = os.urandom(size)
+    del ds[:]
+    ds.extend([None]*K)
+    blocksize = mathutil.div_ceil(size, K)
+    for i in range(K):
+        ds[i] = d[i*blocksize:(i+1)*blocksize]
+    ds[-1] = ds[-1] + "\x00" * (len(ds[-2]) - len(ds[-1]))
+    easyfecenc = easyfec.Encoder(K,M)
+    fecenc = Encoder(K,M)
+
 import sha
 hashers = [ sha.new() for i in range(M) ]
 def hashem(results, reslenthing):
@@ -39,11 +56,26 @@ def _encode_file_not_really_and_hash(N):
 def _encode_file_and_hash(N):
     filefec.encode_file(open(FNAME, "rb"), hashem, K, M)
 
+def _encode_data_not_really(N):
+    i = 0
+    for c in d:
+        i += 1
+    assert len(d) == N == i
+    pass
+
+def _encode_data_easyfec(N):
+    easyfecenc.encode(d)
+
+def _encode_data_fec(N):
+    fecenc.encode(ds)
+
 def bench():
     # for f in [_encode_file_stringy_easyfec, _encode_file_stringy, _encode_file, _encode_file_not_really,]:
     # for f in [_encode_file,]:
-    for f in [_encode_file_not_really, _encode_file_not_really_and_hash, _encode_file, _encode_file_and_hash,]:
+    # for f in [_encode_file_not_really, _encode_file_not_really_and_hash, _encode_file, _encode_file_and_hash,]:
+    for f in [_encode_data_not_really, _encode_data_easyfec, _encode_data_fec,]:
         print f
-        benchutil.bench(f, initfunc=_make_new_rand_file, TOPXP=23, MAXREPS=128, MAXTIME=64)
+        benchutil.bench(f, initfunc=_make_new_rand_data, TOPXP=8, MAXREPS=256, MAXTIME=64)
+        benchutil.bench(f, initfunc=_make_new_rand_data, TOPXP=16, MAXREPS=256, MAXTIME=64)
 
-# bench()
+bench()
-- 
2.45.2