diff -r 943bfd9e7978 -r 0ac4aa1737fd src/list.c --- a/src/list.c Fri Oct 17 14:14:21 2025 +0200 +++ b/src/list.c Fri Oct 17 15:04:56 2025 +0200 @@ -597,17 +597,24 @@ } int cxListInsertSorted(CxList *list, const void *elem) { - assert(list->collection.sorted || list->collection.size == 0); + assert(cxCollectionSorted(list)); list->collection.sorted = true; const void *data = list->collection.store_pointer ? &elem : elem; return list->cl->insert_sorted(list, data, 1) == 0; } int cxListInsertUnique(CxList *list, const void *elem) { - assert(list->collection.sorted || list->collection.size == 0); - list->collection.sorted = true; - const void *data = list->collection.store_pointer ? &elem : elem; - return list->cl->insert_unique(list, data, 1) == 0; + if (cxCollectionSorted(list)) { + list->collection.sorted = true; + const void *data = list->collection.store_pointer ? &elem : elem; + return list->cl->insert_unique(list, data, 1) == 0; + } else { + if (cxListContains(list, elem)) { + return 0; + } else { + return cxListAdd(list, elem); + } + } } size_t cxListInsertArray(CxList *list, size_t index, const void *array, size_t n) { @@ -616,15 +623,30 @@ } size_t cxListInsertSortedArray(CxList *list, const void *array, size_t n) { - assert(list->collection.sorted || list->collection.size == 0); + assert(cxCollectionSorted(list)); list->collection.sorted = true; return list->cl->insert_sorted(list, array, n); } size_t cxListInsertUniqueArray(CxList *list, const void *array, size_t n) { - assert(list->collection.sorted || list->collection.size == 0); - list->collection.sorted = true; - return list->cl->insert_unique(list, array, n); + if (cxCollectionSorted(list)) { + list->collection.sorted = true; + return list->cl->insert_unique(list, array, n); + } else { + const char *source = array; + for (size_t i = 0 ; i < n; i++) { + // note: this also checks elements added in a previous iteration + const void *data = list->collection.store_pointer ? + *((const void**)source) : source; + if (!cxListContains(list, data)) { + if (cxListAdd(list, data)) { + return i; // LCOV_EXCL_LINE + } + } + source += list->collection.elem_size; + } + return n; + } } int cxListInsertAfter(CxIterator *iter, const void *elem) {