inital commit
[c11concurrency-benchmarks.git] / mabain / src / test / mbtest_mp.cpp
1 #include <string.h>
2 #include <assert.h>
3 #include <unistd.h>
4
5 #include "../db.h"
6 #include "./test_key.h"
7
8 const char *db_dir = "/var/tmp/mabain_test";
9
10 using namespace mabain;
11
12 int main(int argc, char *argv[])
13 {
14     int num = 0;
15     int options = CONSTS::ReaderOptions();
16     int duration = 0; // in seconds
17     int n0 = 0;
18     int key_type = MABAIN_TEST_KEY_TYPE_INT;
19     for(int i = 1; i < argc; i++) {
20         if(strcmp(argv[i], "-w") == 0) {
21             options |= CONSTS::WriterOptions() | CONSTS::ASYNC_WRITER_MODE;
22         } else if(strcmp(argv[i], "-d") == 0) {
23             if(++i >= argc) abort();
24             db_dir = argv[i];
25         } else if(strcmp(argv[i], "-n") == 0) {
26             if(++i >= argc) abort();
27             num = atoi(argv[i]);
28         } else if(strcmp(argv[i], "-n0") == 0) {
29             if(++i >= argc) abort();
30             n0 = atoi(argv[i]);
31         } else if(strcmp(argv[i], "-t") == 0) {
32             if(++i >= argc) abort();
33             duration = atoi(argv[i]);
34         } else if(strcmp(argv[i], "-k") == 0) {
35             if(++i >= argc) abort();
36             if(strcmp(argv[i], "int") == 0) {
37                 key_type = MABAIN_TEST_KEY_TYPE_INT;
38             } else if(strcmp(argv[i], "sha1") == 0) {
39                 key_type = MABAIN_TEST_KEY_TYPE_SHA_128;
40             } else {
41                 key_type = MABAIN_TEST_KEY_TYPE_SHA_256;
42             }
43         } else {
44             std::cout << "unknown argument " << argv[i] << "\n";
45         }
46     }
47
48     DB::SetLogFile(std::string(db_dir) + "/mabain.log");
49     DB *db = new DB(db_dir, options);
50     TestKey tkey(key_type);
51     assert(db->is_open());
52
53     for(int i = 0; i < num; i++) {
54         std::string kv = tkey.get_key(n0 + i);
55         int rval = db->Add(kv, kv);
56         if(rval != MBError::SUCCESS) {
57             std::cout << "failed to add " << kv << " :" << MBError::get_error_str(rval) << std::endl;
58         }
59     }
60
61     if(duration > 0) {
62         uint32_t tm_stop = time(NULL) + duration;
63         int tm_diff = tm_stop - time(NULL);
64         while(tm_diff > 0) {
65             sleep(1);
66             tm_diff = tm_stop - time(NULL); 
67         }
68         std::cout << "async writer exited\n";
69     }
70
71     db->Close();
72     DB::CloseLogFile();
73     return 0;
74 }