root/tools/lib/perf/include/internal/tests.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __LIBPERF_INTERNAL_TESTS_H
#define __LIBPERF_INTERNAL_TESTS_H

#include <stdio.h>
#include <unistd.h>

extern int tests_failed;
extern int tests_verbose;

static inline int get_verbose(char **argv, int argc)
{
        int c;
        int verbose = 0;

        while ((c = getopt(argc, argv, "v")) != -1) {
                switch (c)
                {
                case 'v':
                        verbose = 1;
                        break;
                default:
                        break;
                }
        }
        optind = 1;

        return verbose;
}

#define __T_START                                       \
do {                                                    \
        tests_verbose = get_verbose(argv, argc);        \
        fprintf(stdout, "- running %s...", __FILE__);   \
        fflush(NULL);                                   \
        tests_failed = 0;                               \
} while (0)

#define __T_END                                                         \
do {                                                                    \
        if (tests_failed)                                               \
                fprintf(stdout, "  FAILED (%d)\n", tests_failed);       \
        else                                                            \
                fprintf(stdout, "OK\n");                                \
} while (0)

#define __T(text, cond)                                                          \
do {                                                                             \
        if (!(cond)) {                                                           \
                fprintf(stderr, "FAILED %s:%d %s\n", __FILE__, __LINE__, text);  \
                tests_failed++;                                                  \
                return -1;                                                       \
        }                                                                        \
} while (0)

#define __T_VERBOSE(...)                                                \
do {                                                                    \
        if (tests_verbose) {                                            \
                if (tests_verbose == 1) {                               \
                        fputc('\n', stderr);                            \
                        tests_verbose++;                                \
                }                                                       \
                fprintf(stderr, ##__VA_ARGS__);                         \
        }                                                               \
} while (0)

#endif /* __LIBPERF_INTERNAL_TESTS_H */