Make tests public. Rewrite most tests. Add tests.
[pintos-anon] / src / tests / filesys / extended / dir-rm-tree.c
1 #include <stdarg.h>
2 #include <stdio.h>
3 #include <syscall.h>
4 #include "tests/filesys/extended/mk-tree.h"
5 #include "tests/lib.h"
6 #include "tests/main.h"
7
8 static void remove_tree (int at, int bt, int ct, int dt);
9
10 void
11 test_main (void) 
12 {
13   make_tree (4, 3, 3, 4);
14   remove_tree (4, 3, 3, 4);
15 }
16
17 static void do_remove (const char *format, ...) PRINTF_FORMAT (1, 2);
18
19 static void
20 remove_tree (int at, int bt, int ct, int dt) 
21 {
22   char try[128];
23   int a, b, c, d;
24
25   msg ("removing /0/0/0/0 through /%d/%d/%d/%d...",
26        at - 1, bt - 1, ct - 1, dt - 1);
27   quiet = true;
28   for (a = 0; a < at; a++) 
29     {
30       for (b = 0; b < bt; b++) 
31         {
32           for (c = 0; c < ct; c++) 
33             {
34               for (d = 0; d < dt; d++)
35                 do_remove ("/%d/%d/%d/%d", a, b, c, d);
36               do_remove ("/%d/%d/%d", a, b, c);
37             }
38           do_remove ("/%d/%d", a, b);
39         }
40       do_remove ("/%d", a);
41     }
42   quiet = false;
43
44   snprintf (try, sizeof (try), "/%d/%d/%d/%d", at - 1, 0, ct - 1, 0);
45   CHECK (open (try) == -1, "open \"%s\" (must return -1)", try);
46 }
47
48 static void
49 do_remove (const char *format, ...) 
50 {
51   char name[128];
52   va_list args;
53
54   va_start (args, format);
55   vsnprintf (name, sizeof name, format, args);
56   va_end (args);
57
58   CHECK (remove (name), "remove \"%s\"", name);
59 }