Thu, 20 Nov 2025 18:46:50 +0100
complete test coverage for CxHashKey
| tests/test_hash_key.c | file | annotate | diff | comparison | revisions |
--- a/tests/test_hash_key.c Wed Nov 19 19:42:05 2025 +0100 +++ b/tests/test_hash_key.c Thu Nov 20 18:46:50 2025 +0100 @@ -33,20 +33,25 @@ CX_TEST(test_hash_key_functions) { const char *str = "my key"; + const unsigned char *ustr = (const unsigned char *) str; size_t len = strlen(str); CxHashKey str_key = cx_hash_key_str(str); - CxHashKey bytes_key = cx_hash_key_bytes((const unsigned char*)str, len); + CxHashKey ustr_key = cx_hash_key_ustr(ustr); + CxHashKey bytes_key = cx_hash_key_bytes(ustr, len); CxHashKey obj_key = cx_hash_key(str, len); CxHashKey cxstr_key = cx_hash_key_cxstr(cx_str(str)); CX_TEST_DO { CX_TEST_ASSERT(bytes_key.hash == 1269566022); CX_TEST_ASSERT(str_key.hash == bytes_key.hash); + CX_TEST_ASSERT(ustr_key.hash == bytes_key.hash); CX_TEST_ASSERT(obj_key.hash == bytes_key.hash); CX_TEST_ASSERT(cxstr_key.hash == bytes_key.hash); CX_TEST_ASSERT(str_key.len == len); CX_TEST_ASSERT(str_key.data == str); + CX_TEST_ASSERT(ustr_key.len == len); + CX_TEST_ASSERT(ustr_key.data == ustr); CX_TEST_ASSERT(cxstr_key.len == len); CX_TEST_ASSERT(cxstr_key.data == str); CX_TEST_ASSERT(obj_key.len == len); @@ -106,37 +111,65 @@ } } +CX_TEST(test_hash_key_cmp) { + CxHashKey k1 = CX_HASH_KEY("one key"); + CxHashKey k2 = CX_HASH_KEY("another key"); + CxHashKey k = CX_HASH_KEY("one key"); + CX_TEST_DO { + CX_TEST_ASSERT(0 == cx_hash_key_cmp(&k1, &k)); + CX_TEST_ASSERT(0 == cx_hash_key_cmp(&k1, &k1)); + CX_TEST_ASSERT(0 == cx_hash_key_cmp(&k2, &k2)); + CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k2, &k)); + CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k, &k2)); + CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k1, &k2)); + + // fake a hash collision + k1.hash = k2.hash = 4711; + // still not equal + CX_TEST_ASSERT(0 != cx_hash_key_cmp(&k1, &k2)); + } +} + CX_TEST(test_hash_key_empty_string) { const char *str = ""; + const unsigned char *ustr = (const unsigned char*)""; CxHashKey str_key = cx_hash_key_str(str); + CxHashKey ustr_key = cx_hash_key_ustr(ustr); CxHashKey bytes_key = cx_hash_key_bytes((const unsigned char*) str, 0); CxHashKey obj_key = cx_hash_key(str, 0); CX_TEST_DO { CX_TEST_ASSERT(bytes_key.hash == 4152238450u); CX_TEST_ASSERT(str_key.hash == 4152238450u); + CX_TEST_ASSERT(ustr_key.hash == 4152238450u); CX_TEST_ASSERT(obj_key.hash == 4152238450u); CX_TEST_ASSERT(str_key.len == 0); + CX_TEST_ASSERT(ustr_key.len == 0); CX_TEST_ASSERT(bytes_key.len == 0); CX_TEST_ASSERT(bytes_key.len == 0); CX_TEST_ASSERT(str_key.data == str); + CX_TEST_ASSERT(ustr_key.data == ustr); } } CX_TEST(test_hash_key_null) { CxHashKey str_key = cx_hash_key_str(NULL); + CxHashKey ustr_key = cx_hash_key_ustr(NULL); CxHashKey bytes_key = cx_hash_key_bytes(NULL, 0); CxHashKey obj_key = cx_hash_key(NULL, 0); CX_TEST_DO { CX_TEST_ASSERT(bytes_key.hash == 1574210520u); CX_TEST_ASSERT(str_key.hash == 1574210520u); + CX_TEST_ASSERT(ustr_key.hash == 1574210520u); CX_TEST_ASSERT(obj_key.hash == 1574210520u); CX_TEST_ASSERT(str_key.len == 0); + CX_TEST_ASSERT(ustr_key.len == 0); CX_TEST_ASSERT(bytes_key.len == 0); CX_TEST_ASSERT(bytes_key.len == 0); CX_TEST_ASSERT(str_key.data == NULL); + CX_TEST_ASSERT(ustr_key.data == NULL); } } @@ -145,6 +178,8 @@ cx_test_register(suite, test_hash_key_functions); cx_test_register(suite, test_hash_key_int_functions); + cx_test_register(suite, test_hash_key_macro); + cx_test_register(suite, test_hash_key_cmp); cx_test_register(suite, test_hash_key_empty_string); cx_test_register(suite, test_hash_key_null);