From 6463dcfb0779263d82b5f9cef7b957dd426cf2bd Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Tue, 29 Jan 2002 13:38:30 +0000 Subject: [PATCH] regex_timer.cpp: - Head off some infinite looping on some platforms [SVN r12550] --- example/timer/regex_timer.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/example/timer/regex_timer.cpp b/example/timer/regex_timer.cpp index 280c6eaf..ee927571 100644 --- a/example/timer/regex_timer.cpp +++ b/example/timer/regex_timer.cpp @@ -188,6 +188,7 @@ int main(int argc, char**argv) regex_search(s2, sm, ex); // measure time interval for reg_expression + int trials = 30; do{ iters *= (tim > 0.001) ? (1.1/tim) : 100; t.restart(); @@ -196,7 +197,7 @@ int main(int argc, char**argv) result = regex_search(s2, sm, ex); } tim = t.elapsed(); - }while((tim < t.elapsed_min() * 1000) || (tim < 1)); + }while(((tim < t.elapsed_min() * 1000) || (tim < 1)) && trials--); cout << "regex time: " << (tim * 1000000 / iters) << "us" << endl; if(result) @@ -258,6 +259,7 @@ int main(int argc, char**argv) // measure time interval for reg_expression using a deque iters = 10; tim = 1.1; + trials = 30; // cache load: regex_search(ds.begin(), ds.end(), dm, ex); do{ @@ -268,7 +270,7 @@ int main(int argc, char**argv) result = regex_search(ds.begin(), ds.end(), dm, ex); } tim = t.elapsed(); - }while((tim < t.elapsed_min() * 1000) || (tim < 1)); + }while(((tim < t.elapsed_min() * 1000) || (tim < 1)) && trials--); cout << "regex time (search over std::deque): " << (tim * 1000000 / iters) << "us" << endl; if(result) @@ -295,6 +297,7 @@ int main(int argc, char**argv) // measure time interval for POSIX matcher: iters = 10; tim = 1.1; + trials = 30; // cache load: regexec(&r, s2.c_str(), nsubs, matches.get(), 0); do{ @@ -302,10 +305,11 @@ int main(int argc, char**argv) t.restart(); for(i = 0; i < iters; ++i) { + std::cerr << "Iteration #" << i << "/" << iters << std::endl; result = regexec(&r, s2.c_str(), nsubs, matches.get(), 0); } tim = t.elapsed(); - }while((tim < t.elapsed_min() * 1000) || (tim < 1)); + }while(((tim < t.elapsed_min() * 1000) || (tim < 1)) && trials--); cout << "POSIX regexec time: " << (tim * 1000000 / iters) << "us" << endl; if(result == 0)