bop
Advanced tools
Comparing version 3.2.0 to 3.3.0
@@ -170,2 +170,3 @@ /* | ||
, dist = 0 | ||
, first = -1 | ||
; | ||
@@ -176,7 +177,7 @@ // search | ||
if ( i < 0 ) { | ||
dist = j - last; | ||
dist = ( ( !~distance ) && ( cnt === 1 ) ) ? j : j - last; | ||
// if sparse switch is on, collect overlapping sequences | ||
if ( sparse && last && ( m > dist ) && ( j += gs[ 0 ] ) ) continue; | ||
if ( distance && ( mdist < dist ) ) mdist = dist; | ||
cnt++; | ||
if ( ++cnt === 1 ) first = j; | ||
last = j; | ||
@@ -186,3 +187,8 @@ j += gs[ 0 ]; | ||
} | ||
return distance ? [ cnt, ( cnt < 2 ) ? -1 : mdist - m ] : [ cnt ]; | ||
if ( distance ) { | ||
if ( cnt === 0 ) return [ cnt, -1, n, n ]; | ||
if ( cnt === 1 ) return [ cnt, -1, first, n - last - m ]; | ||
return [ cnt, mdist - m, first, n - last - m ]; | ||
} | ||
return [ cnt ]; | ||
}; | ||
@@ -189,0 +195,0 @@ |
{ | ||
"name" : "bop" | ||
, "version" : "3.2.0" | ||
, "version" : "3.3.0" | ||
, "description" : "Bop, an ultra fast Boyer-Moore parser/matcher, optimized for string and buffer patterns (<= 255 bytes)." | ||
@@ -5,0 +5,0 @@ , "homepage" : "https://github.com/rootslab/bop" |
@@ -88,6 +88,10 @@ ### Bop | ||
* then, if distance switch is on, it returns also the maximum | ||
* distance found between 2 patterns. | ||
* distance found between 2 patterns, then, the distance of the pattern | ||
* from the starting index (to the left) and the distance from the end of pattern, | ||
* to the end of data (to the right). | ||
* | ||
* NOTE: if 0 or only 1 occurrence was found, the max distance will | ||
* be -1 and then the resulting array will be respectvely [0, -1] | ||
* and [1, -1]. | ||
* be -1 and then the resulting array will be respectvely: | ||
* - [0, -1, data.length, data.length ] | ||
* - [1, -1, .., .. ] | ||
*/ | ||
@@ -94,0 +98,0 @@ Bop#count( Buffer data [, Number start_from [, Boolean sparse [, Boolean distance ] ] ] ) : Array |
@@ -23,12 +23,10 @@ var log = console.log | ||
bpattern.copy( data, i ); | ||
log( ' -> !copy (%d) pattern to (%d,%d) slice', ++occ, i , i + bpattern.length ); | ||
}; | ||
for ( i = 1; i < indexes.length; ++i ) { | ||
distances.push( indexes[ i ] - indexes[ i - 1 ] - plen ); | ||
} | ||
for ( i = 1; i < indexes.length; ++i ) distances.push( indexes[ i ] - indexes[ i - 1 ] - plen ); | ||
log( '- parse for pattern (%d bytes )', plen ); | ||
var bop = Bop( bpattern ) | ||
, results = bop.parse( data, 0, false ) | ||
var results = bop.parse( data, 0, false ) | ||
// count with overlapping sequences | ||
@@ -40,4 +38,6 @@ , cnt = null | ||
log( '- parsed results: %d\n -> [%s]', results.length, results ); | ||
log( '- run #count on %d slices of data ', indexes.length ); | ||
log( '- check distance results.. ' ); | ||
do { | ||
@@ -48,7 +48,20 @@ snip = data.slice( 0, indexes[ i ] ); | ||
if ( i ) { | ||
if ( i > 1 ) assert.ok( cnt[ 1 ] === ( indexes[ i - 2 ] - bpattern.length ) ); | ||
else assert.ok( cnt[ 1 ] === -1 ); | ||
} else | ||
if ( i > 1 ) { | ||
assert.ok( cnt[ 1 ] === ( indexes[ i - 2 ] - bpattern.length ), 'wrong value: ' + cnt[ 2 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
assert.ok( cnt[ 2 ] === results[ 0 ], 'wrong value: ' + cnt[ 2 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
assert.ok( cnt[ 3 ] === snip.length - indexes[ i - 1 ] - bpattern.length, 'wrong value: ' + cnt[ 3 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
} | ||
else { | ||
// i === 1 | ||
assert.ok( cnt[ 1 ] === -1, 'wrong value: ' + cnt[ 1 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
assert.ok( cnt[ 2 ] === results[ 0 ], 'wrong value: ' + cnt[ 2 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
assert.ok( cnt[ 3 ] === snip.length - results[ 0 ] - bpattern.length, 'wrong value: ' + cnt[ 3 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
} | ||
} else { | ||
// i = 0, should return -1 | ||
assert.ok( cnt[ 1 ] === -1 ); | ||
// check 0 length reesults | ||
assert.ok( cnt[ 2 ] === snip.length, 'wrong value: ' + cnt[ 2 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
assert.ok( cnt[ 3 ] === snip.length, 'wrong value: ' + cnt[ 2 ] + ' for slice(0,' + indexes[ i ] + ')' ); | ||
} | ||
log( ' -> !OK (%d) slice(%d,%d) ->', i , 0, indexes[ i ] || data.length , cnt ); | ||
@@ -55,0 +68,0 @@ |
49759
999
230