test remaining capacity

This commit is contained in:
Gregory Burd 2024-04-09 09:13:38 -04:00
parent 120eee0beb
commit 605e9e9227
3 changed files with 25 additions and 11 deletions

View file

@ -90,7 +90,7 @@ void sparsemap_open(sparsemap_t *, uint8_t *data, size_t data_size);
void sparsemap_set_data_size(sparsemap_t *map, size_t data_size); void sparsemap_set_data_size(sparsemap_t *map, size_t data_size);
/* Calculate remaining capacity, full when 0. */ /* Calculate remaining capacity, full when 0. */
int sparsemap_remaining_capacity(sparsemap_t *map); double sparsemap_capacity_remaining(sparsemap_t *map);
/* Returns the size of the underlying byte array. */ /* Returns the size of the underlying byte array. */
size_t sparsemap_get_range_size(sparsemap_t *map); size_t sparsemap_get_range_size(sparsemap_t *map);

View file

@ -802,13 +802,15 @@ sparsemap_set_data_size(sparsemap_t *map, size_t data_size)
* Calculates the remaining capacity as an integer that approaches 0 to * Calculates the remaining capacity as an integer that approaches 0 to
* indicate full. * indicate full.
*/ */
int double
sparsemap_remaining_capacity(sparsemap_t *map) { sparsemap_capacity_remaining(sparsemap_t *map) {
if (map->m_data_used > map->m_data_size) { if (map->m_data_used > map->m_data_size) {
return 0; return 0;
} }
int remaining = (int)(map->m_data_size - map->m_data_used); if (map->m_data_size == 0) {
return (remaining > 100) ? 100 : remaining; return 100.0;
}
return 100 - (double)(((double)map->m_data_used / map->m_data_size) * 100);
} }
/** /**

View file

@ -201,13 +201,25 @@ test_api_remaining_capacity(const MunitParameter params[], void *data)
assert_ptr_not_null(map); assert_ptr_not_null(map);
int i = 0, cap = sparsemap_remaining_capacity(map); int i = 0;
while (cap > 0 && i < 10000) { double cap;
do {
sparsemap_set(map, i++, true); sparsemap_set(map, i++, true);
int new_cap = sparsemap_remaining_capacity(map); cap = sparsemap_capacity_remaining(map);
assert_true(new_cap <= cap); } while (cap > 1.0);
cap = new_cap; //assert_true(i == 169985); when seed is 8675309
} assert_true(cap <= 1.0);
sparsemap_clear(map);
i = 0;
do {
int p = munit_rand_int_range(0, 150000);
sparsemap_set(map, p, true);
i++;
cap = sparsemap_capacity_remaining(map);
} while (cap > 1.0);
//assert_true(i == 64); when seed is 8675309
assert_true(cap <= 1.0);
return MUNIT_OK; return MUNIT_OK;
} }