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);
/* 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. */
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
* indicate full.
*/
int
sparsemap_remaining_capacity(sparsemap_t *map) {
double
sparsemap_capacity_remaining(sparsemap_t *map) {
if (map->m_data_used > map->m_data_size) {
return 0;
}
int remaining = (int)(map->m_data_size - map->m_data_used);
return (remaining > 100) ? 100 : remaining;
if (map->m_data_size == 0) {
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);
int i = 0, cap = sparsemap_remaining_capacity(map);
while (cap > 0 && i < 10000) {
int i = 0;
double cap;
do {
sparsemap_set(map, i++, true);
int new_cap = sparsemap_remaining_capacity(map);
assert_true(new_cap <= cap);
cap = new_cap;
}
cap = sparsemap_capacity_remaining(map);
} while (cap > 1.0);
//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;
}