Fix dict asserts
This commit is contained in:
parent
48b366d8e9
commit
29014f4c52
@ -167,10 +167,12 @@ GUF_DICT_KWRDS ptrdiff_t GUF_CAT(GUF_DICT_NAME, _iter_to_idx)(const GUF_DICT_NAM
|
|||||||
GUF_DICT_KWRDS GUF_CAT(GUF_DICT_NAME, _iter) GUF_CAT(GUF_DICT_NAME, _find_val_if)(GUF_DICT_NAME *ht, GUF_CAT(GUF_DICT_NAME, _iter) begin, GUF_CAT(GUF_DICT_NAME, _iter) end, bool (*predicate)(const GUF_DICT_VAL_T *));
|
GUF_DICT_KWRDS GUF_CAT(GUF_DICT_NAME, _iter) GUF_CAT(GUF_DICT_NAME, _find_val_if)(GUF_DICT_NAME *ht, GUF_CAT(GUF_DICT_NAME, _iter) begin, GUF_CAT(GUF_DICT_NAME, _iter) end, bool (*predicate)(const GUF_DICT_VAL_T *));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GUF_DICT_KWRDS bool GUF_CAT(GUF_DICT_NAME, _debug_valid_size)(const GUF_DICT_NAME *ht);
|
GUF_DICT_KWRDS ptrdiff_t GUF_CAT(GUF_DICT_NAME, _max_capacity)(void);
|
||||||
|
GUF_DICT_KWRDS size_t GUF_CAT(GUF_DICT_NAME, _memory_usage)(const GUF_DICT_NAME *ht);
|
||||||
|
|
||||||
GUF_DICT_KWRDS bool GUF_CAT(GUF_DICT_NAME, _valid)(const GUF_DICT_NAME *ht);
|
GUF_DICT_KWRDS bool GUF_CAT(GUF_DICT_NAME, _valid)(const GUF_DICT_NAME *ht);
|
||||||
GUF_DICT_KWRDS ptrdiff_t GUF_CAT(GUF_DICT_NAME, _max_capacity)(void);
|
GUF_DICT_KWRDS bool GUF_CAT(GUF_DICT_NAME, _debug_valid_size)(const GUF_DICT_NAME *ht);
|
||||||
|
|
||||||
|
|
||||||
// #define GUF_DICT_IMPL /* DEBUGGGGGGGGG */
|
// #define GUF_DICT_IMPL /* DEBUGGGGGGGGG */
|
||||||
|
|
||||||
@ -274,6 +276,15 @@ GUF_DICT_KWRDS ptrdiff_t GUF_CAT(GUF_DICT_NAME, _max_capacity)(void)
|
|||||||
return GUF_MIN(GUF_MIN(max_cap_kv_elems, pow2_cap), PTRDIFF_MAX);
|
return GUF_MIN(GUF_MIN(max_cap_kv_elems, pow2_cap), PTRDIFF_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GUF_DICT_KWRDS size_t GUF_CAT(GUF_DICT_NAME, _memory_usage)(const GUF_DICT_NAME *ht)
|
||||||
|
{
|
||||||
|
GUF_ASSERT_RELEASE(GUF_CAT(GUF_DICT_NAME, _valid)(ht));
|
||||||
|
const size_t mem_kv_indices = (size_t)ht->kv_indices_cap * sizeof(GUF_DICT_KV_META_T);
|
||||||
|
const size_t mem_kv_elems = (size_t)ht->kv_elems.capacity * sizeof(GUF_DICT_KV_NAME);
|
||||||
|
return mem_kv_indices + mem_kv_elems;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GUF_DICT_KWRDS void GUF_CAT(GUF_DICT_NAME, _free)(GUF_DICT_NAME *ht, void *ctx)
|
GUF_DICT_KWRDS void GUF_CAT(GUF_DICT_NAME, _free)(GUF_DICT_NAME *ht, void *ctx)
|
||||||
{
|
{
|
||||||
@ -401,11 +412,11 @@ static void GUF_CAT(GUF_DICT_NAME, _try_grow_if_necessary)(GUF_DICT_NAME *ht, gu
|
|||||||
|
|
||||||
const size_t MAX_SIZE_BYTES = (size_t)GUF_ALLOC_MAX_BYTES(GUF_DICT_KV_META_T);
|
const size_t MAX_SIZE_BYTES = (size_t)GUF_ALLOC_MAX_BYTES(GUF_DICT_KV_META_T);
|
||||||
const size_t new_size_bytes_test = (size_t)old_size_bytes * (size_t)KV_META_GROWTH_FAC;
|
const size_t new_size_bytes_test = (size_t)old_size_bytes * (size_t)KV_META_GROWTH_FAC;
|
||||||
if (guf_mul_is_overflow_size_t(old_size_bytes, KV_META_GROWTH_FAC) || new_size_bytes_test > MAX_SIZE_BYTES) { // Handle overflow.
|
if (guf_mul_is_overflow_size_t(old_size_bytes, KV_META_GROWTH_FAC) || new_size_bytes_test > MAX_SIZE_BYTES) { // Handle overflow (Remember: capacities have to be powers of two)
|
||||||
guf_err_set_or_panic(err, GUF_ERR_ALLOC_FAIL, GUF_ERR_MSG("in function dict_try_insert: New kv_indices_capacity would overflow)"));
|
guf_err_set_or_panic(err, GUF_ERR_ALLOC_FAIL, GUF_ERR_MSG("in function dict_try_insert: New kv_indices_capacity would overflow)"));
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
GUF_ASSERT(new_size_bytes_test <= PTRDIFF_MAX && guf_is_pow2_size_t(new_size_bytes_test));
|
GUF_ASSERT(new_size_bytes_test <= PTRDIFF_MAX);
|
||||||
new_size_bytes = (ptrdiff_t)new_size_bytes_test;
|
new_size_bytes = (ptrdiff_t)new_size_bytes_test;
|
||||||
}
|
}
|
||||||
GUF_ASSERT_RELEASE(new_size_bytes > old_size_bytes);
|
GUF_ASSERT_RELEASE(new_size_bytes > old_size_bytes);
|
||||||
@ -421,6 +432,7 @@ static void GUF_CAT(GUF_DICT_NAME, _try_grow_if_necessary)(GUF_DICT_NAME *ht, gu
|
|||||||
ht->kv_indices = new_kv_indices;
|
ht->kv_indices = new_kv_indices;
|
||||||
ht->kv_indices_cap = ht->kv_indices_cap * KV_META_GROWTH_FAC;;
|
ht->kv_indices_cap = ht->kv_indices_cap * KV_META_GROWTH_FAC;;
|
||||||
GUF_ASSERT(guf_is_pow2_size_t(ht->kv_indices_cap));
|
GUF_ASSERT(guf_is_pow2_size_t(ht->kv_indices_cap));
|
||||||
|
GUF_ASSERT(new_size_bytes / sizeof(GUF_DICT_KV_META_T) == ht->kv_indices_cap);
|
||||||
ht->num_tombstones = 0;
|
ht->num_tombstones = 0;
|
||||||
// ht->max_probelen = 0;
|
// ht->max_probelen = 0;
|
||||||
|
|
||||||
|
|||||||
@ -85,11 +85,11 @@ struct DictSvToIntTest : public Test
|
|||||||
TEST_CHECK(i == std::ssize(word_cnt_map));
|
TEST_CHECK(i == std::ssize(word_cnt_map));
|
||||||
TEST_CHECK(dict_sv_i32_debug_valid_size(&word_cnt_dict));
|
TEST_CHECK(dict_sv_i32_debug_valid_size(&word_cnt_dict));
|
||||||
|
|
||||||
// std::cout << "load fac: " << dict_sv_i32_load_factor(&word_cnt_dict) << ", cap: " << word_cnt_dict.kv_indices_cap << "\n";
|
// std::cout << "load fac: " << dict_sv_i32_load_factor(&word_cnt_dict) << ", cap: " << word_cnt_dict.kv_indices_cap << " elem cap: " << word_cnt_dict.kv_elems.capacity << "\n";
|
||||||
// std::cout << "size: " << dict_sv_i32_size(&word_cnt_dict) << ", max probelen: " << word_cnt_dict.max_probelen << "\n";
|
// std::cout << "size: " << dict_sv_i32_size(&word_cnt_dict) << ", max probelen: " << word_cnt_dict.max_probelen << "\n";
|
||||||
|
// std::cout << "mem usage: " << dict_sv_i32_memory_usage(&word_cnt_dict) << "\n";
|
||||||
|
|
||||||
// Erase tests:
|
// Erase tests:
|
||||||
|
|
||||||
const double load_fac_before_erase = dict_sv_i32_load_factor(&word_cnt_dict);
|
const double load_fac_before_erase = dict_sv_i32_load_factor(&word_cnt_dict);
|
||||||
const ptrdiff_t size_before_erase = dict_sv_i32_size(&word_cnt_dict);
|
const ptrdiff_t size_before_erase = dict_sv_i32_size(&word_cnt_dict);
|
||||||
ptrdiff_t num_del = 0;
|
ptrdiff_t num_del = 0;
|
||||||
|
|||||||
1
todo.txt
1
todo.txt
@ -1,6 +1,7 @@
|
|||||||
- sort: add cpp #ifdef to remove restrict from declaration
|
- sort: add cpp #ifdef to remove restrict from declaration
|
||||||
|
|
||||||
- tests for guf_dict with GUF_DICT_64_BIT_IDX (and also hash32/hash64); maybe pass kv_type to insert to avoid copy
|
- tests for guf_dict with GUF_DICT_64_BIT_IDX (and also hash32/hash64); maybe pass kv_type to insert to avoid copy
|
||||||
|
- dict elems shrink to fit; allow to pass GUF_DBUF_USE_GROWTH_FAC_ONE_POINT_FIVE
|
||||||
|
|
||||||
- guf_stack, guf_queue, guf_dqueue, guf_prio_queue (using a heap), guf_ringbuf
|
- guf_stack, guf_queue, guf_dqueue, guf_prio_queue (using a heap), guf_ringbuf
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user