162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __LIBPERF_INTERNAL_TESTS_H
362306a36Sopenharmony_ci#define __LIBPERF_INTERNAL_TESTS_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <stdio.h>
662306a36Sopenharmony_ci#include <unistd.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciextern int tests_failed;
962306a36Sopenharmony_ciextern int tests_verbose;
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistatic inline int get_verbose(char **argv, int argc)
1262306a36Sopenharmony_ci{
1362306a36Sopenharmony_ci	int c;
1462306a36Sopenharmony_ci	int verbose = 0;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	while ((c = getopt(argc, argv, "v")) != -1) {
1762306a36Sopenharmony_ci		switch (c)
1862306a36Sopenharmony_ci		{
1962306a36Sopenharmony_ci		case 'v':
2062306a36Sopenharmony_ci			verbose = 1;
2162306a36Sopenharmony_ci			break;
2262306a36Sopenharmony_ci		default:
2362306a36Sopenharmony_ci			break;
2462306a36Sopenharmony_ci		}
2562306a36Sopenharmony_ci	}
2662306a36Sopenharmony_ci	optind = 1;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	return verbose;
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#define __T_START					\
3262306a36Sopenharmony_cido {							\
3362306a36Sopenharmony_ci	tests_verbose = get_verbose(argv, argc);	\
3462306a36Sopenharmony_ci	fprintf(stdout, "- running %s...", __FILE__);	\
3562306a36Sopenharmony_ci	fflush(NULL);					\
3662306a36Sopenharmony_ci	tests_failed = 0;				\
3762306a36Sopenharmony_ci} while (0)
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci#define __T_END								\
4062306a36Sopenharmony_cido {									\
4162306a36Sopenharmony_ci	if (tests_failed)						\
4262306a36Sopenharmony_ci		fprintf(stdout, "  FAILED (%d)\n", tests_failed);	\
4362306a36Sopenharmony_ci	else								\
4462306a36Sopenharmony_ci		fprintf(stdout, "OK\n");				\
4562306a36Sopenharmony_ci} while (0)
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci#define __T(text, cond)                                                          \
4862306a36Sopenharmony_cido {                                                                             \
4962306a36Sopenharmony_ci	if (!(cond)) {                                                           \
5062306a36Sopenharmony_ci		fprintf(stderr, "FAILED %s:%d %s\n", __FILE__, __LINE__, text);  \
5162306a36Sopenharmony_ci		tests_failed++;                                                  \
5262306a36Sopenharmony_ci		return -1;                                                       \
5362306a36Sopenharmony_ci	}                                                                        \
5462306a36Sopenharmony_ci} while (0)
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define __T_VERBOSE(...)						\
5762306a36Sopenharmony_cido {									\
5862306a36Sopenharmony_ci	if (tests_verbose) {						\
5962306a36Sopenharmony_ci		if (tests_verbose == 1) {				\
6062306a36Sopenharmony_ci			fputc('\n', stderr);				\
6162306a36Sopenharmony_ci			tests_verbose++;				\
6262306a36Sopenharmony_ci		}							\
6362306a36Sopenharmony_ci		fprintf(stderr, ##__VA_ARGS__);				\
6462306a36Sopenharmony_ci	}								\
6562306a36Sopenharmony_ci} while (0)
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#endif /* __LIBPERF_INTERNAL_TESTS_H */
68