summaryrefslogtreecommitdiffstats
path: root/tests/lib.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib.h')
-rw-r--r--tests/lib.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/lib.h b/tests/lib.h
new file mode 100644
index 0000000..648327b
--- /dev/null
+++ b/tests/lib.h
@@ -0,0 +1,50 @@
1#ifndef TESTS_LIB_H
2#define TESTS_LIB_H
3
4#include <debug.h>
5#include <stdbool.h>
6#include <stddef.h>
7#include <syscall.h>
8
9extern const char *test_name;
10extern bool quiet;
11
12void msg (const char *, ...) PRINTF_FORMAT (1, 2);
13void fail (const char *, ...) PRINTF_FORMAT (1, 2) NO_RETURN;
14
15/* Takes an expression to test for SUCCESS and a message, which
16 may include printf-style arguments. Logs the message, then
17 tests the expression. If it is zero, indicating failure,
18 emits the message as a failure.
19
20 Somewhat tricky to use:
21
22 - SUCCESS must not have side effects that affect the
23 message, because that will cause the original message and
24 the failure message to differ.
25
26 - The message must not have side effects of its own, because
27 it will be printed twice on failure, or zero times on
28 success if quiet is set. */
29#define CHECK(SUCCESS, ...) \
30 do \
31 { \
32 msg (__VA_ARGS__); \
33 if (!(SUCCESS)) \
34 fail (__VA_ARGS__); \
35 } \
36 while (0)
37
38void shuffle (void *, size_t cnt, size_t size);
39
40void exec_children (const char *child_name, pid_t pids[], size_t child_cnt);
41void wait_children (pid_t pids[], size_t child_cnt);
42
43void check_file_handle (int fd, const char *file_name,
44 const void *buf_, size_t filesize);
45void check_file (const char *file_name, const void *buf, size_t filesize);
46
47void compare_bytes (const void *read_data, const void *expected_data,
48 size_t size, size_t ofs, const char *file_name);
49
50#endif /* test/lib.h */