static void sparkey_randomaccess()

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);
}