--- 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);