void TestWildcardMatcher::verifyMatchResult(QString pattern, bool expected) { if (expected) { verifyMatch(pattern); } else { verifyNoMatch(pattern); } }
int main( int argc, char **argv ) { std::string T = "everything is awesome, everything is cool when"; std::string P = "verything"; const auto m = P.length(); const auto n = T.length(); int64_t h( 1 ); int64_t p( 0 ); int64_t t( 0 ); for( size_t i( 0 ); i < m; i++ ) { p = ( ( p * d ) + P[ i ] ) % prime ; t = ( ( t * d ) + T[ i ] ) % prime ; if( i < ( m - 1 ) ) { h = (h * d ) % prime; } } size_t s( 0 ); do { if ( p == t && verifyMatch( T, s, s+m, P ) ) { std::cerr << "Match @ ( " << s << "," << (s + m) << " ): " << T.substr( s, m ) << "\n"; } const auto remove_val( ( T[ s ] * h ) % prime ); t = ( t + (d * prime) - remove_val ) % prime; t = (d * t ) % prime; t = ( t + T[ s + m ]) % prime; s++; }while( s <= ( n - m ) ); }