git » nmdb » master » tree

[master] / tests / c / 1.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <stdlib.h>

#include <nmdb.h>
#include "timer.h"
#include "prototypes.h"


int main(int argc, char **argv)
{
	int i, r, times;
	unsigned char *key, *val, *gval;
	size_t ksize, vsize;
	unsigned long elapsed, misses = 0;
	nmdb_t *db;

	if (argc != 4) {
		printf("Usage: 1-* TIMES KEY VAL\n");
		return 1;
	}

	times = atoi(argv[1]);
	key = (unsigned char *) argv[2];
	ksize = strlen((char *) key);
	val = (unsigned char *) argv[3];
	vsize = strlen((char *) val);

	db = nmdb_init();
	if (db == NULL) {
		perror("nmdb_init() failed");
		return 1;
	}

	NADDSRV(db);

	printf("set... ");
	timer_start();
	for (i = 0; i < times; i++) {
		r = NSET(db, key, ksize, val, vsize);
		if (r < 0) {
			perror("Set");
			return 1;
		}
	}
	elapsed = timer_stop();
	printf("%lu\n", elapsed);

	gval = malloc(70 * 1024);
	printf("get... ");
	timer_start();
	for (i = 0; i < times; i++) {
		r = NGET(db, key, ksize, gval, vsize);
		if (r <= -2) {
			perror("Get");
			return 1;
		} else if (r == -1) {
			misses++;
		}
	}
	elapsed = timer_stop();
	printf("%lu\n", elapsed);
	free(gval);

	printf("get misses: %ld\n", misses);

	printf("del... ");
	timer_start();
	for (i = 0; i < times; i++) {
		r = NDEL(db, key, ksize);
		if (r < 0) {
			perror("Del");
			return 1;
		}
	}
	elapsed = timer_stop();
	printf("%lu\n", elapsed);


	nmdb_free(db);

	return 0;
}