X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/072682ce44feeb59b6696e5aa484f453b719fec6..20125017a4bccd0920ee21e178950b0de0e4d63b:/tests/benchmarks/strings.cpp diff --git a/tests/benchmarks/strings.cpp b/tests/benchmarks/strings.cpp index cc09a35418..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" @@ -293,6 +293,114 @@ BENCHMARK_FUNC(ReplaceShorter) 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