in src/bench.c [180:214]
static void sparkey_randomaccess(int n, int lookups) {
sparkey_hashreader *myreader;
sparkey_logiter *myiter;
sparkey_assert(sparkey_hash_open(&myreader, "test.spi", "test.spl"));
printf(" Number of hash collisions: %"PRIu64"\n", sparkey_hash_numcollisions(myreader));
sparkey_logreader *logreader = sparkey_hash_getreader(myreader);
sparkey_assert(sparkey_logiter_create(&myiter, logreader));
uint8_t *valuebuf = malloc(sparkey_logreader_maxvaluelen(logreader));
for (int i = 0; i < lookups; i++) {
char mykey[100];
char myvalue[100];
int r = rand() % n;
sprintf(mykey, "key_%d", r);
sprintf(myvalue, "value_%d", r);
sparkey_assert(sparkey_hash_get(myreader, (uint8_t*)mykey, strlen(mykey), myiter));
if (sparkey_logiter_state(myiter) != SPARKEY_ITER_ACTIVE) {
printf("Failed to lookup key: %s\n", mykey);
exit(1);
}
uint64_t wanted_valuelen = sparkey_logiter_valuelen(myiter);
uint64_t actual_valuelen;
sparkey_assert(sparkey_logiter_fill_value(myiter, logreader, wanted_valuelen, valuebuf, &actual_valuelen));
if (actual_valuelen != strlen(myvalue) || memcmp(myvalue, valuebuf, actual_valuelen)) {
printf("Did not get the expected value for key: %s\n", mykey);
exit(1);
}
}
sparkey_logiter_close(&myiter);
sparkey_hash_close(&myreader);
}