tests/test_kv_list.c

changeset 1546
c8dd35f3ea53
parent 1464
9a10af83cfab
--- a/tests/test_kv_list.c	Sat Dec 06 15:55:53 2025 +0100
+++ b/tests/test_kv_list.c	Sat Dec 06 16:22:19 2025 +0100
@@ -339,6 +339,36 @@
     cxListFree(list);
 }
 
+CX_TEST(test_kv_list_map_put_overwrite) {
+    CxList *list = cxKvListCreateSimple(CX_STORE_POINTERS);
+    CxTestingAllocator talloc;
+    cx_testing_allocator_init(&talloc);
+    CxAllocator *al = &talloc.base;
+    int *x, *y;
+    CX_TEST_DO {
+        CxMap *map = cxKvListAsMap(list);
+        cxDefineAdvancedDestructor(map, cxFree, al);
+        x = cxMalloc(al, sizeof(int));
+        y = cxMalloc(al, sizeof(int));
+        *x = 13;
+        *y = 37;
+        CX_TEST_ASSERT(0 == cxMapPut(map, "xyz", x));
+        CX_TEST_ASSERT(cxCollectionSize(map) == 1);
+        CX_TEST_ASSERT(cxCollectionSize(list) == 1);
+        CX_TEST_ASSERT(*(int*)cxListAt(list, 0) == 13);
+        CX_TEST_ASSERT(*(int*)cxMapGet(map, "xyz") == 13);
+        CX_TEST_ASSERT(0 == cxMapPut(map, "xyz", y));
+        CX_TEST_ASSERT(cxCollectionSize(map) == 1);
+        CX_TEST_ASSERT(cxCollectionSize(list) == 1);
+        CX_TEST_ASSERT(*(int*)cxListAt(list, 0) == 37);
+        CX_TEST_ASSERT(*(int*)cxMapGet(map, "xyz") == 37);
+        cxMapClear(map);
+        CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
+    }
+    cx_testing_allocator_destroy(&talloc);
+    cxListFree(list);
+}
+
 CX_TEST(test_kv_list_map_remove) {
     CxList *list = cxKvListCreateSimple(sizeof(int));
     int x;
@@ -1021,6 +1051,7 @@
     cx_test_register(suite, test_kv_list_map_put);
     cx_test_register(suite, test_kv_list_map_put_ptr);
     cx_test_register(suite, test_kv_list_map_put_not_hashed);
+    cx_test_register(suite, test_kv_list_map_put_overwrite);
     cx_test_register(suite, test_kv_list_map_remove);
     cx_test_register(suite, test_kv_list_map_remove_and_get);
     cx_test_register(suite, test_kv_list_set_key);

mercurial