X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=grading%2Ffilesys%2Ffslib.h;h=ea3862490a3d028c807cfc3fcb15aae8097c6d27;hb=fee64035c4cd307b9b01a954ec9fb3684d2aa56b;hp=b15759897e6da4e7f6d537e36792e202f7c476c8;hpb=ff076af15fa93292b8843e76bd6bab7ac5421095;p=pintos-anon diff --git a/grading/filesys/fslib.h b/grading/filesys/fslib.h index b157598..ea38624 100644 --- a/grading/filesys/fslib.h +++ b/grading/filesys/fslib.h @@ -4,19 +4,52 @@ #include #include #include +#include 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 */