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