71 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var log = console.log | ||
|  |     , assert = require( 'assert' ) | ||
|  |     , QuickParser = require( '../' ) | ||
|  |     //megabytes
 | ||
|  |     , defaultSize = 700.1 | ||
|  |     // pre-record indexes
 | ||
|  |     , indexes = [] | ||
|  |     // build a weird buffer
 | ||
|  |     , buildTestBuffer = function ( p, MBsize, gapFactor ) { | ||
|  |         var s = Date.now(), | ||
|  |             mtime = 0, | ||
|  |             len = p.length, | ||
|  |             gap = Math.pow( len, ( gapFactor && gapFactor > 1 ) ? gapFactor : 3 ), | ||
|  |             mb =  1024 * 1024, | ||
|  |             size = MBsize || defaultSize, | ||
|  |             tSize = parseInt( size * mb, 10 ), | ||
|  |             str = '\r\nContent-Disposition: form-data\r\nLorem\ | ||
|  |                     Ipsum et Dolor sit amet, Quisquisce\r\n\r\n'; | ||
|  | 
 | ||
|  |         for ( var i = 0,  t = new Buffer( tSize ); i + len < tSize; i += len  ){ | ||
|  |             if ( ( i % ( gap ) ) === 0 ) { | ||
|  |                 t.write( p.toString() + str, i ); | ||
|  |                 indexes.push( i ); | ||
|  |             } else { | ||
|  |                 t[ i ] = i % 255; | ||
|  |             }  | ||
|  |         } | ||
|  |         mtime = Date.now() - s; | ||
|  |         log( '- current pattern:', JSON.stringify( p.toString() ) ); | ||
|  |         log( '- pattern length is %d bytes', len ); | ||
|  |         log( '- current gap factor is', ( gapFactor ) ? gapFactor : 3 );  | ||
|  |         log( '- patterns gap (distance) is %d KBytes', ( gap / 1024 ).toFixed( 2 ) ); | ||
|  |         // log( ' - plength / pgap:', len / gap );
 | ||
|  |         log( '- buffer creation time:', mtime / 1000, 'secs' );  | ||
|  |         return t; | ||
|  |     } | ||
|  |     , bsize | ||
|  |     , gapfactor | ||
|  |     , pattern = '---------------------------2046863043300497616870820724\r\n' | ||
|  |     ; | ||
|  | 
 | ||
|  | process.argv.forEach( function ( val, index, array ) { | ||
|  |     ( index === 2 ) ? ( bsize = parseInt( val, 10 ) )  : null;  | ||
|  |     ( index === 3 ) ? ( gapfactor = parseInt( val, 10 ) )  : null; | ||
|  |     ( index === 4 ) ? ( pattern = ( ( val.length > 1 ) && ( val.length < 255 ) ) ? ( '--' + val + '\r\n' ) : pattern ) : null;   | ||
|  | } ); | ||
|  | 
 | ||
|  | var p = new Buffer( pattern ) | ||
|  |     , t = buildTestBuffer( p, bsize, gapfactor ) | ||
|  |     , smem = process.memoryUsage() | ||
|  |     , qap = QuickParser( p ) | ||
|  |     , emem = process.memoryUsage() | ||
|  |     , stime = Date.now() | ||
|  |     , results = qap.parse( t ) | ||
|  |     , elapsed = Date.now() - stime | ||
|  |     ; | ||
|  | 
 | ||
|  | log( '- test buffer size is %d MBytes', bsize || defaultSize ); | ||
|  | 
 | ||
|  | 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( '- 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 ) ); | ||
|  | log( '- results matched are', results.length ); | ||
|  | log( '- total elapsed time is %d secs', elapsed / 1000 ); | ||
|  | log( '- parsing data rate is %d Gbit/s', ( ( 8 * ( bsize || defaultSize ) / ( elapsed / 1000 ) ) / 1024 ).toFixed( 2 ) ); |