]> git.sur5r.net Git - openldap/blob - libraries/libmdb/mtest.c
3533638c48c62a890ac9e5e9b228a9adff10fe58
[openldap] / libraries / libmdb / mtest.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4 #include "mdb.h"
5
6 int main(int argc,char * argv[])
7 {
8         int i = 0, j = 0, rc;
9         MDB_env *env;
10         MDB_db *db;
11         MDB_val key, data;
12         MDB_txn *txn;
13         MDB_stat *mst;
14         MDB_cursor *cursor;
15         int count;
16         int *values;
17         char sval[32];
18
19         srandom(time(NULL));
20
21             count = (random()%384) + 64;
22             values = (int *)malloc(count*sizeof(int));
23
24             for(i = 0;i<count;i++) {
25                         values[i] = random()%1024;
26             }
27     
28                 rc = mdbenv_create(&env);
29                 rc = mdbenv_set_mapsize(env, 10485760);
30                 rc = mdbenv_open(env, "./testdb", MDB_FIXEDMAP|MDB_NOSYNC, 0664);
31                 rc = mdb_txn_begin(env, 0, &txn);
32                 rc = mdb_open(env, txn, NULL, 0, &db);
33    
34                 key.mv_size = sizeof(int);
35                 key.mv_data = sval;
36                 data.mv_size = sizeof(sval);
37                 data.mv_data = sval;
38
39                 printf("Adding %d values\n", count);
40             for (i=0;i<count;i++) {     
41                         sprintf(sval, "%03x %d foo bar", values[i], values[i]);
42                         rc = mdb_put(db, txn, &key, &data, MDB_NOOVERWRITE);
43                         if (rc) j++;
44             }
45                 if (j) printf("%d duplicates skipped\n", j);
46                 rc = mdb_txn_commit(txn);
47                 rc = mdbenv_stat(env, &mst);
48
49                 rc = mdb_cursor_open(db, NULL, &cursor);
50                 while (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT) == 0) {
51                         printf("key: %.*s, data: %.*s\n",
52                                 key.mv_size, key.mv_data, data.mv_size, data.mv_data);
53                 }
54                 mdb_cursor_close(cursor);
55
56                 j=0;
57                 key.mv_data = sval;
58             for (i= count - 1; i > -1; i-= (random()%5)) {      
59                         j++;
60                         rc = mdb_txn_begin(env, 0, &txn);
61                         sprintf(sval, "%03x ", values[i]);
62                         rc = mdb_del(db, txn, &key, NULL);
63                         if (rc) {
64                                 j--;
65                                 mdb_txn_abort(txn);
66                         } else {
67                                 rc = mdb_txn_commit(txn);
68                         }
69             }
70             free(values);
71                 printf("Deleted %d values\n", j);
72
73                 rc = mdbenv_stat(env, &mst);
74                 rc = mdb_cursor_open(db, NULL, &cursor);
75                 while (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT) == 0) {
76                         printf("key: %.*s, data: %.*s\n",
77                                 key.mv_size, key.mv_data, data.mv_size, data.mv_data);
78                 }
79                 mdb_cursor_close(cursor);
80
81                 mdb_close(db);
82                 mdbenv_close(env);
83
84         return 0;
85 }