rootslab/shashi

View on GitHub
bench/2-hash-32-items-bench.js

Summary

Maintainability
B
6 hrs
Test Coverage

var log = console.log
    , Brando = require( 'brando' )
    , Shashi = require( '../' )
    // a prime ~ 2^17 elements
    , p = 104729
    // max items to hash in the current range
    , i = 32
    // how many random hash function to generate
    , h = 2
    , result = Shashi( h, i, p )
    , ufn = result[ 0 ]
    , seed = result[ 1 ]
    // generate random sequence for input with Math.random()
    , seq = Brando.emt( i, p - 2 ).fill()
    , input = seq.result
    , v0 = -1
    , v1 = -1
    , stime = -1
    , etime = -1
    , runs = 2048
    , j = runs
    // , fn0 = ufn.bind( null, 0 )
    // , fn1 = ufn.bind( null, 1 )
    ;

log();
log( '- calculate %d hash values from input data (%d times)', h, runs );

/* 
 * this loop is trivial, it parses the same values
 * every time from the sequence, it is used only to
 * get an average value.
 */
stime = Date.now();
for ( ; ~j; --j ) {
    v0 = ufn( 0, input ); // fn0( input );
    v1 = ufn( 1, input ); // fn1( input );
}
etime = ( Date.now() - stime ) / 1000;

log();
log( '- uhash: %d functions', h );
log();
log( '- prime: %d', p );
log( '- range: [0,%d]', p - 2 );
log( '- items: %d', i );
log();
log( '- isize: %d bytes', seq.result.length );
log( '- ssize: %d bytes', seed.result.length );
log();
log( '- truns: %d hashes', runs * 3 );
log( '- etime: %d secs', etime );
log();
log( '- hrate: %d hash/sec', ( runs * 3 / etime ).toFixed( 2 ) );
log();