mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
fa20edc44d
- Remove most __ASSEMBLER__ __LINKER__ ifdefs - Rename libc/intrin/bits.h to libc/serialize.h - Block pthread cancelation in fchmodat() polyfill - Remove `clang-format off` statements in third_party
66 lines
2.6 KiB
C
66 lines
2.6 KiB
C
#ifndef NSYNC_TESTING_TESTING_H_
|
|
#define NSYNC_TESTING_TESTING_H_
|
|
|
|
typedef struct testing_base_s *testing_base;
|
|
typedef const struct testing_base_s *const_testing_base;
|
|
typedef struct testing_s *testing;
|
|
|
|
/* Return a newly initialized testing_base. */
|
|
testing_base testing_new (int argc, char *argv[], int flags);
|
|
|
|
/* Return the index of the first argument in argv[] not processed by testing_new() */
|
|
int testing_base_argn (testing_base tb);
|
|
|
|
/* exit() with the test's exit status */
|
|
int testing_base_exit (testing_base tb);
|
|
|
|
/* Stop and start the benchmark timer. */
|
|
void testing_stop_timer (testing t);
|
|
void testing_start_timer (testing t);
|
|
|
|
/* Return whether the machine appears to be a uniprocessor.
|
|
Some tests get different results on uniprocessors, because
|
|
the probability of certain interleavings of thread actions is
|
|
greatly reduced. */
|
|
int testing_is_uniprocessor (testing t);
|
|
|
|
/* Given a testing_base, run f (t), where t has type testing.
|
|
Output will be for a test. */
|
|
#define TEST_RUN(tb, f) testing_run_ ((tb), &f, #f, 0)
|
|
|
|
/* Given a testing_base, run f (t), where t has type testing.
|
|
Output will be for a benchmark, which should iterate testing_n (t) times. */
|
|
#define BENCHMARK_RUN(tb, f) testing_run_ ((tb), &f, #f, 1)
|
|
|
|
/* Return the iteration count for a benchmark. */
|
|
int testing_n (testing t);
|
|
|
|
/* Output nul-terminated string msg[] to stderr, then abort(). */
|
|
void testing_panic (const char *msg);
|
|
|
|
/* Return a value below 0 if tests should run short, 0 if normal, and a value exceeding
|
|
0 if tests should run long. */
|
|
int testing_longshort (testing t);
|
|
|
|
/* Return non-zero if the user requested verbose output. */
|
|
int testing_verbose (testing t);
|
|
|
|
/* Output a printf-formated log message associated with *t.
|
|
Example: TEST_LOG (t, ("wombat %d", some_int));
|
|
The TEST_ERROR() and TEST_FATAL() forms of the call makr the test as failing.
|
|
The TEST_FATAL() form causes other subtests not to run. */
|
|
#define TEST_LOG(t, args) testing_error_ ((t), 0, __FILE__, __LINE__, smprintf args);
|
|
#define TEST_ERROR(t, args) testing_error_ ((t), 1, __FILE__, __LINE__, smprintf args);
|
|
#define TEST_FATAL(t, args) testing_error_ ((t), 2, __FILE__, __LINE__, smprintf args);
|
|
|
|
/* ---------------------------------------- */
|
|
|
|
/* internal details follow */
|
|
|
|
/* An internal routine used by TEST_RUN() and BENCHMARK_RUN(). */
|
|
void testing_run_ (testing_base tb, void (*f) (testing t), const char *name, int is_benchmark);
|
|
|
|
/* Output an error message msg, and record status. */
|
|
void testing_error_ (testing t, int status, const char *file, int line, char *msg);
|
|
|
|
#endif /*NSYNC_TESTING_TESTING_H_*/
|