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