X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/33ccf3d1ecb0c52bf4a1323587af92d67a672eb7..20125017a4bccd0920ee21e178950b0de0e4d63b:/tests/benchmarks/strings.cpp?ds=inline diff --git a/tests/benchmarks/strings.cpp b/tests/benchmarks/strings.cpp index f8219729a2..6ea1f53e86 100644 --- a/tests/benchmarks/strings.cpp +++ b/tests/benchmarks/strings.cpp @@ -5,7 +5,7 @@ // Created: 2008-07-19 // RCS-ID: $Id$ // Copyright: (c) 2008 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/string.h" @@ -48,7 +48,11 @@ const wxString& GetTestAsciiString() static wxString testString; if ( testString.empty() ) { - for ( long n = 0; n < Bench::GetNumericParameter(); n++ ) + long num = Bench::GetNumericParameter(); + if ( !num ) + num = 1; + + for ( long n = 0; n < num; n++ ) testString += wxString::FromAscii(asciistr); } @@ -277,6 +281,126 @@ BENCHMARK_FUNC(ReplaceAll) return str.Replace("x", "y") != 0; } +BENCHMARK_FUNC(ReplaceLonger) +{ + wxString str('x', ASCIISTR_LEN); + return str.Replace("x", "yy") != 0; +} + +BENCHMARK_FUNC(ReplaceShorter) +{ + wxString str('x', ASCIISTR_LEN); + return str.Replace("xx", "y") != 0; +} + +// ---------------------------------------------------------------------------- +// string case conversion +// ---------------------------------------------------------------------------- + +BENCHMARK_FUNC(Lower) +{ + return GetTestAsciiString().Lower().length() > 0; +} + +BENCHMARK_FUNC(Upper) +{ + return GetTestAsciiString().Upper().length() > 0; +} + +// ---------------------------------------------------------------------------- +// string comparison +// ---------------------------------------------------------------------------- + +BENCHMARK_FUNC(StrcmpA) +{ + const wxString& s = GetTestAsciiString(); + + return wxCRT_StrcmpA(s.c_str(), s.c_str()) == 0; +} + +BENCHMARK_FUNC(StrcmpW) +{ + const wxString& s = GetTestAsciiString(); + + return wxCRT_StrcmpW(s.wc_str(), s.wc_str()) == 0; +} + +BENCHMARK_FUNC(StricmpA) +{ + const wxString& s = GetTestAsciiString(); + + return wxCRT_StricmpA(s.c_str(), s.c_str()) == 0; +} + +BENCHMARK_FUNC(StricmpW) +{ + const wxString& s = GetTestAsciiString(); + + return wxCRT_StricmpW(s.wc_str(), s.wc_str()) == 0; +} + +BENCHMARK_FUNC(StringCmp) +{ + const wxString& s = GetTestAsciiString(); + + return s.Cmp(s) == 0; +} + +BENCHMARK_FUNC(StringCmpNoCase) +{ + const wxString& s = GetTestAsciiString(); + + return s.CmpNoCase(s) == 0; +} + +// Also benchmark various native functions under MSW. Surprisingly/annoyingly +// they sometimes have vastly better performance than alternatives, especially +// for case-sensitive comparison (see #10375). +#ifdef __WINDOWS__ + +#include "wx/msw/wrapwin.h" + +BENCHMARK_FUNC(MSWlstrcmp) +{ + const wxString& s = GetTestAsciiString(); + + return lstrcmp(s.t_str(), s.t_str()) == 0; +} + +BENCHMARK_FUNC(MSWlstrcmpi) +{ + const wxString& s = GetTestAsciiString(); + + return lstrcmpi(s.t_str(), s.t_str()) == 0; +} + +BENCHMARK_FUNC(MSWCompareString) +{ + const wxString& s = GetTestAsciiString(); + + return ::CompareString + ( + LOCALE_USER_DEFAULT, + 0, + s.t_str(), s.length(), + s.t_str(), s.length() + ) == CSTR_EQUAL; +} + +BENCHMARK_FUNC(MSWCompareStringIgnoreCase) +{ + const wxString& s = GetTestAsciiString(); + + return ::CompareString + ( + LOCALE_USER_DEFAULT, + NORM_IGNORECASE, + s.t_str(), s.length(), + s.t_str(), s.length() + ) == CSTR_EQUAL; +} + +#endif // __WINDOWS__ // ---------------------------------------------------------------------------- // string buffers: wx[W]CharBuffer @@ -318,7 +442,11 @@ BENCHMARK_FUNC(ParseHTML) // this is going to make for some invalid HTML, of course, but it // doesn't really matter - for ( long n = 0; n < Bench::GetNumericParameter(); n++ ) + long num = Bench::GetNumericParameter(); + if ( !num ) + num = 1; + + for ( long n = 0; n < num; n++ ) html += html1; }