1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __LIBPERF_INTERNAL_TESTS_H
3#define __LIBPERF_INTERNAL_TESTS_H
4
5#include <stdio.h>
6#include <unistd.h>
7
8extern int tests_failed;
9extern int tests_verbose;
10
11static inline int get_verbose(char **argv, int argc)
12{
13	int c;
14	int verbose = 0;
15
16	while ((c = getopt(argc, argv, "v")) != -1) {
17		switch (c)
18		{
19		case 'v':
20			verbose = 1;
21			break;
22		default:
23			break;
24		}
25	}
26	optind = 1;
27
28	return verbose;
29}
30
31#define __T_START					\
32do {							\
33	tests_verbose = get_verbose(argv, argc);	\
34	fprintf(stdout, "- running %s...", __FILE__);	\
35	fflush(NULL);					\
36	tests_failed = 0;				\
37} while (0)
38
39#define __T_END								\
40do {									\
41	if (tests_failed)						\
42		fprintf(stdout, "  FAILED (%d)\n", tests_failed);	\
43	else								\
44		fprintf(stdout, "OK\n");				\
45} while (0)
46
47#define __T(text, cond)                                                          \
48do {                                                                             \
49	if (!(cond)) {                                                           \
50		fprintf(stderr, "FAILED %s:%d %s\n", __FILE__, __LINE__, text);  \
51		tests_failed++;                                                  \
52		return -1;                                                       \
53	}                                                                        \
54} while (0)
55
56#define __T_VERBOSE(...)						\
57do {									\
58	if (tests_verbose) {						\
59		if (tests_verbose == 1) {				\
60			fputc('\n', stderr);				\
61			tests_verbose++;				\
62		}							\
63		fprintf(stderr, ##__VA_ARGS__);				\
64	}								\
65} while (0)
66
67#endif /* __LIBPERF_INTERNAL_TESTS_H */
68