Skip to content

Failure to round-trip roaring64 frozen bitmap #697

@Dr-Emann

Description

@Dr-Emann
roaring64_bitmap_t* r1 = roaring64_bitmap_from(1, 2, 3, 4);
roaring64_bitmap_shrink_to_fit(r1);
if (!roaring64_bitmap_internal_validate(r1, &reason)) {
    fail_msg("Validation failed: %s", reason);
}
char buf[1024];
size_t alignment_offset = 32 - (reinterpret_cast<uintptr_t>(buf) % 32);
size_t buf_size = sizeof(buf) - alignment_offset;
assert_in_range(roaring64_bitmap_frozen_size_in_bytes(r1), 0, buf_size);
size_t serialized_size =
    roaring64_bitmap_frozen_serialize(r1, buf + alignment_offset);
assert_int_equal(serialized_size, roaring64_bitmap_frozen_size_in_bytes(r1));
roaring64_bitmap_t* r2 =
    roaring64_bitmap_frozen_view(buf + alignment_offset, serialized_size);
if (!roaring64_bitmap_internal_validate(r2, &reason)) {
    // Fails with "Validation failed: array elements not strictly increasing"
    fail_msg("Validation failed: %s", reason);
}
assert_true(roaring64_bitmap_equals(r1, r2));
roaring64_bitmap_free(r1);
roaring64_bitmap_free(r2);

The serialization appears to succeed, but the deserialized bitmap doesn't seem to contain the right array elements.

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions