fixes
This commit is contained in:
parent
d4ce48f540
commit
5b1a5b8015
|
@ -488,14 +488,12 @@ __sm_chunk_map_rank(__sm_chunk_t *map, size_t *offset, size_t idx)
|
||||||
} else if (flags == SM_PAYLOAD_MIXED) {
|
} else if (flags == SM_PAYLOAD_MIXED) {
|
||||||
sm_bitvec_t w = map->m_data[1 + __sm_chunk_map_get_position(map, i * SM_FLAGS_PER_INDEX_BYTE + j)];
|
sm_bitvec_t w = map->m_data[1 + __sm_chunk_map_get_position(map, i * SM_FLAGS_PER_INDEX_BYTE + j)];
|
||||||
if (idx > SM_BITS_PER_VECTOR) {
|
if (idx > SM_BITS_PER_VECTOR) {
|
||||||
//uint64_t mask_offset = ~(UINT64_MAX >> (SM_BITS_PER_VECTOR - (*offset > 63 ? 63 : *offset)));
|
|
||||||
uint64_t mask_offset = ~(UINT64_MAX >> (SM_BITS_PER_VECTOR - *offset));
|
uint64_t mask_offset = ~(UINT64_MAX >> (SM_BITS_PER_VECTOR - *offset));
|
||||||
idx -= SM_BITS_PER_VECTOR;
|
idx -= SM_BITS_PER_VECTOR;
|
||||||
ret += popcountll(w & mask_offset);
|
ret += popcountll(w & mask_offset);
|
||||||
*offset = (*offset > SM_BITS_PER_VECTOR) ? *offset - SM_BITS_PER_VECTOR : 0;
|
*offset = (*offset > SM_BITS_PER_VECTOR) ? *offset - SM_BITS_PER_VECTOR : 0;
|
||||||
} else {
|
} else {
|
||||||
/* Create a mask for the range between offset and idx inclusive [*offset, idx]. */
|
/* Create a mask for the range between offset and idx inclusive [*offset, idx]. */
|
||||||
//uint64_t offset_mask = *offset > 63 ? 63 : (((uint64_t)1 << *offset) - 1);
|
|
||||||
uint64_t offset_mask = (((uint64_t)1 << *offset) - 1);
|
uint64_t offset_mask = (((uint64_t)1 << *offset) - 1);
|
||||||
uint64_t idx_mask = idx >= 63 ? UINT64_MAX : ((uint64_t)1 << (idx + 1)) - 1;
|
uint64_t idx_mask = idx >= 63 ? UINT64_MAX : ((uint64_t)1 << (idx + 1)) - 1;
|
||||||
ret += popcountll(w & (idx_mask - offset_mask));
|
ret += popcountll(w & (idx_mask - offset_mask));
|
||||||
|
@ -767,7 +765,7 @@ sparsemap(uint8_t *data, size_t size)
|
||||||
void
|
void
|
||||||
sparsemap_init(sparsemap_t *map, uint8_t *data, size_t size)
|
sparsemap_init(sparsemap_t *map, uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
map->m_data = (__sm_chunk_t*)data;
|
map->m_data = data;
|
||||||
map->m_data_used = 0;
|
map->m_data_used = 0;
|
||||||
map->m_capacity = size == 0 ? UINT64_MAX : size;
|
map->m_capacity = size == 0 ? UINT64_MAX : size;
|
||||||
sparsemap_clear(map);
|
sparsemap_clear(map);
|
||||||
|
@ -779,7 +777,7 @@ sparsemap_init(sparsemap_t *map, uint8_t *data, size_t size)
|
||||||
void
|
void
|
||||||
sparsemap_open(sparsemap_t *map, uint8_t *data, size_t data_size)
|
sparsemap_open(sparsemap_t *map, uint8_t *data, size_t data_size)
|
||||||
{
|
{
|
||||||
map->m_data = (__sm_chunk_t*)data;
|
map->m_data = data;
|
||||||
map->m_data_used = 0;
|
map->m_data_used = 0;
|
||||||
map->m_capacity = data_size;
|
map->m_capacity = data_size;
|
||||||
}
|
}
|
||||||
|
|
15
tests/test.c
15
tests/test.c
|
@ -609,7 +609,7 @@ test_api_span(const MunitParameter params[], void *data)
|
||||||
//whats_set(map, 5000);
|
//whats_set(map, 5000);
|
||||||
located_at = sparsemap_span(map, 0, j);
|
located_at = sparsemap_span(map, 0, j);
|
||||||
if (placed_at != located_at)
|
if (placed_at != located_at)
|
||||||
logf("i = %d, j = %d\tplaced_at %d\n", i, j, placed_at);
|
logf("a: i = %d, j = %d\tplaced_at %d located_at %d\n", i, j, placed_at, located_at);
|
||||||
assert_true(located_at == placed_at);
|
assert_true(located_at == placed_at);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -620,14 +620,15 @@ test_api_span(const MunitParameter params[], void *data)
|
||||||
populate_map(map, 1024, 3 * 1024);
|
populate_map(map, 1024, 3 * 1024);
|
||||||
placed_at = create_sequential_set_in_empty_map(map, amt, j);
|
placed_at = create_sequential_set_in_empty_map(map, amt, j);
|
||||||
located_at = sparsemap_span(map, 0, j);
|
located_at = sparsemap_span(map, 0, j);
|
||||||
if (placed_at != located_at)
|
if (located_at >= placed_at)
|
||||||
logf("i = %d, j = %d\tplaced_at %d\n", i, j, placed_at);
|
logf("b: i = %d, j = %d\tplaced_at %d located_at %d\n", i, j, placed_at, located_at);
|
||||||
assert_true(located_at <= placed_at);
|
//assert_true(located_at >= placed_at);
|
||||||
//TODO located_at = sparsemap_span(map, (placed_at < j ? 0 : placed_at / 2), i);
|
located_at = sparsemap_span(map, (placed_at < j ? 0 : placed_at / 2), i);
|
||||||
// assert_true(placed_at == located_at);
|
assert_true(placed_at == located_at);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return MUNIT_OK;
|
return MUNIT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue