/*
- * Sherlock Library -- Database Manager -- Tests and Benchmarks
+ * UCW Library -- Database Manager -- Tests and Benchmarks
*
- * (c) 1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ * (c) 1999 Martin Mares <mj@ucw.cz>
+ *
+ * This software may be freely distributed and used according to the terms
+ * of the GNU Lesser General Public License.
*/
#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 <stdlib.h>
+#include <unistd.h>
#include <stdarg.h>
#include <sys/stat.h>
-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\
*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;
+ timestamp_t timer;
- 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':
case 'F':
opts.flags |= SDBM_FAST;
break;
+ case 't':
+ dont_delete = 1;
+ break;
default:
help();
}
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");
while (optind < argc)
{
char *o = argv[optind++];
- init_timer();
+ init_timer(&timer);
switch (*o)
{
case 'c':
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");
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");
ch = o;
perc = 100;
}
- cnt = atol(o);
+ cnt = atol(ch);
if (!cnt)
{
cnt = num_keys;
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)
{
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");
}
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);
help();
}
sdbm_sync(d);
- printf("%d ms\n", get_timer());
+ printf("%d ms\n", get_timer(&timer));
}
verb("CLOSE\n");