#!/usr/bin/env python
# -*- coding:utf-8 -*-

import time
import anydbm
SRC='bench.dbm'
import logging
import pytc
TCSRC='tcbench.dbm'

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename='db_bench.log',
                    filemode='w')

def t_profile(msg):
    def inner_func(func):
        def inner_func_arg(type,*args,**keys):
            t=time.clock()
            r=func(*args,**keys)
            t=time.clock()-t
            if t>0.0:
                m='%s %s count=%d time=%d qps=%f' % (type,msg,r,1000*t,r/t)
                print m
                logging.info(m)
            return r
        return inner_func_arg
    return inner_func

@t_profile('write')
def write(db,limit):
    for i in range(limit):
        db[str(i)]=str(i)
    return limit

@t_profile('read')
def read(db,limit):
    for i in range(limit):
        v=db[str(i)]
        assert(i==int(v))
    return limit

def serial(type,db,limit):
    print type,limit
    write(type,db,limit)
    read(type,db,limit)

def main():
    for i in range(4,7):
        #db=anydbm.open(SRC,'n')
        #serial('dbm',db,10**i)
        for j in range(2,12,2):
            db=pytc.HDB(TCSRC,pytc.HDBOWRITER|pytc.HDBOTRUNC)
            serial('tcdbm',db,j*(10**i))
        #if 10**i<1000001:
        #    serial('hash',{},10**i)
if __name__=='__main__':main()
