]> mj.ucw.cz Git - libucw.git/blobdiff - lib/db-test.c
Forgot to commit this one during the "search by age" changes.
[libucw.git] / lib / db-test.c
index b6f65ae47e0edce9d4ba05aa218780ae6dc7bc86..659313b82356db9f76965c323257668d4bde2f05 100644 (file)
@@ -1,17 +1,19 @@
 /*
  *     Sherlock Library -- Database Manager -- Tests and Benchmarks
  *
- *     (c) 1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ *     (c) 1999 Martin Mares <mj@ucw.cz>
  */
 
 #if 1
-#include "db.c"
+#include "lib/db.c"
 #define NAME "SDBM"
 #else
-#include "db-emul.c"
+#include "lib/db-emul.c"
 #define NAME "GDBM"
 #endif
 
+#include <getopt.h>
+#include <unistd.h>
 #include <stdarg.h>
 #include <sys/stat.h>
 
@@ -43,6 +45,7 @@ Options:\n\
 -kU            Use keys with URL distribution\n\
 -n<n>          Number of distinct keys\n\
 -d<m>[-<n>]    Use specified value size (see -k<m>-<n>)\n\
+-t             Perform the tests on an existing database file\n\
 -v             Be verbose\n\
 -s             Turn on synchronous mode\n\
 -S             Turn on supersynchronous mode\n\
@@ -247,17 +250,20 @@ parse_size(int *min, int *max, char *c)
     *min = *max = atol(c);
 }
 
+#define PROGRESS(i) if ((verbose > 2) || (verbose > 1 && !(i & 1023))) fprintf(stderr, "%d\r", i)
+
 int main(int argc, char **argv)
 {
   int c, i, j, k, l, m;
   byte kb[2048], vb[2048], vb2[2048];
   uns ks, vs, vs2, perc, cnt;
   char *ch;
+  int dont_delete = 0;
 
-  initlog("dbtest");
+  log_init("dbtest");
   setvbuf(stdout, NULL, _IONBF, 0);
   setvbuf(stderr, NULL, _IONBF, 0);
-  while ((c = getopt(argc, argv, "c:p:k:n:d:vsSF")) >= 0)
+  while ((c = getopt(argc, argv, "c:p:k:n:d:vsStF")) >= 0)
     switch (c)
       {
       case 'c':
@@ -290,6 +296,9 @@ int main(int argc, char **argv)
       case 'F':
        opts.flags |= SDBM_FAST;
        break;
+      case 't':
+       dont_delete = 1;
+       break;
       default:
        help();
       }
@@ -312,7 +321,8 @@ int main(int argc, char **argv)
 
   verb("OPEN(%s, key=%d, val=%d, cache=%d, pgorder=%d)\n", opts.name, opts.key_size, opts.val_size,
        opts.cache_size, opts.page_order);
-  unlink(opts.name);
+  if (!dont_delete)
+    unlink(opts.name);
   d = sdbm_open(&opts);
   if (!d)
     die("open failed: %m");
@@ -327,7 +337,7 @@ int main(int argc, char **argv)
          printf("create %d: ", num_keys);
          for(i=0; i<num_keys; i++)
            {
-             verb("^2%d\r", i);
+             PROGRESS(i);
              ks = keygen(kb, i);
              vs = valgen(vb, i);
              if (sdbm_store(d, kb, ks, vb, vs) != 1) die("store failed");
@@ -337,7 +347,7 @@ int main(int argc, char **argv)
          printf("rewrite %d: ", num_keys);
          for(i=0; i<num_keys; i++)
            {
-             verb("^2%d\r", i);
+             PROGRESS(i);
              ks = keygen(kb, i);
              vs = valgen(vb, i);
              if (sdbm_replace(d, kb, ks, vb, vs) != 1) die("replace failed");
@@ -356,7 +366,7 @@ int main(int argc, char **argv)
              ch = o;
              perc = 100;
            }
-         cnt = atol(o);
+         cnt = atol(ch);
          if (!cnt)
            {
              cnt = num_keys;
@@ -372,7 +382,7 @@ int main(int argc, char **argv)
                i++;
              else
                i = random_max(num_keys) + ((random_max(100) < perc) ? 0 : num_keys);
-             verb("^2%d\r", i);
+             PROGRESS(i);
              ks = keygen(kb, i);
              if (c)
                {
@@ -397,7 +407,7 @@ int main(int argc, char **argv)
          printf("delete %d: ", num_keys);
          for(i=0; i<num_keys; i++)
            {
-             verb("^2%d\r", i);
+             PROGRESS(i);
              ks = keygen(kb, i);
              if (sdbm_delete(d, kb, ks) != 1) die("delete failed");
            }
@@ -423,7 +433,7 @@ int main(int argc, char **argv)
              i = keydec(kb);
              if (i < 0 || i >= num_keys)
                die("get_next: %d out of range", i);
-             verb("^2%d\r", i);
+             PROGRESS(i);
              vs2 = keygen(vb2, i);
              if (ks != vs2 || memcmp(kb, vb2, ks))
                die("get_next: key mismatch at %d", i);