From 605e9e92272903390a06ced1f2bee4a757562f9d Mon Sep 17 00:00:00 2001 From: Greg Burd Date: Tue, 9 Apr 2024 09:13:38 -0400 Subject: [PATCH] test remaining capacity --- include/sparsemap.h | 2 +- src/sparsemap.c | 10 ++++++---- tests/test.c | 24 ++++++++++++++++++------ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/include/sparsemap.h b/include/sparsemap.h index f2e8df1..9521689 100644 --- a/include/sparsemap.h +++ b/include/sparsemap.h @@ -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); diff --git a/src/sparsemap.c b/src/sparsemap.c index 7ab55bc..e5c528a 100644 --- a/src/sparsemap.c +++ b/src/sparsemap.c @@ -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); } /** diff --git a/tests/test.c b/tests/test.c index b634bf0..75cc2b3 100644 --- a/tests/test.c +++ b/tests/test.c @@ -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; }