0d4f12d28d4a9fa9fbedab9d7f128026f3ad1784
[pintos-anon] / grading / filesys / fslib.h
1 #ifndef FSLIB_H
2 #define FSLIB_H
3
4 #include <debug.h>
5 #include <stdbool.h>
6 #include <stddef.h>
7 #include <syscall.h>
8
9 extern const char test_name[];
10 extern bool quiet;
11
12 void msg (const char *, ...) PRINTF_FORMAT (1, 2);
13 void 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
38 void shuffle (void *, size_t cnt, size_t size);
39
40 void seq_test (const char *filename,
41                void *buf, size_t size, size_t initial_size,
42                size_t (*block_size_func) (void),
43                void (*check_func) (int fd, long ofs));
44
45 void check_file (const char *filename, const void *buf, size_t filesize);
46
47 void compare_bytes (const void *read_data, const void *expected_data,
48                     size_t size, size_t ofs, const char *filename);
49
50 void exec_children (const char *child_name, pid_t pids[], size_t child_cnt);
51 void wait_children (pid_t pids[], size_t child_cnt);
52
53 void test_main (void);
54
55 #endif /* fslib.h */