18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file mangle_tests.c
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2003 OProfile authors
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdio.h>
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdlib.h>
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <string.h>
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_libiberty.h"
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_mangle.h"
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config.h"
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct test_input {
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	struct mangle_values values;
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	char const * result;
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic struct test_input const tests[] = {
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_NONE, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 0, 0 },
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.all.all.all" },
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_CPU, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 0, 2 },
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.all.all.2" },
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_TID, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 33, 0 },
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.all.33.all" },
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_TGID, "foo", "", "bar", NULL, "EVENT", 0, 0, 34, 0, 0 },
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar/{dep}/{root}/foo/EVENT.0.0.34.all.all" },
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_KERNEL, "foo", "", "bar", NULL, "EVENT", 0, 0, 0, 0, 0 },
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{kern}/bar/{dep}/{kern}/foo/EVENT.0.0.all.all.all" },
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_CALLGRAPH, "foo-from", "", "bar-from", "foo-to", "EVENT", 0, 0, 0, 0, 0 },
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar-from/{dep}/{root}/foo-from/{cg}/{root}/foo-to/EVENT.0.0.all.all.all" },
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_CPU|MANGLE_TID|MANGLE_TID|MANGLE_TGID|MANGLE_KERNEL, "foo", "", "bar", NULL, "EVENT", 1234, 8192, 34, 35, 2 },
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{kern}/bar/{dep}/{kern}/foo/EVENT.1234.8192.34.35.2" },
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { MANGLE_CPU|MANGLE_TID|MANGLE_TID|MANGLE_TGID|MANGLE_KERNEL, "foo1/foo2", "", "bar1/bar2", NULL, "EVENT", 1234, 8192, 34, 35, 2 },
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar1/bar2/{dep}/{root}/foo1/foo2/EVENT.1234.8192.34.35.2" },
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { 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 },
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	  "{root}/bar1/bar2/{dep}/{root}/bar1/bar2/{cg}/{root}/bar1/bar2-to/EVENT.1234.8192.34.35.2" },
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ { 0, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0 }, NULL }
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint main(void)
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	struct test_input const * test;
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	for (test = tests; test->result; ++test) {
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		char * result = op_mangle_filename(&test->values);
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		char * expect = xmalloc(strlen(test->result) +
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd					strlen(op_samples_current_dir) + 1);
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		strcpy(expect, op_samples_current_dir);
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		strcat(expect, test->result);
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		if (strcmp(result, expect)) {
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			fprintf(stderr, "test %d:\nfound: %s\nexpect: %s\n",
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				(int)(test - tests), result, expect);
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			exit(EXIT_FAILURE);
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		}
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		free(expect);
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		free(result);
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return EXIT_SUCCESS;
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
68