tests/test_hash_key.c

changeset 1498
d20c0d30ab3d
parent 1402
6fa42f7e2624
equal deleted inserted replaced
1497:cd53fb8703c1 1498:d20c0d30ab3d
31 #include "cx/hash_key.h" 31 #include "cx/hash_key.h"
32 #include "cx/string.h" 32 #include "cx/string.h"
33 33
34 CX_TEST(test_hash_key_functions) { 34 CX_TEST(test_hash_key_functions) {
35 const char *str = "my key"; 35 const char *str = "my key";
36 const unsigned char *ustr = (const unsigned char *) str;
36 size_t len = strlen(str); 37 size_t len = strlen(str);
37 38
38 CxHashKey str_key = cx_hash_key_str(str); 39 CxHashKey str_key = cx_hash_key_str(str);
39 CxHashKey bytes_key = cx_hash_key_bytes((const unsigned char*)str, len); 40 CxHashKey ustr_key = cx_hash_key_ustr(ustr);
41 CxHashKey bytes_key = cx_hash_key_bytes(ustr, len);
40 CxHashKey obj_key = cx_hash_key(str, len); 42 CxHashKey obj_key = cx_hash_key(str, len);
41 CxHashKey cxstr_key = cx_hash_key_cxstr(cx_str(str)); 43 CxHashKey cxstr_key = cx_hash_key_cxstr(cx_str(str));
42 44
43 CX_TEST_DO { 45 CX_TEST_DO {
44 CX_TEST_ASSERT(bytes_key.hash == 1269566022); 46 CX_TEST_ASSERT(bytes_key.hash == 1269566022);
45 CX_TEST_ASSERT(str_key.hash == bytes_key.hash); 47 CX_TEST_ASSERT(str_key.hash == bytes_key.hash);
48 CX_TEST_ASSERT(ustr_key.hash == bytes_key.hash);
46 CX_TEST_ASSERT(obj_key.hash == bytes_key.hash); 49 CX_TEST_ASSERT(obj_key.hash == bytes_key.hash);
47 CX_TEST_ASSERT(cxstr_key.hash == bytes_key.hash); 50 CX_TEST_ASSERT(cxstr_key.hash == bytes_key.hash);
48 CX_TEST_ASSERT(str_key.len == len); 51 CX_TEST_ASSERT(str_key.len == len);
49 CX_TEST_ASSERT(str_key.data == str); 52 CX_TEST_ASSERT(str_key.data == str);
53 CX_TEST_ASSERT(ustr_key.len == len);
54 CX_TEST_ASSERT(ustr_key.data == ustr);
50 CX_TEST_ASSERT(cxstr_key.len == len); 55 CX_TEST_ASSERT(cxstr_key.len == len);
51 CX_TEST_ASSERT(cxstr_key.data == str); 56 CX_TEST_ASSERT(cxstr_key.data == str);
52 CX_TEST_ASSERT(obj_key.len == len); 57 CX_TEST_ASSERT(obj_key.len == len);
53 CX_TEST_ASSERT(obj_key.data == str); 58 CX_TEST_ASSERT(obj_key.data == str);
54 CX_TEST_ASSERT(bytes_key.len == len); 59 CX_TEST_ASSERT(bytes_key.len == len);
104 CX_TEST_ASSERT(bk.len == 0); 109 CX_TEST_ASSERT(bk.len == 0);
105 CX_TEST_ASSERT(bk.hash == 17452435587688253422ull); 110 CX_TEST_ASSERT(bk.hash == 17452435587688253422ull);
106 } 111 }
107 } 112 }
108 113
114 CX_TEST(test_hash_key_cmp) {
115 CxHashKey k1 = CX_HASH_KEY("one key");
116 CxHashKey k2 = CX_HASH_KEY("another key");
117 CxHashKey k = CX_HASH_KEY("one key");
118 CX_TEST_DO {
119 CX_TEST_ASSERT(0 == cx_hash_key_cmp(&k1, &k));
120 CX_TEST_ASSERT(0 == cx_hash_key_cmp(&k1, &k1));
121 CX_TEST_ASSERT(0 == cx_hash_key_cmp(&k2, &k2));
122 CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k2, &k));
123 CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k, &k2));
124 CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k1, &k2));
125
126 // fake a hash collision
127 k1.hash = k2.hash = 4711;
128 // still not equal
129 CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k1, &k2));
130 }
131 }
132
109 CX_TEST(test_hash_key_empty_string) { 133 CX_TEST(test_hash_key_empty_string) {
110 const char *str = ""; 134 const char *str = "";
135 const unsigned char *ustr = (const unsigned char*)"";
111 136
112 CxHashKey str_key = cx_hash_key_str(str); 137 CxHashKey str_key = cx_hash_key_str(str);
138 CxHashKey ustr_key = cx_hash_key_ustr(ustr);
113 CxHashKey bytes_key = cx_hash_key_bytes((const unsigned char*) str, 0); 139 CxHashKey bytes_key = cx_hash_key_bytes((const unsigned char*) str, 0);
114 CxHashKey obj_key = cx_hash_key(str, 0); 140 CxHashKey obj_key = cx_hash_key(str, 0);
115 141
116 CX_TEST_DO { 142 CX_TEST_DO {
117 CX_TEST_ASSERT(bytes_key.hash == 4152238450u); 143 CX_TEST_ASSERT(bytes_key.hash == 4152238450u);
118 CX_TEST_ASSERT(str_key.hash == 4152238450u); 144 CX_TEST_ASSERT(str_key.hash == 4152238450u);
145 CX_TEST_ASSERT(ustr_key.hash == 4152238450u);
119 CX_TEST_ASSERT(obj_key.hash == 4152238450u); 146 CX_TEST_ASSERT(obj_key.hash == 4152238450u);
120 CX_TEST_ASSERT(str_key.len == 0); 147 CX_TEST_ASSERT(str_key.len == 0);
148 CX_TEST_ASSERT(ustr_key.len == 0);
121 CX_TEST_ASSERT(bytes_key.len == 0); 149 CX_TEST_ASSERT(bytes_key.len == 0);
122 CX_TEST_ASSERT(bytes_key.len == 0); 150 CX_TEST_ASSERT(bytes_key.len == 0);
123 CX_TEST_ASSERT(str_key.data == str); 151 CX_TEST_ASSERT(str_key.data == str);
152 CX_TEST_ASSERT(ustr_key.data == ustr);
124 } 153 }
125 } 154 }
126 155
127 CX_TEST(test_hash_key_null) { 156 CX_TEST(test_hash_key_null) {
128 CxHashKey str_key = cx_hash_key_str(NULL); 157 CxHashKey str_key = cx_hash_key_str(NULL);
158 CxHashKey ustr_key = cx_hash_key_ustr(NULL);
129 CxHashKey bytes_key = cx_hash_key_bytes(NULL, 0); 159 CxHashKey bytes_key = cx_hash_key_bytes(NULL, 0);
130 CxHashKey obj_key = cx_hash_key(NULL, 0); 160 CxHashKey obj_key = cx_hash_key(NULL, 0);
131 161
132 CX_TEST_DO { 162 CX_TEST_DO {
133 CX_TEST_ASSERT(bytes_key.hash == 1574210520u); 163 CX_TEST_ASSERT(bytes_key.hash == 1574210520u);
134 CX_TEST_ASSERT(str_key.hash == 1574210520u); 164 CX_TEST_ASSERT(str_key.hash == 1574210520u);
165 CX_TEST_ASSERT(ustr_key.hash == 1574210520u);
135 CX_TEST_ASSERT(obj_key.hash == 1574210520u); 166 CX_TEST_ASSERT(obj_key.hash == 1574210520u);
136 CX_TEST_ASSERT(str_key.len == 0); 167 CX_TEST_ASSERT(str_key.len == 0);
168 CX_TEST_ASSERT(ustr_key.len == 0);
137 CX_TEST_ASSERT(bytes_key.len == 0); 169 CX_TEST_ASSERT(bytes_key.len == 0);
138 CX_TEST_ASSERT(bytes_key.len == 0); 170 CX_TEST_ASSERT(bytes_key.len == 0);
139 CX_TEST_ASSERT(str_key.data == NULL); 171 CX_TEST_ASSERT(str_key.data == NULL);
172 CX_TEST_ASSERT(ustr_key.data == NULL);
140 } 173 }
141 } 174 }
142 175
143 CxTestSuite *cx_test_suite_hash_key(void) { 176 CxTestSuite *cx_test_suite_hash_key(void) {
144 CxTestSuite *suite = cx_test_suite_new("hash_key"); 177 CxTestSuite *suite = cx_test_suite_new("hash_key");
145 178
146 cx_test_register(suite, test_hash_key_functions); 179 cx_test_register(suite, test_hash_key_functions);
147 cx_test_register(suite, test_hash_key_int_functions); 180 cx_test_register(suite, test_hash_key_int_functions);
181 cx_test_register(suite, test_hash_key_macro);
182 cx_test_register(suite, test_hash_key_cmp);
148 cx_test_register(suite, test_hash_key_empty_string); 183 cx_test_register(suite, test_hash_key_empty_string);
149 cx_test_register(suite, test_hash_key_null); 184 cx_test_register(suite, test_hash_key_null);
150 185
151 return suite; 186 return suite;
152 } 187 }

mercurial