Go to the documentation of this file.
12 #include <unordered_map>
15 #include "util/benchmark.h"
16 #include "util/test.h"
17 #include "util/flags.h"
18 #include "util/logging.h"
20 #include "util/strutil.h"
23 #include "re2/regexp.h"
24 #include "util/mutex.h"
25 #include "util/pcre.h"
39 Prog*
prog = re->CompileToProg(0);
43 const char*
text =
"650-253-0001";
56 const char* regexp =
"(\\d+)-(\\d+)-(\\d+)";
57 const char*
text =
"650-253-0001";
64 fprintf(
stderr,
"Regexp: %7lld bytes (peak=%lld)\n",
68 Prog*
prog = re->CompileToProg(0);
72 fprintf(
stderr,
"Prog: %7lld bytes (peak=%lld)\n",
78 fprintf(
stderr,
"Search: %7lld bytes (peak=%lld)\n",
88 fprintf(
stderr,
"RE: %7lld bytes (peak=%lld)\n",
91 fprintf(
stderr,
"RE: %7lld bytes (peak=%lld)\n",
99 fprintf(
stderr,
"PCRE*: %7lld bytes (peak=%lld)\n",
102 fprintf(
stderr,
"PCRE*: %7lld bytes (peak=%lld)\n",
111 fprintf(
stderr,
"RE2: %7lld bytes (peak=%lld)\n",
114 fprintf(
stderr,
"RE2: %7lld bytes (peak=%lld)\n",
118 fprintf(
stderr,
"sizeof: PCRE=%zd RE2=%zd Prog=%zd Inst=%zd\n",
119 sizeof(PCRE),
sizeof(RE2),
sizeof(Prog),
sizeof(Prog::Inst));
123 return static_cast<int>(std::thread::hardware_concurrency());
139 const StringPiece&
text);
161 text->resize(16<<20);
165 int byte = rand() & 0x7F;
173 return text->substr(0, nbytes);
186 #define EASY0 "ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
187 #define EASY1 "A[AB]B[BC]C[CD]D[DE]E[EF]F[FG]G[GH]H[HI]I[IJ]J$"
188 #define EASY2 "(?i)" EASY0
193 #define MEDIUM "[XYZ]ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
198 #define HARD "[ -~]*ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
202 #define FANOUT "(?:[\\x{80}-\\x{10FFFF}]?){100}[\\x{80}-\\x{10FFFF}]"
205 #define PARENS "([ -~])*(A)(B)(C)(D)(E)(F)(G)(H)(I)(J)(K)(L)(M)" \
206 "(N)(O)(P)(Q)(R)(S)(T)(U)(V)(W)(X)(Y)(Z)$"
294 s.append(
state.range(0)/2,
'x');
318 s.append(
"Hello World");
319 RE2 re(
"((Hello World))");
471 parse3(
state,
"([0-9]+)-([0-9]+)-([0-9]+)",
"650-253-0001");
510 parse3(
state,
"(\\d+)-(\\d+)-(\\d+)",
"650-253-0001");
551 parse1(
state,
"[0-9]+-(.*)",
"650-253-0001");
588 run(
state,
"[0-9]+.(.*)",
"650-253-0001");
624 s.append(100000,
'x');
625 s.append(
"650-253-0001");
644 s.append(
"650-253-");
645 s.append(100000,
'0');
731 prog->ComputeByteMap();
760 "regexp for compile benchmarks");
790 s.append(
"(650) 253-0001");
791 search(
state,
"(\\d{3}-|\\(\\d{3}\\)\\s+)(\\d{3}-\\d{4})", s);
871 NULL, &failed, NULL),
960 static auto& cache = *
new std::unordered_map<std::string, Prog*>;
967 cache[regexp] =
prog;
978 static auto& cache = *
new std::unordered_map<std::string, PCRE*>;
979 PCRE* re = cache[regexp];
991 static auto& cache = *
new std::unordered_map<std::string, RE2*>;
992 RE2* re = cache[regexp];
994 re =
new RE2(regexp);
1003 bool expect_match) {
1006 bool failed =
false;
1008 NULL, &failed, NULL),
1016 bool expect_match) {
1027 bool expect_match) {
1038 bool expect_match) {
1049 bool expect_match) {
1061 bool expect_match) {
1408 "GET /asdfhjasdhfasdlfhasdflkjasdfkljasdhflaskdjhf"
1409 "alksdjfhasdlkfhasdlkjfhasdljkfhadsjklf HTTP/1.1";
1413 PCRE re(
"(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1421 RE2 re(
"(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1433 "GET /abc HTTP/1.1";
1437 PCRE re(
"(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1445 RE2 re(
"(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1458 PCRE re(
"(?-s)^(.+)");
1466 RE2 re(
"(?-s)^(.+)");
1479 PCRE re(
"(?-s)^([ -~]+)");
1487 RE2 re(
"(?-s)^([ -~]+)");
1546 const int kMaxLen = 16;
void FullMatchPCRE(int iter, int n, const char *regexp)
void Search_Easy2_CachedDFA(benchmark::State &state)
void Parse_CachedSplitBig1_RE2(int i)
ParseImpl Parse1CachedNFA
void Search_Hard_CachedRE2(int i, int n)
void Search_AltMatch_BitState(int i, int n)
void Parse_Split_RE2(int i)
void Search_Parens_CachedDFA(int i, int n)
ParseImpl SearchParse2CachedRE2
static bool FullMatch(const StringPiece &text, const RE2 &re, A &&... a)
SearchImpl SearchCachedPCRE
static std::string http_text
void SimplifyRegexp(int iters, const std::string ®exp)
void Search_Digits_BitState(int i)
void Search_Digits_OnePass(int i)
ParseImpl Parse1CachedRE2
ParseImpl Parse1CachedBacktrack
ParseImpl SearchParse2CachedPCRE
void Parse_CachedSplit_BitState(int i)
void Search_Fanout_CachedDFA(int i, int n)
void SearchPhone_CachedPCRE(int i, int n)
void NullWalkRegexp(int iters, const std::string ®exp)
void Search_Success1_NFA(int i, int n)
void Search_Success_OnePass(int i, int n)
void FullMatch_DotStar_CachedPCRE(int i, int n)
void Parse_CachedSplitBig1_PCRE(int i)
void Search_Success1_BitState(int i, int n)
ParseImpl Parse3CachedRE2
void Search_Hard_CachedDFA(int i, int n)
void Parse_DigitDs_PCRE(int i)
bool PossibleMatchRange(std::string *min, std::string *max, int maxlen) const
void Search_Parens_CachedRE2(int i, int n)
void Parse_CachedDigits_OnePass(int i)
void EmptyPartialMatchPCRE(int n)
void Parse1Split(int iters, void(*parse1)(int, const char *, const StringPiece &))
std::string RandomText(int64_t nbytes)
static const PartialMatchFunctor PartialMatch
void SearchSuccess(int iters, int nbytes, const char *regexp, SearchImpl *search)
void Parse_SplitHard_BitState(int i)
void SmallHTTPPartialMatchRE2(int n)
void Search_BigFixed_CachedRE2(int i, int n)
void Parse_CachedSplitHard_RE2(int i)
void Search_Success_CachedOnePass(int i, int n)
void SimplePartialMatchPCRE(int n)
void ASCIIMatchPCRE(int n)
void Parse_Digits_Backtrack(int i)
OPENSSL_EXPORT pem_password_cb void * u
const std::string & error() const
void Parse_DigitDs_BitState(int i)
const std::string & error() const
ParseImpl Parse1CachedOnePass
void Search_Success1_PCRE(int i, int n)
void Search_AltMatch_NFA(int i, int n)
void Parse_Split_OnePass(int i)
Prog * CompileToProg(int64_t max_mem)
void Parse_CachedSplit_PCRE(int i)
void SearchDigits(int iters, SearchImpl *search)
void Search_AltMatch_CachedRE2(int i, int n)
void Parse_CachedDigitDs_BitState(int i)
void Search_Easy0_CachedRE2(int i, int n)
void Parse_SplitHard_RE2(int i)
SearchImpl SearchCachedBitState
void Search(int iters, int nbytes, const char *regexp, SearchImpl *search)
void Parse_CachedSplitHard_Backtrack(int i)
void Parse_CachedDigitDs_NFA(int i)
void Parse_Digits_PCRE(int i)
ParseImpl Parse3CachedOnePass
void Parse_CachedDigitDs_PCRE(int i)
void Search_Fanout_CachedNFA(int i, int n)
void Parse_CachedDigits_BitState(int i)
SearchImpl SearchCachedDFA
void BM_CompileByteMap(int i)
void CompileRegexp(int iters, const std::string ®exp)
void CompileByteMap(int iters, const std::string ®exp)
void Search_Success1_CachedRE2(int i, int n)
void SimplePartialMatchRE2(int n)
void Parse_CachedDigits_Backtrack(int i)
static bool FindAndConsume(StringPiece *input, const RE2 &re, A &&... a)
long long PeakHeapGrowth()
void Parse_CachedDigitDs_OnePass(int i)
void Search_Success_NFA(int i, int n)
void Search_AltMatch_CachedBitState(int i, int n)
void BM_RE2_Compile(int i)
static std::string smallhttp_text
void SearchBigFixed(int iters, int nbytes, SearchImpl *search)
static const FullMatchFunctor FullMatch
void ASCIIMatchRE2(int n)
void ParseImpl(int iters, const char *regexp, const StringPiece &text)
void CompileToProg(int iters, const std::string ®exp)
SearchImpl SearchCachedRE2
void Search_BigFixed_CachedDFA(int i, int n)
ParseImpl Parse1Backtrack
void FullMatch_DotStarCapture_CachedPCRE(int i, int n)
void Search_Easy2_CachedRE2(benchmark::State &state)
void ParseRegexp(int iters, const std::string ®exp)
BENCHMARK_RANGE(Search_Easy0_CachedDFA, 8, 16<< 20) -> ThreadRange(1, NumCPUs())
void BM_CompileToProg(int i)
void Search_Easy1_CachedNFA(int i, int n)
ParseImpl Parse3CachedNFA
void SmallHTTPPartialMatchPCRE(int n)
void Search_AltMatch_CachedPCRE(int i, int n)
void Parse_DigitDs_NFA(int i)
void Search_AltMatch_CachedNFA(int i, int n)
void FullMatchRE2(int iter, int n, const char *regexp)
void SearchAltMatch(int iters, int nbytes, SearchImpl *search)
void PossibleMatchRange_Prefix(int i)
void Parse_CachedSplit_RE2(int i)
void Search_AltMatch_DFA(int i, int n)
void Search_BigFixed_CachedNFA(int i, int n)
void SearchPhone(int iters, int nbytes, ParseImpl *search)
void Parse_CachedSplitHard_NFA(int i)
def search(target, ideal_distance, stop_event, maximum_hashes, interesting_hamming_distance=None)
void Search_Easy2_CachedPCRE(benchmark::State &state)
static Regexp * Parse(const StringPiece &s, ParseFlags flags, RegexpStatus *status)
void Search_Success_PCRE(int i, int n)
void Search_Digits_NFA(int i)
void Parse_SplitHard_NFA(int i)
void BM_Regexp_Parse(int i)
void Parse1SplitBig1(int iters, void(*run)(int, const char *, const StringPiece &))
void Search_Medium_CachedNFA(int i, int n)
void Parse_CachedSplitHard_BitState(int i)
void BM_PCRE_Compile(int i)
void Search_Parens_CachedPCRE(int i, int n)
static bool PartialMatch(const StringPiece &text, const RE2 &re, A &&... a)
void Parse_Split_BitState(int i)
void HTTPPartialMatchRE2(int n)
SearchImpl SearchBitState
void Search_Fanout_CachedPCRE(int i, int n)
void Search_Success1_CachedDFA(int i, int n)
ParseImpl Parse1CachedBitState
Prog * GetCachedProg(const char *regexp)
void Search_Digits_RE2(int i)
void FullMatch_DotStarDollar_CachedPCRE(int i, int n)
void Search_BigFixed_CachedPCRE(int i, int n)
void Search_Success_CachedNFA(int i, int n)
void Search_Parens_CachedNFA(int i, int n)
void Search_Success1_RE2(int i, int n)
void PossibleMatchRange_Trivial(int i)
void FullMatch_DotStarDollar_CachedRE2(int i, int n)
void Search_Medium_CachedDFA(int i, int n)
void Search_Success_CachedDFA(int i, int n)
void Search_Medium_CachedRE2(int i, int n)
void Search_Success_CachedRE2(int i, int n)
void Parse_Digits_BitState(int i)
void BM_Regexp_Compile(int i)
RE2 * GetCachedRE2(const char *regexp)
void Parse_CachedSplit_NFA(int i)
ParseImpl Parse3Backtrack
void Parse_Digits_NFA(int i)
void Parse_SplitHard_PCRE(int i)
void Search_Success1_CachedNFA(int i, int n)
void Search_AltMatch_CachedDFA(int i, int n)
PCRE * GetCachedPCRE(const char *regexp)
void Search_AltMatch_CachedOnePass(int i, int n)
void FullMatch_DotStarCapture_CachedRE2(int i, int n)
testing::MallocCounter MallocCounter
void FullMatch_DotStar_CachedRE2(int i, int n)
void Parse_DigitDs_OnePass(int i)
void SearchPhone_CachedRE2(int i, int n)
void Search_Hard_CachedPCRE(int i, int n)
void Search_Easy1_CachedPCRE(int i, int n)
void Parse3DigitDs(int iters, void(*parse3)(int, const char *, const StringPiece &))
void Parse_Split_PCRE(int i)
void Parse_CachedSplitBig2_PCRE(int i)
ParseImpl Parse3CachedPCRE
ParseImpl SearchParse1CachedRE2
void Parse_CachedDigitDs_RE2(int i)
void Search_Easy1_CachedDFA(int i, int n)
void Parse_CachedDigits_PCRE(int i)
void Parse_DigitDs_RE2(int i)
void RunBuild(int iters, const std::string ®exp, void(*run)(int, const std::string &))
void Parse_Digits_OnePass(int i)
void PossibleMatchRange_Complex(int i)
void Search_Success1_DFA(int i, int n)
void Search_Success1_CachedPCRE(int i, int n)
void Parse_Split_NFA(int i)
SearchImpl SearchCachedOnePass
BENCHMARK(Search_Digits_DFA) -> ThreadRange(1, NumCPUs())
void Search_Fanout_CachedRE2(int i, int n)
void Search_Success_CachedPCRE(int i, int n)
void Parse_CachedDigits_RE2(int i)
void CompileRE2(int iters, const std::string ®exp)
void Parse_CachedDigitDs_Backtrack(int i)
ParseImpl Parse3CachedBitState
void FindAndConsume(int iters, int nbytes)
void Search_AltMatch_OnePass(int i, int n)
static const int THIS_THREAD_ONLY
void CompilePCRE(int iters, const std::string ®exp)
void BM_Regexp_Simplify(int i)
ParseImpl Parse3CachedBacktrack
void Parse_CachedDigits_NFA(int i)
void PossibleMatchRange_NoProg(int i)
void Search_Hard_CachedNFA(int i, int n)
void HTTPPartialMatchPCRE(int n)
void Search_Easy1_CachedRE2(int i, int n)
void Parse_CachedSplitBig2_RE2(int i)
void SearchImpl(int iters, const char *regexp, const StringPiece &text, Prog::Anchor anchor, bool expect_match)
DEFINE_FLAG(std::string, compile_regexp, "(.*)-(\\d+)-of-(\\d+)", "regexp for compile benchmarks")
void Search_Success_DFA(int i, int n)
void EmptyPartialMatchRE2(int n)
void Search_AltMatch_PCRE(int i, int n)
void PossibleMatchRangeCommon(int iter, const char *regexp)
void Search_Digits_PCRE(int i)
void Search_Easy0_CachedNFA(int i, int n)
void SimplifyCompileRegexp(int iters, const std::string ®exp)
void Parse3Digits(int iters, void(*parse3)(int, const char *, const StringPiece &))
void Parse_CachedSplitHard_PCRE(int i)
void Search_Easy2_CachedNFA(benchmark::State &state)
ParseImpl Parse1CachedPCRE
void Parse1SplitBig2(int iters, void(*run)(int, const char *, const StringPiece &))
void BM_Regexp_SimplifyCompile(int i)
void Search_Medium_CachedPCRE(int i, int n)
SearchImpl SearchCachedNFA
void Search_Success1_CachedBitState(int i, int n)
void Search_Digits_DFA(int i)
void Search_Easy0_CachedPCRE(int i, int n)
void Search_AltMatch_RE2(int i, int n)
void Parse_DigitDs_Backtrack(int i)
void Parse_Digits_RE2(int i)
ParseImpl SearchParse1CachedPCRE
void Parse1SplitHard(int iters, void(*run)(int, const char *, const StringPiece &))
void Parse_CachedSplit_OnePass(int i)
void Search_Success_RE2(int i, int n)
void BM_Regexp_NullWalk(int i)
void Search_Easy0_CachedDFA(int i, int n)
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:02