13ce311afSJiri Olsa // SPDX-License-Identifier: GPL-2.0
23ce311afSJiri Olsa #include <stdarg.h>
33ce311afSJiri Olsa #include <stdio.h>
43ce311afSJiri Olsa #include <perf/threadmap.h>
53ce311afSJiri Olsa #include <internal/tests.h>
63d970601SJiri Olsa #include "tests.h"
73ce311afSJiri Olsa 
libperf_print(enum libperf_print_level level,const char * fmt,va_list ap)83ce311afSJiri Olsa static int libperf_print(enum libperf_print_level level,
93ce311afSJiri Olsa 			 const char *fmt, va_list ap)
103ce311afSJiri Olsa {
113ce311afSJiri Olsa 	return vfprintf(stderr, fmt, ap);
123ce311afSJiri Olsa }
133ce311afSJiri Olsa 
test_threadmap_array(int nr,pid_t * array)14*56dce868STzvetomir Stoyanov (VMware) static int test_threadmap_array(int nr, pid_t *array)
15*56dce868STzvetomir Stoyanov (VMware) {
16*56dce868STzvetomir Stoyanov (VMware) 	struct perf_thread_map *threads;
17*56dce868STzvetomir Stoyanov (VMware) 	int i;
18*56dce868STzvetomir Stoyanov (VMware) 
19*56dce868STzvetomir Stoyanov (VMware) 	threads = perf_thread_map__new_array(nr, array);
20*56dce868STzvetomir Stoyanov (VMware) 	__T("Failed to allocate new thread map", threads);
21*56dce868STzvetomir Stoyanov (VMware) 
22*56dce868STzvetomir Stoyanov (VMware) 	__T("Unexpected number of threads", perf_thread_map__nr(threads) == nr);
23*56dce868STzvetomir Stoyanov (VMware) 
24*56dce868STzvetomir Stoyanov (VMware) 	for (i = 0; i < nr; i++) {
25*56dce868STzvetomir Stoyanov (VMware) 		__T("Unexpected initial value of thread",
26*56dce868STzvetomir Stoyanov (VMware) 		    perf_thread_map__pid(threads, i) == (array ? array[i] : -1));
27*56dce868STzvetomir Stoyanov (VMware) 	}
28*56dce868STzvetomir Stoyanov (VMware) 
29*56dce868STzvetomir Stoyanov (VMware) 	for (i = 1; i < nr; i++)
30*56dce868STzvetomir Stoyanov (VMware) 		perf_thread_map__set_pid(threads, i, i * 100);
31*56dce868STzvetomir Stoyanov (VMware) 
32*56dce868STzvetomir Stoyanov (VMware) 	__T("Unexpected value of thread 0",
33*56dce868STzvetomir Stoyanov (VMware) 	    perf_thread_map__pid(threads, 0) == (array ? array[0] : -1));
34*56dce868STzvetomir Stoyanov (VMware) 
35*56dce868STzvetomir Stoyanov (VMware) 	for (i = 1; i < nr; i++) {
36*56dce868STzvetomir Stoyanov (VMware) 		__T("Unexpected thread value",
37*56dce868STzvetomir Stoyanov (VMware) 		    perf_thread_map__pid(threads, i) == i * 100);
38*56dce868STzvetomir Stoyanov (VMware) 	}
39*56dce868STzvetomir Stoyanov (VMware) 
40*56dce868STzvetomir Stoyanov (VMware) 	perf_thread_map__put(threads);
41*56dce868STzvetomir Stoyanov (VMware) 
42*56dce868STzvetomir Stoyanov (VMware) 	return 0;
43*56dce868STzvetomir Stoyanov (VMware) }
44*56dce868STzvetomir Stoyanov (VMware) 
45*56dce868STzvetomir Stoyanov (VMware) #define THREADS_NR	10
test_threadmap(int argc,char ** argv)463d970601SJiri Olsa int test_threadmap(int argc, char **argv)
473ce311afSJiri Olsa {
483ce311afSJiri Olsa 	struct perf_thread_map *threads;
49*56dce868STzvetomir Stoyanov (VMware) 	pid_t thr_array[THREADS_NR];
50*56dce868STzvetomir Stoyanov (VMware) 	int i;
513ce311afSJiri Olsa 
523ce311afSJiri Olsa 	__T_START;
533ce311afSJiri Olsa 
543ce311afSJiri Olsa 	libperf_init(libperf_print);
553ce311afSJiri Olsa 
563ce311afSJiri Olsa 	threads = perf_thread_map__new_dummy();
573ce311afSJiri Olsa 	if (!threads)
583ce311afSJiri Olsa 		return -1;
593ce311afSJiri Olsa 
603ce311afSJiri Olsa 	perf_thread_map__get(threads);
613ce311afSJiri Olsa 	perf_thread_map__put(threads);
623ce311afSJiri Olsa 	perf_thread_map__put(threads);
633ce311afSJiri Olsa 
64*56dce868STzvetomir Stoyanov (VMware) 	test_threadmap_array(THREADS_NR, NULL);
65*56dce868STzvetomir Stoyanov (VMware) 
66*56dce868STzvetomir Stoyanov (VMware) 	for (i = 0; i < THREADS_NR; i++)
67*56dce868STzvetomir Stoyanov (VMware) 		thr_array[i] = i + 100;
68*56dce868STzvetomir Stoyanov (VMware) 
69*56dce868STzvetomir Stoyanov (VMware) 	test_threadmap_array(THREADS_NR, thr_array);
70*56dce868STzvetomir Stoyanov (VMware) 
713ce311afSJiri Olsa 	__T_END;
72bba2ea17SIan Rogers 	return tests_failed == 0 ? 0 : -1;
733ce311afSJiri Olsa }
74