tests/test_hash_key.c

changeset 1498
d20c0d30ab3d
parent 1402
6fa42f7e2624
--- 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);
 

mercurial