From: Svetlana Shmidt Date: Tue, 18 Aug 2020 13:55:57 +0000 (+0000) Subject: add unit tests for getters X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b264ea0b50588cc13568bae322d6205c3e161a3a;p=thirdparty%2Fcollectd.git add unit tests for getters --- diff --git a/src/daemon/distribution.c b/src/daemon/distribution.c index 933279e49..f5d6bf04a 100644 --- a/src/daemon/distribution.c +++ b/src/daemon/distribution.c @@ -305,6 +305,10 @@ buckets_array_t get_buckets(distribution_t *dist) { return bucket_array; } +void destroy_buckets_array(buckets_array_t buckets_array) { + free(buckets_array.buckets); +} + double distribution_total_sum(distribution_t *dist) { if (dist == NULL) { return NAN; @@ -312,7 +316,7 @@ double distribution_total_sum(distribution_t *dist) { return dist->total_sum; //should I add mutex here? } -double distribution_total_count(distribution_t *dist) { +double distribution_total_counter(distribution_t *dist) { if (dist == NULL) { return NAN; } @@ -323,13 +327,9 @@ double distribution_squared_deviation_sum(distribution_t *dist) { if (dist == NULL) { return NAN; } - pthread_mutex_lock(&dist->mutex); double mean = distribution_average(dist); - double squared_deviation_sum = mean * mean * distribution_total_count(dist) - 2 * mean * dist->total_sum + dist->total_square_sum; + pthread_mutex_lock(&dist->mutex); + double squared_deviation_sum = mean * mean * distribution_total_counter(dist) - 2 * mean * dist->total_sum + dist->total_square_sum; pthread_mutex_unlock(&dist->mutex); return squared_deviation_sum; } - -void destroy_buckets_array(buckets_array_t buckets_array) { - free(buckets_array.buckets); -} diff --git a/src/daemon/distribution.h b/src/daemon/distribution.h index e7eb3d85e..9a80b6f0a 100644 --- a/src/daemon/distribution.h +++ b/src/daemon/distribution.h @@ -114,7 +114,7 @@ double distribution_total_sum(distribution_t *dist); double distribution_total_counter(distribution_t *dist); -double distribution_square_deviation_sum(distribution_t *dist); +double distribution_squared_deviation_sum(distribution_t *dist); void destroy_buckets_array(buckets_array_t buckets_array); diff --git a/src/daemon/distribution_test.c b/src/daemon/distribution_test.c index 4d29c000c..659a4d6a5 100644 --- a/src/daemon/distribution_test.c +++ b/src/daemon/distribution_test.c @@ -474,6 +474,62 @@ DEF_TEST(clone) { return 0; } +DEF_TEST(getters) { + struct { + distribution_t *dist; + size_t num_buckets; + size_t num_gauges; + double *update_gauges; + uint64_t want_counter; + double want_total_sum; + double want_average; + double want_squared_deviation_sum; + } cases[] = { + { + .dist = distribution_new_linear(5, 7), + .num_buckets = 5, + .num_gauges = 1, + .update_gauges = (double[]){4}, + .want_counter = 1, + .want_total_sum = 4, + .want_average = 4, + .want_squared_deviation_sum = 0, + }, + { + .dist = distribution_new_exponential(5, 2, 1), + .num_buckets = 5, + .num_gauges = 7, + .update_gauges = (double[]){5, 17.4, 22.3, 11, 0.5, 13, 11}, + .want_counter = 7, + .want_total_sum = 80.2, + .want_average = 80.2 / 7, + .want_squared_deviation_sum = 7 * 80.2 / 7 * 80.2 / 7 - 2 * 80.2 / 7 * 80.2 + 1236.3, + }, + { + .dist = distribution_new_linear(100, 10), + .num_buckets = 100, + .num_gauges = 10, + .update_gauges = (double[]){5, 11.23, 29.48, 66.77, 11.22, 33.21, 55, 26.27, 96, 2}, + .want_counter = 10, + .want_total_sum = 336.18, + .want_average = 33.618, + .want_squared_deviation_sum = 10 * 336.18 / 10 * 336.18 / 10 - 2 * 336.18 / 10 * 336.18 + 19642.3216, + }, + }; + for (size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { + EXPECT_EQ_INT(distribution_num_buckets(cases[i].dist), cases[i].num_buckets); + for (size_t j = 0; j < cases[i].num_gauges; j++) { + distribution_update(cases[i].dist, cases[i].update_gauges[j]); + } + EXPECT_EQ_INT(distribution_total_counter(cases[i].dist), cases[i].want_counter); + EXPECT_EQ_DOUBLE(distribution_total_sum(cases[i].dist), cases[i].want_total_sum); + EXPECT_EQ_DOUBLE(distribution_average(cases[i].dist), cases[i].want_average); + EXPECT_EQ_DOUBLE(distribution_squared_deviation_sum(cases[i].dist), cases[i].want_squared_deviation_sum); + + distribution_destroy(cases[i].dist); + } + return 0; +} int main() { RUN_TEST(distribution_new_linear); RUN_TEST(distribution_new_exponential); @@ -482,5 +538,6 @@ int main() { RUN_TEST(average); RUN_TEST(percentile); RUN_TEST(clone); + RUN_TEST(getters); END_TEST; }