From 0fe485a6d76b6096efee19634c7388c6ffd3fe2c Mon Sep 17 00:00:00 2001 From: Rich Prohaska <prohaska@tokutek.com> Date: Tue, 8 Jul 2008 17:54:35 +0000 Subject: [PATCH] test case to check mostly seq inserts. closes #1003 git-svn-id: file:///svn/tokudb@4984 c7de825b-a66e-492c-adef-691d508d4ae1 --- src/tests/test_mostly_seq.c | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/tests/test_mostly_seq.c diff --git a/src/tests/test_mostly_seq.c b/src/tests/test_mostly_seq.c new file mode 100644 index 00000000000..b3933be1e48 --- /dev/null +++ b/src/tests/test_mostly_seq.c @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <sys/stat.h> +#include <time.h> +#include <arpa/inet.h> +#include <db.h> +#include "test.h" + +void seqinsert(int n, float p) { + if (verbose) printf("%s %d %f\n", __FUNCTION__, n, p); + + system("rm -rf " ENVDIR); + mkdir(ENVDIR, 0777); + + int r; + DB_ENV *env; + r = db_env_create(&env, 0); assert(r == 0); + + r = env->open(env, ENVDIR, DB_INIT_MPOOL + DB_PRIVATE + DB_CREATE, 077); assert(r == 0); + + DB *db; + r = db_create(&db, env, 0); assert(r == 0); + + r = db->open(db, 0, "test.db", 0, DB_BTREE, DB_CREATE, 0777); assert(r == 0); + + int i; + for (i = 2; i <= 2*n; i += 2) { + int k = htonl(i); + int v = i; + DBT key, val; + r = db->put(db, 0, dbt_init(&key, &k, sizeof k), dbt_init(&val, &v, sizeof v), 0); assert(r == 0); + if (random() <= RAND_MAX * p) { + k = htonl(i-1); + v = i-1; + r = db->put(db, 0, dbt_init(&key, &k, sizeof k), dbt_init(&val, &v, sizeof v), 0); assert(r == 0); + } + } + + r = db->close(db, 0); assert(r == 0); + + r = env->close(env, 0); assert(r == 0); +} + +int main(int argc, char *argv[]) { + srandom(time(0)); + int i; + for (i=1; i<argc; i++) { + char *arg = argv[i]; + if (strcmp(arg, "-v") == 0) { + verbose++; + continue; + } + if (strcmp(arg, "-seed") == 0) { + if (i+1 >= argc) return 1; + srandom(atoi(argv[++i])); + continue; + } + } + + int nodesize = 1024*1024; + int entrysize = 25; + int d = nodesize/entrysize; + int n = d + d/4; + + float ps[] = { 0.0, 0.0001, 0.001, 0.01, 0.1, 0.25, 0.5, 1 }; + for (i=0; i<sizeof ps / sizeof (float); i++) { + seqinsert(n, ps[i]); + } + return 0; +} -- 2.30.9