]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
add unit tests for getters
authorSvetlana Shmidt <sshmidt@google.com>
Tue, 18 Aug 2020 13:55:57 +0000 (13:55 +0000)
committerSvetlana Shmidt <sshmidt@google.com>
Wed, 19 Aug 2020 07:19:19 +0000 (07:19 +0000)
src/daemon/distribution.c
src/daemon/distribution.h
src/daemon/distribution_test.c

index 933279e49047b27aa6b66a5ef8ba67a046344dd0..f5d6bf04ad6e0622cbf4493969d91972c86336a3 100644 (file)
@@ -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);
-}
index e7eb3d85e41cce08535bed1ff0589cee8167c2bb..9a80b6f0a1d883e75f8865c37896e6c16d929e38 100644 (file)
@@ -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);
 
index 4d29c000cd2e5eaeb3ce63187845124fc6bc68ca..659a4d6a5910b52124e496e4a276f4f63b93d019 100644 (file)
@@ -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;
 }