]> mj.ucw.cz Git - libucw.git/blob - lib/db-test.c
Moved tests to extra file.
[libucw.git] / lib / db-test.c
1 /*
2  *      Sherlock Library -- Database Manager -- Simple Tests
3  *
4  *      (c) 1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
5  */
6
7 #if 1
8 #include "db.c"
9 #else
10 #include "db-emul.c"
11 #endif
12
13 int main(void)
14 {
15   struct sdbm *d;
16   struct sdbm_options o = {
17     name: "db.test",
18     flags: SDBM_CREAT | SDBM_WRITE,
19     page_order: 10,
20     cache_size: 1024,
21     key_size: -1,
22     val_size: 4
23   };
24   byte buf[256];
25   int i, j, k, l, m, n;
26 #define BIGN 10000
27
28   puts("OPEN");
29   d = sdbm_open(&o);
30   if (!d)
31     die("failed: %m");
32
33   puts("WRITE");
34   for(i=0; i<BIGN; i++)
35     {
36       sprintf(buf, "%d", i);
37       k = sdbm_store(d, buf, strlen(buf), (byte *) &i, sizeof(i));
38 //      printf("%s:%d\r", buf, k);
39       fflush(stdout);
40     }
41   sdbm_sync(d);
42
43   puts("REWRITE");
44   for(i=0; i<BIGN; i++)
45     {
46       sprintf(buf, "%d", i);
47       k = sdbm_replace(d, buf, strlen(buf), (byte *) &i, sizeof(i));
48 //      printf("%s:%d\r", buf, k);
49       if (!k) { printf("XXX %s %d\n", buf, k); return 1; }
50       fflush(stdout);
51     }
52   sdbm_sync(d);
53
54   puts("READ");
55   for(i=0; i<BIGN; i++)
56     {
57       sprintf(buf, "%d", i);
58       j = sdbm_fetch(d, buf, strlen(buf), NULL, NULL);
59 //      printf("%s:%d\r", buf, j);
60       fflush(stdout);
61       if (!j)
62         { printf("\nERR: %s %d\n", buf, j); return 1; }
63     }
64
65   puts("FETCH");
66   sdbm_rewind(d);
67   l = 0;
68   m = 0;
69   n = 0;
70   for(;;)
71     {
72       j = sizeof(buf);
73       i = sdbm_get_next(d, buf, &j, (byte *) &k, NULL);
74       if (i < 0) { puts("ERRRR\n"); return 1; }
75       if (!i) break;
76       buf[j] = 0;
77 //      printf("%s %d\n", buf, k);
78       l += k;
79       m += n++;
80     }
81   if (n != BIGN) { printf("MISMATCH COUNT %d\n", n); return 1; }
82   if (l != m) { printf("MISMATCH %d != %d\n", l, m); return 1; }
83
84   puts("DELETE");
85   for(i=0; i<BIGN; i++)
86     {
87       sprintf(buf, "%d", i);
88       j = sdbm_delete(d, buf, strlen(buf));
89 //      printf("%s:%d\r", buf, j);
90       fflush(stdout);
91       if (!j)
92         { printf("\nERR: %s %d\n", buf, j); return 1; }
93     }
94   sdbm_sync(d);
95
96   puts("CHECK");
97   sdbm_rewind(d);
98   if (sdbm_get_next(d, buf, NULL, NULL, NULL)) { puts("NOT EMPTY!"); return 1; }
99
100   puts("CLOSE");
101   sdbm_close(d);
102   puts("DONE");
103   return 0;
104 }