diff --git a/src/sparsemap.c b/src/sparsemap.c index 552de55..57d1e79 100644 --- a/src/sparsemap.c +++ b/src/sparsemap.c @@ -1264,6 +1264,12 @@ sparsemap_merge(sparsemap_t *map, sparsemap_t *other) for (size_t i = 0; i < max_chunk_count && src_count; i++) { sm_idx_t dst_start = *(sm_idx_t *)dst; sm_idx_t src_start = *(sm_idx_t *)src; + if (src_start > dst_start && dst_count > 0) { + __sm_chunk_t dst_chunk; + __sm_chunk_map_init(&dst_chunk, dst + sizeof(sm_idx_t)); + dst += sizeof(sm_idx_t) + __sm_chunk_map_get_size(&dst_chunk); + continue; + } if (src_start == dst_start && dst_count > 0) { /* Chunks overlap, merge them. */ __sm_chunk_t src_chunk; diff --git a/tests/test.c b/tests/test.c index 82bef5c..ffc7138 100644 --- a/tests/test.c +++ b/tests/test.c @@ -702,7 +702,6 @@ test_api_merge(const MunitParameter params[], void *data) } sparsemap_merge(map, other); - assert(sparsemap_is_set(map, 0)); assert(sparsemap_is_set(map, 2048)); assert(sparsemap_is_set(map, 8193));