symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/time_hashlib.py
author Gareth Stockwell <gareth.stockwell@accenture.com>
Wed, 22 Sep 2010 15:40:40 +0100
branchgraphics-phase-3
changeset 111 345f1c88c950
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Fixes to syborg-graphicswrapper.vcproj These changes allow syborg-graphicswrapper to link against the hostthreadadapter and khronosapiwrapper libraries built by the graphics.simulator component. The .vcproj file uses relative paths, which requires that the following three packages are laid out as follows: os/ graphics adapt/ graphics.simulator qemu

# It's intended that this script be run by hand.  It runs speed tests on
# hashlib functions; it does not test for correctness.

import sys, time
import hashlib


def creatorFunc():
    raise RuntimeError, "eek, creatorFunc not overridden"

def test_scaled_msg(scale, name):
    iterations = 106201/scale * 20
    longStr = 'Z'*scale

    localCF = creatorFunc
    start = time.time()
    for f in xrange(iterations):
        x = localCF(longStr).digest()
    end = time.time()

    print ('%2.2f' % (end-start)), "seconds", iterations, "x", len(longStr), "bytes", name

def test_create():
    start = time.time()
    for f in xrange(20000):
        d = creatorFunc()
    end = time.time()

    print ('%2.2f' % (end-start)), "seconds", '[20000 creations]'

def test_zero():
    start = time.time()
    for f in xrange(20000):
        x = creatorFunc().digest()
    end = time.time()

    print ('%2.2f' % (end-start)), "seconds", '[20000 "" digests]'



hName = sys.argv[1]

#
# setup our creatorFunc to test the requested hash
#
if hName in ('_md5', '_sha'):
    exec 'import '+hName
    exec 'creatorFunc = '+hName+'.new'
    print "testing speed of old", hName, "legacy interface"
elif hName == '_hashlib' and len(sys.argv) > 3:
    import _hashlib
    exec 'creatorFunc = _hashlib.%s' % sys.argv[2]
    print "testing speed of _hashlib.%s" % sys.argv[2], getattr(_hashlib, sys.argv[2])
elif hName == '_hashlib' and len(sys.argv) == 3:
    import _hashlib
    exec 'creatorFunc = lambda x=_hashlib.new : x(%r)' % sys.argv[2]
    print "testing speed of _hashlib.new(%r)" % sys.argv[2]
elif hasattr(hashlib, hName) and callable(getattr(hashlib, hName)):
    creatorFunc = getattr(hashlib, hName)
    print "testing speed of hashlib."+hName, getattr(hashlib, hName)
else:
    exec "creatorFunc = lambda x=hashlib.new : x(%r)" % hName
    print "testing speed of hashlib.new(%r)" % hName

try:
    test_create()
except ValueError:
    print
    print "pass argument(s) naming the hash to run a speed test on:"
    print " '_md5' and '_sha' test the legacy builtin md5 and sha"
    print " '_hashlib' 'openssl_hName' 'fast' tests the builtin _hashlib"
    print " '_hashlib' 'hName' tests builtin _hashlib.new(shaFOO)"
    print " 'hName' tests the hashlib.hName() implementation if it exists"
    print "         otherwise it uses hashlib.new(hName)."
    print
    raise

test_zero()
test_scaled_msg(scale=106201, name='[huge data]')
test_scaled_msg(scale=10620, name='[large data]')
test_scaled_msg(scale=1062, name='[medium data]')
test_scaled_msg(scale=424, name='[4*small data]')
test_scaled_msg(scale=336, name='[3*small data]')
test_scaled_msg(scale=212, name='[2*small data]')
test_scaled_msg(scale=106, name='[small data]')
test_scaled_msg(scale=creatorFunc().digest_size, name='[digest_size data]')
test_scaled_msg(scale=10, name='[tiny data]')