73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var log = console.log | ||
|  |     , assert = require( 'assert' ) | ||
|  |     , Qap = require( '../' ) | ||
|  |     , mb = 300 | ||
|  |     , pmb = 20 | ||
|  |     , dlen = mb * 1024 * 1024 | ||
|  |     , plen = pmb * 1024 * 1024 | ||
|  |     , pattern = new Buffer( plen ) | ||
|  |     , data = new Buffer( dlen ) | ||
|  |     , i = 0 | ||
|  |     , rand = 0 | ||
|  |     , qap = null | ||
|  |     , indexes = [] | ||
|  |     , results = null | ||
|  |     , otime = 0 | ||
|  |     , ttime = 0 | ||
|  |     , stime = 0 | ||
|  |     , etime = 0 | ||
|  |     // pre-process time
 | ||
|  |     , pptime = 0 | ||
|  |     // memory usage
 | ||
|  |     , smem = null | ||
|  |     , emem = null | ||
|  |     ; | ||
|  | 
 | ||
|  | 
 | ||
|  | log( '- benchmark for worst case with a big pattern, not sparse in data' ); | ||
|  | 
 | ||
|  | stime = Date.now(); | ||
|  | for ( ; i < plen; ++i ) { | ||
|  |     rand = Math.floor( Math.random() * 255 * plen ) % 255; | ||
|  |     pattern[ i ] = rand;  | ||
|  | } | ||
|  | log( '- created %d MB big pattern in %d secs', pmb, ( ( Date.now()- stime ) / 1000 ).toFixed( 1 ) ); | ||
|  | 
 | ||
|  | smem = process.memoryUsage(); | ||
|  | 
 | ||
|  | otime = Date.now(); | ||
|  | stime = Date.now(); | ||
|  | qap = Qap( pattern ); | ||
|  | pptime = ( ( Date.now()- stime ) / 1000 ).toFixed( 1 ); | ||
|  | emem = process.memoryUsage(); | ||
|  | log( '- big pattern pre-processed in %d secs', pptime ); | ||
|  | 
 | ||
|  | log( '- allocating %d MB of data', mb ); | ||
|  | stime = Date.now(); | ||
|  | for ( i = 0; i <= dlen - plen; i += 1.2 * plen ) { | ||
|  |     pattern.copy( data, i ); | ||
|  |     indexes.push( i ); | ||
|  | } | ||
|  | log( '- test data buffer (' + mb + 'MB) created in', ( Date.now() - stime ) / 1000, 'secs' ); | ||
|  | log( '- copied', ( indexes.length ) , 'big patterns (' + pmb + 'MB) in test data' ); | ||
|  | 
 | ||
|  | stime = Date.now(); | ||
|  | results = qap.parse( data ); | ||
|  | etime = ( Date.now() - stime ) / 1000; | ||
|  | ttime = ( Date.now() - otime ) / 1000; | ||
|  | log( '- test data was parsed in', etime, 'secs' ); | ||
|  | 
 | ||
|  | log( '- check if results length is equal to', indexes.length ); | ||
|  | assert.equal( results.length, indexes.length ); | ||
|  | 
 | ||
|  | log( '- compare results and pre-defined indexes' ); | ||
|  | assert.deepEqual( results, indexes ); | ||
|  | 
 | ||
|  | log( '- pre-processing data rate is:', ( 8 * mb / pptime / 1024 ).toFixed( 2 ), 'Gbit/sec' ); | ||
|  | log( '- parsing data rate is:', ( 8 * mb / etime / 1024 ).toFixed( 4 ), 'Gbit/sec' ); | ||
|  | log( '- total elapsed time:', ttime.toFixed( 2 ), 'secs' ); | ||
|  | log( '- resulting data-rate:', ( ( 8 * mb / ttime / 1024 ) ).toFixed( 4 ), 'Gbit/sec' ); | ||
|  | 
 | ||
|  | log( '- tables memory usage is %d KBytes', ( ( emem.rss - smem.rss ) / 1024 ).toFixed( 1 ) ); | ||
|  | log( '- tables v8++ heap usage is %d KBytes', ( ( emem.heapUsed - smem.heapUsed ) / 1024 ).toFixed( 1 ) ); |