diff options
Diffstat (limited to 'tools/perf/builtin-test.c')
-rw-r--r-- | tools/perf/builtin-test.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c index 5ce30305462b..9180eb8d4b5f 100644 --- a/tools/perf/builtin-test.c +++ b/tools/perf/builtin-test.c @@ -1103,6 +1103,54 @@ static int test__perf_pmu(void) return perf_pmu__test(); } +static int test__evsel_parser_constructor(const char *ev) +{ + int err = 0; + struct perf_evsel *evsel = perf_evsel__new2(ev); + + if (evsel == NULL) { + pr_debug("perf_evsel__new2 failed!"); + return -1; + } + + if (strcmp(perf_evsel__name(evsel), ev)) { + pr_debug("Expected %s, got %s!\n", ev, perf_evsel__name(evsel)); + ++err; + } + + /* + * Force rebuild + */ + free(evsel->name); + evsel->name = NULL; + if (strcmp(perf_evsel__name(evsel), ev)) { + pr_debug("Expected %s, got %s!\n", ev, perf_evsel__name(evsel)); + ++err; + } + + perf_evsel__delete(evsel); + return err ? -1 : 0; +} + +static int test__evsel_parser_constructors(void) +{ + char ev[] = "cycles:u"; + char *tok = strchr(ev, ':'); + const char modifiers[] = "hkuGp"; + size_t i; + int err = 0; + + if (tok++ == NULL) + return -1; + + for (i = 0; i < sizeof(modifiers) - 1; ++i) { + *tok = modifiers[i]; + err += test__evsel_parser_constructor(ev); + } + + return err ? -1 : 0; +} + static struct test { const char *desc; int (*func)(void); @@ -1142,6 +1190,10 @@ static struct test { .func = test__perf_pmu, }, { + .desc = "evsel parser constructor", + .func = test__evsel_parser_constructors, + }, + { .func = NULL, }, }; |