tests/test_kv_list.c

changeset 1389
bbdc4aee8534
parent 1386
748d0d40881e
--- a/tests/test_kv_list.c	Tue Sep 23 20:19:31 2025 +0200
+++ b/tests/test_kv_list.c	Tue Sep 23 20:31:50 2025 +0200
@@ -420,6 +420,22 @@
         CX_TEST_ASSERT(cxMapGet(map, "xyz") == NULL);
 
         CX_TEST_ASSERT(cxListSize(list) == 0);
+
+        // now check with a non-prehashed key
+        x = 85;
+        cxListAdd(list, &x);
+        CxHashKey key = {};
+        key.data = "abc";
+        key.len = 3;
+        CX_TEST_ASSERT(0 == cxKvListSetKey(list, 0, key));
+        y = cxMapGet(map, "abc");
+        CX_TEST_ASSERT(y != NULL);
+        CX_TEST_ASSERT(*y == 85);
+
+        CX_TEST_ASSERT(0 == cxMapRemove(map, "abc"));
+        CX_TEST_ASSERT(cxMapGet(map, "abc") == NULL);
+
+        CX_TEST_ASSERT(cxListSize(list) == 0);
     }
     cxListFree(list);
 }
@@ -517,6 +533,9 @@
         CX_TEST_ASSERT(y != NULL);
         CX_TEST_ASSERT(*y == 1337);
 
+        // idempotence
+        CX_TEST_ASSERT(0 == cxKvListRemoveKey(list, 1));
+
         // index out of bounds:
         CX_TEST_ASSERT(0 != cxKvListRemoveKey(list, 3));
     }
@@ -869,6 +888,27 @@
     cxMapFree(map);
 }
 
+CX_TEST(test_kv_list_map_iterator_no_keys) {
+    CxMap *map = cxKvListCreateAsMapSimple(sizeof(int));
+    CX_TEST_DO {
+        CxList *list = cxKvListAsList(map);
+        int x;
+        x = 815;
+        cxListAdd(list, &x);
+        x = 8016;
+        cxListAdd(list, &x);
+        x = 80017;
+        cxMapPut(map, "xyz", &x);
+        cxKvListRemoveKey(list, 2);
+
+        // only contains items without keys
+        CxMapIterator it = cxMapIterator(map);
+        CX_TEST_ASSERT(it.elem_count == 0);
+        CX_TEST_ASSERT(!cxIteratorValid(it));
+    }
+    cxMapFree(map);
+}
+
 CX_TEST(test_kv_list_map_iterator_remove) {
     CxMap *map = cxKvListCreateAsMapSimple(CX_STORE_POINTERS);
     int x, y, z;
@@ -970,6 +1010,7 @@
     cx_test_register(suite, test_kv_list_map_clear_destr_in_map);
     cx_test_register(suite, test_kv_list_destr_ptr);
     cx_test_register(suite, test_kv_list_map_iterator);
+    cx_test_register(suite, test_kv_list_map_iterator_no_keys);
     cx_test_register(suite, test_kv_list_map_iterator_remove);
     cx_test_register(suite, test_kv_list_list_iterator_remove);
 

mercurial