File: regex.cpp

package info (click to toggle)
wxpython4.0 4.2.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 221,752 kB
  • sloc: cpp: 962,555; python: 230,573; ansic: 170,731; makefile: 51,756; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (74 lines) | stat: -rw-r--r-- 1,899 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/////////////////////////////////////////////////////////////////////////////
// Name:        tests/benchmarks/regex.cpp
// Purpose:     wxRegEx benchmarks
// Author:      Vadim Zeitlin
// Created:     2018-11-15
// Copyright:   (c) 2018 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#include "wx/ffile.h"
#include "wx/regex.h"

#include "bench.h"

// ----------------------------------------------------------------------------
// Benchmark relative costs of compiling and matching for a simple regex
// ----------------------------------------------------------------------------

static const char* const RE_SIMPLE = ".";

BENCHMARK_FUNC(RECompile)
{
    return wxRegEx(RE_SIMPLE).IsValid();
}

BENCHMARK_FUNC(REMatch)
{
    static wxRegEx re(RE_SIMPLE);
    return re.Matches("foo");
}

BENCHMARK_FUNC(RECompileAndMatch)
{
    return wxRegEx(RE_SIMPLE).Matches("foo");
}

// ----------------------------------------------------------------------------
// Benchmark the cost of using a more complicated regex
// ----------------------------------------------------------------------------

namespace
{

// Use the contents of an already existing test file.
const wxString& GetTestText()
{
    static wxString text;
    if ( text.empty() )
    {
        wxFFile("htmltest.html").ReadAll(&text);
    }

    return text;
}

} // anonymous namespace

BENCHMARK_FUNC(REFindTD)
{
    // This is too simplistic, but good enough for benchmarking.
    static wxRegEx re("<td>[^<]*</td>", wxRE_ICASE | wxRE_NEWLINE);

    int matches = 0;
    for ( const wxChar* p = GetTestText().c_str(); re.Matches(p); ++matches )
    {
        size_t start, len;
        if ( !re.GetMatch(&start, &len) )
            return false;

        p += start + len;
    }

    return matches == 21; // result of "grep -c"
}