1/**
2 * @file mangle_tests.c
3 *
4 * @remark Copyright 2003 OProfile authors
5 * @remark Read the file COPYING
6 *
7 * @author John Levon
8 * @author Philippe Elie
9 */
10
11#include <stdio.h>
12#include <stdlib.h>
13#include <string.h>
14
15#include "op_libiberty.h"
16#include "op_mangle.h"
17#include "op_config.h"
18
19struct test_input {
20	struct mangle_values values;
21	char const * result;
22};
23
24static struct test_input const tests[] = {
25	{ { MANGLE_NONE, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 0, 0 },
26	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.all.all.all" },
27	{ { MANGLE_CPU, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 0, 2 },
28	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.all.all.2" },
29	{ { MANGLE_TID, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 33, 0 },
30	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.all.33.all" },
31	{ { MANGLE_TGID, "foo", "", "bar", NULL, "EVENT", 0, 0, 34, 0, 0 },
32	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.34.all.all" },
33	{ { MANGLE_KERNEL, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 0, 0 },
34	  "{kern}/bar/{dep}/{kern}/foo/EVENT.0.0.all.all.all" },
35	{ { MANGLE_CALLGRAPH, "foo-from", "", "bar-from", "foo-to", "EVENT", 0, 0, 0, 0, 0 },
36	  "{root}/bar-from/{dep}/{root}/foo-from/{cg}/{root}/foo-to/EVENT.0.0.all.all.all" },
37	{ { MANGLE_CPU|MANGLE_TID|MANGLE_TID|MANGLE_TGID|MANGLE_KERNEL, "foo", "", "bar", NULL, "EVENT", 1234, 8192, 34, 35, 2 },
38	  "{kern}/bar/{dep}/{kern}/foo/EVENT.1234.8192.34.35.2" },
39	{ { MANGLE_CPU|MANGLE_TID|MANGLE_TID|MANGLE_TGID|MANGLE_KERNEL, "foo1/foo2", "", "bar1/bar2", NULL, "EVENT", 1234, 8192, 34, 35, 2 },
40	  "{root}/bar1/bar2/{dep}/{root}/foo1/foo2/EVENT.1234.8192.34.35.2" },
41	{ { MANGLE_CALLGRAPH|MANGLE_CPU|MANGLE_TID|MANGLE_TID|MANGLE_TGID|MANGLE_KERNEL, "bar1/bar2", "", "bar1/bar2", "bar1/bar2-to", "EVENT", 1234, 8192, 34, 35, 2 },
42	  "{root}/bar1/bar2/{dep}/{root}/bar1/bar2/{cg}/{root}/bar1/bar2-to/EVENT.1234.8192.34.35.2" },
43
44	{ { 0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0 }, NULL }
45};
46
47
48int main(void)
49{
50	struct test_input const * test;
51	for (test = tests; test->result; ++test) {
52		char * result = op_mangle_filename(&test->values);
53		char * expect = xmalloc(strlen(test->result) +
54					strlen(op_samples_current_dir) + 1);
55		strcpy(expect, op_samples_current_dir);
56		strcat(expect, test->result);
57		if (strcmp(result, expect)) {
58			fprintf(stderr, "test %d:\nfound: %s\nexpect: %s\n",
59				(int)(test - tests), result, expect);
60			exit(EXIT_FAILURE);
61		}
62		free(expect);
63		free(result);
64	}
65
66	return EXIT_SUCCESS;
67}
68