tests/test_kv_list.c

changeset 1375
e0ba5e20e77a
parent 1373
a6aaa77b6809
--- a/tests/test_kv_list.c	Sat Sep 13 20:55:56 2025 +0200
+++ b/tests/test_kv_list.c	Sat Sep 13 20:57:59 2025 +0200
@@ -108,6 +108,52 @@
     cxListFree(list);
 }
 
+CX_TEST(test_kv_list_find_and_remove) {
+    CxList *list = cxKvListCreateSimple(sizeof(int));
+    list->collection.cmpfunc = cx_cmp_int;
+    int x, y;
+    CX_TEST_DO {
+        CxMap *map = cxKvListAsMap(list);
+
+        x = 13;
+        CX_TEST_ASSERT(0 == cxMapPut(map, "xyz", &x));
+        x = 37;
+        CX_TEST_ASSERT(0 == cxMapPut(map, "abc", &x));
+        x = 47;
+        CX_TEST_ASSERT(0 == cxMapPut(map, "efg", &x));
+        x = 90;
+        CX_TEST_ASSERT(0 == cxMapPut(map, "hij", &x));
+
+        CX_TEST_ASSERT(cxMapSize(map) == 4);
+        CX_TEST_ASSERT(cxListSize(list) == 4);
+
+        CX_TEST_ASSERT(*(int*)cxMapGet(map, "efg") == 47);
+        y = 47;
+        CX_TEST_ASSERT(2 == cxListFindRemove(list, &y));
+        CX_TEST_ASSERT(cxListSize(list) == 3);
+        CX_TEST_ASSERT(cxMapSize(map) == 3);
+        CX_TEST_ASSERT(cxMapGet(map, "efg") == NULL);
+
+        CX_TEST_ASSERT(*(int*)cxMapGet(map, "xyz") == 13);
+        y = 13;
+        CX_TEST_ASSERT(0 == cxListFindRemove(list, &y));
+        CX_TEST_ASSERT(cxListSize(list) == 2);
+        CX_TEST_ASSERT(cxMapSize(map) == 2);
+        CX_TEST_ASSERT(cxMapGet(map, "xyz") == NULL);
+
+        CX_TEST_ASSERT(*(int*)cxMapGet(map, "hij") == 90);
+        y = 90;
+        CX_TEST_ASSERT(1 == cxListFindRemove(list, &y));
+        CX_TEST_ASSERT(cxListSize(list) == 1);
+        CX_TEST_ASSERT(cxMapSize(map) == 1);
+        CX_TEST_ASSERT(cxMapGet(map, "hij") == NULL);
+
+        y = 666;
+        CX_TEST_ASSERT(cxListSize(list) == cxListFindRemove(list, &y));
+    }
+    cxListFree(list);
+}
+
 CX_TEST(test_kv_list_remove_and_get) {
     CxList *list = cxKvListCreateSimple(sizeof(int));
     int x, y;
@@ -479,6 +525,7 @@
     cx_test_register(suite, test_kv_list_free_as_map);
     cx_test_register(suite, test_kv_list_free_as_list);
     cx_test_register(suite, test_kv_list_remove);
+    cx_test_register(suite, test_kv_list_find_and_remove);
     cx_test_register(suite, test_kv_list_remove_and_get);
     cx_test_register(suite, test_kv_list_remove_array);
     cx_test_register(suite, test_kv_list_remove_array_and_get);

mercurial