#include <debug.h>
#include <stdbool.h>
#include <stddef.h>
+#include <syscall.h>
extern const char test_name[];
extern bool quiet;
void msg (const char *, ...) PRINTF_FORMAT (1, 2);
void fail (const char *, ...) PRINTF_FORMAT (1, 2) NO_RETURN;
-void check (bool, const char *, ...) PRINTF_FORMAT (2, 3);
+
+/* Takes an expression to test for SUCCESS and a message, which
+ may include printf-style arguments. Logs the message, then
+ tests the expression. If it is zero, indicating failure,
+ emits the message as a failure.
+
+ Somewhat tricky to use:
+
+ - SUCCESS must not have side effects that affect the
+ message, because that will cause the original message and
+ the failure message to differ.
+
+ - The message must not have side effects of its own, because
+ it will be printed twice on failure, or zero times on
+ success if quiet is set. */
+#define CHECK(SUCCESS, ...) \
+ do \
+ { \
+ msg (__VA_ARGS__); \
+ if (!(SUCCESS)) \
+ fail (__VA_ARGS__); \
+ } \
+ while (0)
void shuffle (void *, size_t cnt, size_t size);
+
void seq_test (const char *filename,
- void *buffer, size_t size,
- size_t initial_size, int seed,
- size_t (*block_size) (void), void (*check) (int fd, long ofs));
+ void *buf, size_t size, size_t initial_size,
+ size_t (*block_size_func) (void),
+ void (*check_func) (int fd, long ofs));
+
void check_file (const char *filename, const void *buf, size_t filesize);
+void compare_bytes (const void *read_data, const void *expected_data,
+ size_t size, size_t ofs, const char *filename);
+
+void exec_children (const char *child_name, pid_t pids[], size_t child_cnt);
+void join_children (pid_t pids[], size_t child_cnt);
+
+void test_main (void);
+
#endif /* fslib.h */