• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "iwkv.h"
2 #include "iwlog.h"
3 #include "iwutils.h"
4 #include "iwkv_tests.h"
5 #include "iwkv_internal.h"
6 #include "iwth.h"
7 
8 #define KBUFSZ 1024
9 #define VBUFSZ 1024
10 static char kbuf[KBUFSZ];
11 static char vbuf[VBUFSZ];
12 
init_suite(void)13 int init_suite(void) {
14   return iwkv_init();
15 }
16 
clean_suite(void)17 int clean_suite(void) {
18   return 0;
19 }
20 
21 
iwkv_test10_1_impl(int fmt_version)22 static void iwkv_test10_1_impl(int fmt_version) {
23   IWKV iwkv;
24   IWKV_OPTS opts = {
25     .path = fmt_version > 1 ? "iwkv_test10_1_v2.db" : "iwkv_test10_1_v1.db",
26     .oflags = IWKV_TRUNC,
27     .wal = {
28       .enabled = true
29     }
30   };
31 
32   iwrc rc = iwkv_open(&opts, &iwkv);
33   CU_ASSERT_EQUAL_FATAL(rc, 0);
34 
35   for (int i = 0; i < 1024; ++i) {
36     IWDB db;
37     rc = iwkv_db(iwkv, i, 0, &db);
38     CU_ASSERT_EQUAL_FATAL(rc, 0);
39     for (int j = 0; j < 1024; ++j) {
40       IWKV_val key, val;
41       snprintf(kbuf, KBUFSZ, "%d", j);
42       snprintf(vbuf, VBUFSZ, "%03dval", j);
43       key.data = kbuf;
44       key.size = strlen(key.data);
45       val.data = vbuf;
46       val.size = strlen(val.data);
47       rc = iwkv_put(db, &key, &val, 0);
48       CU_ASSERT_EQUAL_FATAL(rc, 0);
49     }
50   }
51 
52   for (int i = 0; i < 1024; ++i) {
53     if ((i % 2)) {
54       IWDB db;
55       rc = iwkv_db(iwkv, i, 0, &db);
56       CU_ASSERT_EQUAL_FATAL(rc, 0);
57       rc = iwkv_db_destroy(&db);
58       CU_ASSERT_EQUAL_FATAL(rc, 0);
59     }
60   }
61 
62   rc = iwkv_close(&iwkv);
63   CU_ASSERT_EQUAL_FATAL(rc, 0);
64 
65   opts.oflags = 0;
66   rc = iwkv_open(&opts, &iwkv);
67   CU_ASSERT_EQUAL_FATAL(rc, 0);
68 
69   for (int i = 0; i < 1024; ++i) {
70     if (!(i % 2)) {
71       IWDB db;
72       rc = iwkv_db(iwkv, i, 0, &db);
73       CU_ASSERT_EQUAL_FATAL(rc, 0);
74       for (int j = 0; j < 1024; ++j) {
75         IWKV_val key, val;
76         int cret = 0;
77         snprintf(kbuf, KBUFSZ, "%d", j);
78         snprintf(vbuf, VBUFSZ, "%03dval", j);
79         key.data = kbuf;
80         key.size = strlen(key.data);
81         int vlen = strlen(vbuf);
82         rc = iwkv_get(db, &key, &val);
83         CU_ASSERT_EQUAL_FATAL(rc, 0);
84         IW_CMP(cret, vbuf, vlen, val.data, val.size);
85         CU_ASSERT_EQUAL_FATAL(cret, 0);
86         iwkv_val_dispose(&val);
87       }
88     }
89   }
90 
91   for (int i = 0; i < 1024; ++i) {
92     if (!(i % 2)) {
93       IWDB db;
94       rc = iwkv_db(iwkv, i, 0, &db);
95       CU_ASSERT_EQUAL_FATAL(rc, 0);
96       rc = iwkv_db_destroy(&db);
97       CU_ASSERT_EQUAL_FATAL(rc, 0);
98     }
99   }
100 
101   rc = iwkv_close(&iwkv);
102   CU_ASSERT_EQUAL_FATAL(rc, 0);
103 
104   // IWP_FILE_STAT fs;
105   // rc = iwp_fstat(opts.path, &fs);
106   // CU_ASSERT_EQUAL_FATAL(rc, 0);
107   // CU_ASSERT_TRUE(fs.size < 1024 * 1024);
108 }
109 
iwkv_test10_1_v1()110 static void iwkv_test10_1_v1() {
111   iwkv_test10_1_impl(1);
112 }
113 
iwkv_test10_1_v2()114 static void iwkv_test10_1_v2() {
115   iwkv_test10_1_impl(2);
116 }
117 
main()118 int main() {
119   CU_pSuite pSuite = NULL;
120 
121   /* Initialize the CUnit test registry */
122   if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error();
123 
124   /* Add a suite to the registry */
125   pSuite = CU_add_suite("iwkv_test8", init_suite, clean_suite);
126 
127   if (NULL == pSuite) {
128     CU_cleanup_registry();
129     return CU_get_error();
130   }
131 
132   /* Add the tests to the suite */
133   if (
134     (NULL == CU_add_test(pSuite, "iwkv_test10_1_v1", iwkv_test10_1_v1)) ||
135     (NULL == CU_add_test(pSuite, "iwkv_test10_1_v2", iwkv_test10_1_v2))
136   ) {
137     CU_cleanup_registry();
138     return CU_get_error();
139   }
140 
141   /* Run all tests using the CUnit Basic interface */
142   CU_basic_set_mode(CU_BRM_VERBOSE);
143   CU_basic_run_tests();
144   int ret = CU_get_error() || CU_get_number_of_failures();
145   CU_cleanup_registry();
146   return ret;
147 }
148