/////////////////////////////////////////////////////////////////////////////
#include "wx/string.h"
+#include "wx/ffile.h"
#include "bench.h"
+#include "htmlparser/htmlpars.h"
static const char asciistr[] =
"This is just the first line of a very long 7 bit ASCII string"
"\xD0\xA6\xD0\xB5\xD0\xBB\xD0\xBE\xD0\xB5 \xD1\x87\xD0\xB8\xD1\x81\xD0\xBB\xD0\xBE 9"
;
+namespace
+{
+
+const wxString& GetTestAsciiString()
+{
+ static wxString testString;
+ if ( testString.empty() )
+ {
+ long num = Bench::GetNumericParameter();
+ if ( !num )
+ num = 1;
+
+ for ( long n = 0; n < num; n++ )
+ testString += wxString::FromAscii(asciistr);
+ }
+
+ return testString;
+}
+
+} // anonymous namespace
+
// this is just a baseline
BENCHMARK_FUNC(Strlen)
{
BENCHMARK_FUNC(ForStringIndex)
{
- const wxString s = wxString::FromAscii(asciistr);
+ const wxString& s = GetTestAsciiString();
const size_t len = s.length();
for ( size_t n = 0; n < len; n++ )
{
BENCHMARK_FUNC(ForStringIter)
{
- const wxString s = wxString::FromAscii(asciistr);
+ const wxString& s = GetTestAsciiString();
const wxString::const_iterator end = s.end();
for ( wxString::const_iterator i = s.begin(); i != end; ++i )
{
BENCHMARK_FUNC(ForStringRIter)
{
- const wxString s = wxString::FromAscii(asciistr);
+ const wxString& s = GetTestAsciiString();
const wxString::const_reverse_iterator rend = s.rend();
for ( wxString::const_reverse_iterator i = s.rbegin(); i != rend; ++i )
{
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 buffers: wx[W]CharBuffer
return wxStrlen(str.mb_str()) == ASCIISTR_LEN &&
wxStrlen(str.wc_str()) == ASCIISTR_LEN;
}
+
+
+// ----------------------------------------------------------------------------
+// wxString::operator[] - parse large HTML page
+// ----------------------------------------------------------------------------
+
+class DummyParser : public wx28HtmlParser
+{
+public:
+ virtual wxObject* GetProduct() { return NULL; }
+ virtual void AddText(const wxChar*) {}
+};
+
+
+BENCHMARK_FUNC(ParseHTML)
+{
+ // static so that construction time is not counted
+ static DummyParser parser;
+ static wxString html;
+ if ( html.empty() )
+ {
+ wxString html1;
+ wxFFile("htmltest.html").ReadAll(&html1, wxConvUTF8);
+
+ // this is going to make for some invalid HTML, of course, but it
+ // doesn't really matter
+ long num = Bench::GetNumericParameter();
+ if ( !num )
+ num = 1;
+
+ for ( long n = 0; n < num; n++ )
+ html += html1;
+ }
+
+ parser.Parse(html);
+
+ return true;
+}