]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
Fix tests for uc_get_rate_by_name function
authorBarbara Kaczorowska <bkjg@google.com>
Tue, 18 Aug 2020 22:21:09 +0000 (22:21 +0000)
committerBarbara Kaczorowska <bkjg@google.com>
Wed, 19 Aug 2020 07:42:10 +0000 (07:42 +0000)
src/daemon/utils_cache_test.c

index 964a5382a6640d2b353b49a4d31cf95c976afc5e..d104ff2580ea6f9b9564821f9b7f0305491337d1 100644 (file)
@@ -278,8 +278,7 @@ DEF_TEST(uc_update) {
               },
           .num_updates = (size_t[]){10, 6, 4},
           .fam = create_metric_family_for_test7("test4-update", 3, 5, 23),
-      }
-  };
+      }};
   uc_init();
   for (size_t i = 0; i < (sizeof(cases) / sizeof(cases[0])); ++i) {
     printf("## Case %zu:\n", i);
@@ -396,74 +395,109 @@ DEF_TEST(uc_get_percentile_by_name) {
                                                 193, 47.97),
           .percent = 0,
           .num_updates = (size_t[]){71, 8, 45, 3},
-          .updates = (double*[]) {
-              (double[]){8194, 68.41378, 488, 5904.4289,
-                          348.952, 5.41609, 33687, 24959.94718,
-                          93646.26915, 1520.5, 14639.697, 7022,
-                          281.52, 16146.0281, 1.92362, 52167.56135,
-                          29.19779, 45057.14, 3319.7724, 34066.55,
-                          1073.62876, 91667.0, 98416.1719, 96030.39534,
-                          783.438, 77316.03541, 5659.005, 55984.9258,
-                          7.94164, 3384.647, 72593.99, 6628.329,
-                          17548.12711, 3.58183, 70.8097, 64922.09787,
-                          3822.1765, 67.44964, 819.125, 57421.823,
-                          52.8739, 2394.23, 6053.3371, 81659.40367,
-                          38240.76, 8542.95662, 54837.08557, 7.92726,
-                          69.11685, 5428.26, 6612.06311, 70475.98393,
-                          85464.98161, 20740.9, 43986.93, 70876.29799,
-                          1037.866, 71.71462, 53813.0019, 4035.658,
-                          5811.23089, 582.7, 94178.50533, 12500.30161,
-                          81487.188, 690.50582, 49662.044, 73422.52,
-                          68386.53142, 91320.37996, 35.92333},
-              (double[]){745.38815,481.05336,6.41994,1.95525,1156.20533,1268.7098,1295.84116,917.62886},
-              (double[]){516.9201,4849.31623,7221.34863,7527.68604,1151.26575,6524.27975,705.95819,4513.90006,5128.38355,6394.32618,5547.92822,5852.66449,1573.28964,4182.4275,8472.49003,2649.24761,9031.21648,273.19715,9269.87663,3111.26556,5555.49909,1971.95879,4414.7191,6246.03113,4236.78126,8654.59594,1718.24435,7858.42398,5748.95136,1579.52587,3661.98626,2142.41081,7568.26255,5097.90185,5640.32226,3454.39562,9409.04172,4254.11444,4606.8975,8475.69705,4081.69481,6739.58349,7981.12462,8370.65351,7414.76374},
-              (double[]){5454.43, 9854.432, 10000.432},
-          },
+          .updates =
+              (double *[]){
+                  (double[]){8194,        68.41378,    488,         5904.4289,
+                             348.952,     5.41609,     33687,       24959.94718,
+                             93646.26915, 1520.5,      14639.697,   7022,
+                             281.52,      16146.0281,  1.92362,     52167.56135,
+                             29.19779,    45057.14,    3319.7724,   34066.55,
+                             1073.62876,  91667.0,     98416.1719,  96030.39534,
+                             783.438,     77316.03541, 5659.005,    55984.9258,
+                             7.94164,     3384.647,    72593.99,    6628.329,
+                             17548.12711, 3.58183,     70.8097,     64922.09787,
+                             3822.1765,   67.44964,    819.125,     57421.823,
+                             52.8739,     2394.23,     6053.3371,   81659.40367,
+                             38240.76,    8542.95662,  54837.08557, 7.92726,
+                             69.11685,    5428.26,     6612.06311,  70475.98393,
+                             85464.98161, 20740.9,     43986.93,    70876.29799,
+                             1037.866,    71.71462,    53813.0019,  4035.658,
+                             5811.23089,  582.7,       94178.50533, 12500.30161,
+                             81487.188,   690.50582,   49662.044,   73422.52,
+                             68386.53142, 91320.37996, 35.92333},
+                  (double[]){745.38815, 481.05336, 6.41994, 1.95525, 1156.20533,
+                             1268.7098, 1295.84116, 917.62886},
+                  (double[]){516.9201,   4849.31623, 7221.34863, 7527.68604,
+                             1151.26575, 6524.27975, 705.95819,  4513.90006,
+                             5128.38355, 6394.32618, 5547.92822, 5852.66449,
+                             1573.28964, 4182.4275,  8472.49003, 2649.24761,
+                             9031.21648, 273.19715,  9269.87663, 3111.26556,
+                             5555.49909, 1971.95879, 4414.7191,  6246.03113,
+                             4236.78126, 8654.59594, 1718.24435, 7858.42398,
+                             5748.95136, 1579.52587, 3661.98626, 2142.41081,
+                             7568.26255, 5097.90185, 5640.32226, 3454.39562,
+                             9409.04172, 4254.11444, 4606.8975,  8475.69705,
+                             4081.69481, 6739.58349, 7981.12462, 8370.65351,
+                             7414.76374},
+                  (double[]){5454.43, 9854.432, 10000.432},
+              },
           .want_ret_value = 47.97,
       },
       {
           .fam = create_metric_family_for_test5("test8-percentile-by-name", 5,
                                                 74, 1.065, 45.784),
           .percent = 100,
-          .num_updates = (size_t[]) {42, 0, 67, 5, 89},
-          .updates = (double *[]) {
-              (double[]) {72506.34561, 91418.8635, 80572.52619, 38484.68244,
-                          87877.24226, 57174.59598, 1551.41153, 9145.58047,
-                          72967.20258, 53348.1573, 48132.4808, 39831.68688,
-                          78359.72224, 76905.47862, 5348.62723, 8070.63794,
-                          11716.49737, 29432.91898, 67222.86733, 29114.50366,
-                          67117.86881, 15388.23779, 48933.6252, 74134.36183,
-                          24786.55592, 42282.17781, 87869.09351, 26252.42492,
-                          7323.72669, 47943.4361, 29671.97547, 6225.43339,
-                          44457.12541, 34822.90173, 50059.94181, 26860.86093,
-                          71182.72552, 65944.4019, 21285.09149, 19641.2854,
-                          19254.37358, 61342.40975},
-              (double[]) {
+          .num_updates = (size_t[]){42, 0, 67, 5, 89},
+          .updates =
+              (double *[]){
+                  (double[]){72506.34561, 91418.8635,  80572.52619, 38484.68244,
+                             87877.24226, 57174.59598, 1551.41153,  9145.58047,
+                             72967.20258, 53348.1573,  48132.4808,  39831.68688,
+                             78359.72224, 76905.47862, 5348.62723,  8070.63794,
+                             11716.49737, 29432.91898, 67222.86733, 29114.50366,
+                             67117.86881, 15388.23779, 48933.6252,  74134.36183,
+                             24786.55592, 42282.17781, 87869.09351, 26252.42492,
+                             7323.72669,  47943.4361,  29671.97547, 6225.43339,
+                             44457.12541, 34822.90173, 50059.94181, 26860.86093,
+                             71182.72552, 65944.4019,  21285.09149, 19641.2854,
+                             19254.37358, 61342.40975},
+                  (double[]){
 
+                  },
+                  (double[]){5586.54111,  3841.94096,  5834.15027,  8247.97183,
+                             9499.93153,  7472.58943,  219.47985,   7686.70986,
+                             1219.55743,  2415.15816,  8955.29092,  3480.59525,
+                             1879.67425,  1275.56004,  3295.58027,  2139.82266,
+                             456.72684,   562.50828,   1941.86819,  9780.2701,
+                             4234.51139,  1287.71429,  571.7637,    3018.60717,
+                             3024.39436,  10317.61782, 3059.65791,  6248.61059,
+                             10178.41514, 3430.92157,  5205.66822,  3387.48332,
+                             2669.69809,  7532.6,      6981.75202,  2897.25262,
+                             8964.52642,  4209.86327,  3735.92037,  878.27845,
+                             4097.70763,  10419.35129, 2094.15747,  9162.93322,
+                             6691.67488,  1529.17463,  10293.11383, 10388.03797,
+                             4898.96937,  9262.156,    833.49287,   1568.14635,
+                             1187.62364,  8168.1532,   8849.88077,  8484.26639,
+                             10457.05272, 1759.43482,  288.39094,   7405.56667,
+                             9778.09951,  6290.33759,  7102.4534,   2172.31562,
+                             8277.08193,  8824.99498,  5797.51546},
+                  (double[]){56.43, 879.453, 5.324, 765.342, 64.4356},
+                  (double[]){1013.25449, 9089.16126, 9854.27631, 9420.94215,
+                             509.43821,  7299.78937, 2293.54321, 7308.0138,
+                             4066.37637, 6305.31349, 7006.66839, 2503.36452,
+                             5787.31125, 4247.16623, 5803.29759, 8303.8097,
+                             9543.26322, 2027.47232, 486.42233,  6603.60027,
+                             1440.39473, 9132.76392, 4395.65407, 6737.9134,
+                             6162.07532, 5855.29759, 802.30289,  10121.34827,
+                             10029.5615, 2886.96024, 3185.46451, 517.43518,
+                             892.29103,  5515.76823, 8022.44596, 3888.66676,
+                             4320.34148, 5751.74699, 5016.10839, 343.68796,
+                             2926.28764, 3061.87651, 4463.04963, 5255.43202,
+                             4029.81862, 3254.9407,  6082.41397, 10433.08612,
+                             2011.06951, 2968.68571, 7948.21252, 4659.80086,
+                             8464.0979,  1424.92974, 6664.08464, 7246.80407,
+                             4714.69846, 6168.91884, 6315.78325, 9857.07278,
+                             5709.06859, 176.3125,   5244.00458, 3999.77758,
+                             7247.30445, 9108.6723,  7354.32423, 7918.81314,
+                             3666.6743,  7315.87523, 5687.41806, 293.34054,
+                             1812.20181, 3585.62552, 6423.85917, 4389.82836,
+                             3467.02384, 6070.2832,  8559.86769, 1225.99976,
+                             2808.22175, 4888.729,   7613.12619, 414.86679,
+                             7449.10677, 6598.8391,  2551.38054, 9092.67749,
+                             5626.38473},
               },
-              (double[]) {5586.54111, 3841.94096, 5834.15027, 8247.97183, 9499.93153, 7472.58943, 219.47985, 7686.70986,
-                          1219.55743, 2415.15816, 8955.29092, 3480.59525, 1879.67425, 1275.56004, 3295.58027,
-                          2139.82266, 456.72684, 562.50828, 1941.86819, 9780.2701, 4234.51139, 1287.71429, 571.7637,
-                          3018.60717, 3024.39436, 10317.61782, 3059.65791, 6248.61059, 10178.41514, 3430.92157,
-                          5205.66822, 3387.48332, 2669.69809, 7532.6, 6981.75202, 2897.25262, 8964.52642, 4209.86327,
-                          3735.92037, 878.27845, 4097.70763, 10419.35129, 2094.15747, 9162.93322, 6691.67488,
-                          1529.17463, 10293.11383, 10388.03797, 4898.96937, 9262.156, 833.49287, 1568.14635, 1187.62364,
-                          8168.1532, 8849.88077, 8484.26639, 10457.05272, 1759.43482, 288.39094, 7405.56667, 9778.09951,
-                          6290.33759, 7102.4534, 2172.31562, 8277.08193, 8824.99498, 5797.51546},
-          (double[]) {56.43, 879.453, 5.324, 765.342, 64.4356},
-          (double[]) {1013.25449, 9089.16126, 9854.27631, 9420.94215, 509.43821, 7299.78937, 2293.54321, 7308.0138,
-                      4066.37637, 6305.31349, 7006.66839, 2503.36452, 5787.31125, 4247.16623, 5803.29759, 8303.8097,
-                      9543.26322, 2027.47232, 486.42233, 6603.60027, 1440.39473, 9132.76392, 4395.65407, 6737.9134,
-                      6162.07532, 5855.29759, 802.30289, 10121.34827, 10029.5615, 2886.96024, 3185.46451, 517.43518,
-                      892.29103, 5515.76823, 8022.44596, 3888.66676, 4320.34148, 5751.74699, 5016.10839, 343.68796,
-                      2926.28764, 3061.87651, 4463.04963, 5255.43202, 4029.81862, 3254.9407, 6082.41397, 10433.08612,
-                      2011.06951, 2968.68571, 7948.21252, 4659.80086, 8464.0979, 1424.92974, 6664.08464, 7246.80407,
-                      4714.69846, 6168.91884, 6315.78325, 9857.07278, 5709.06859, 176.3125, 5244.00458, 3999.77758,
-                      7247.30445, 9108.6723, 7354.32423, 7918.81314, 3666.6743, 7315.87523, 5687.41806, 293.34054,
-                      1812.20181, 3585.62552, 6423.85917, 4389.82836, 3467.02384, 6070.2832, 8559.86769, 1225.99976,
-                      2808.22175, 4888.729, 7613.12619, 414.86679, 7449.10677, 6598.8391, 2551.38054, 9092.67749,
-                      5626.38473},
-      },          .want_ret_value = INFINITY,},
+          .want_ret_value = INFINITY,
+      },
       {
           .fam = create_metric_family_for_test6(
               "test9-percentile-by-name", 3, 26,
@@ -476,19 +510,21 @@ DEF_TEST(uc_get_percentile_by_name) {
                          96327.48458, 97958.59675}),
           .percent = 42.3,
           .num_updates = (size_t[]){38, 0, 2},
-          .updates = (double*[]){
-              (double[]){71079.41279, 64378.08534, 58308.74218, 62899.70407,
-                         43084.69866, 59286.43609, 95311.89101, 46082.97057,
-                         21002.88808, 13767.93511, 6832.77194,  9641.53968,
-                         93547.80996, 53104.75652, 30484.31134, 63405.23635,
-                         87195.96601, 91571.10233, 10134.44248, 63686.4723,
-                         323.06071,   48039.79776, 84822.6203,  89630.53538,
-                         15187.56664, 76056.39513, 91604.62264, 47667.05402,
-                         11471.67096, 82920.8644,  57711.02046, 73579.12752,
-                         35093.01442, 95393.57805, 17610.14104, 54931.47418,
-                         19359.63012, 46414.44434},
-              (double[]){},
-              (double[]){468.435, 54267.54}, },
+          .updates =
+              (double *[]){
+                  (double[]){71079.41279, 64378.08534, 58308.74218, 62899.70407,
+                             43084.69866, 59286.43609, 95311.89101, 46082.97057,
+                             21002.88808, 13767.93511, 6832.77194,  9641.53968,
+                             93547.80996, 53104.75652, 30484.31134, 63405.23635,
+                             87195.96601, 91571.10233, 10134.44248, 63686.4723,
+                             323.06071,   48039.79776, 84822.6203,  89630.53538,
+                             15187.56664, 76056.39513, 91604.62264, 47667.05402,
+                             11471.67096, 82920.8644,  57711.02046, 73579.12752,
+                             35093.01442, 95393.57805, 17610.14104, 54931.47418,
+                             19359.63012, 46414.44434},
+                  (double[]){},
+                  (double[]){468.435, 54267.54},
+              },
           .want_ret_value = 7174.31149,
       },
   };
@@ -499,13 +535,14 @@ DEF_TEST(uc_get_percentile_by_name) {
 
     for (size_t k = 0; k < cases[i].fam->metric.num; ++k) {
       for (size_t l = 0; l <= k; ++l) {
-          for (size_t j = 0; j < cases[i].num_updates[l]; ++j) {
-            CHECK_ZERO(distribution_update(
-                cases[i].fam->metric.ptr[k].value.distribution, cases[i].updates[l][j]));
-          }
+        for (size_t j = 0; j < cases[i].num_updates[l]; ++j) {
+          CHECK_ZERO(distribution_update(
+              cases[i].fam->metric.ptr[k].value.distribution,
+              cases[i].updates[l][j]));
         }
       }
-      /* TODO(bkjg): add test, where fam will be NULL */
+    }
+    /* TODO(bkjg): add test, where fam will be NULL */
 
     CHECK_ZERO(uc_update(cases[i].fam));
 
@@ -573,8 +610,8 @@ DEF_TEST(uc_get_percentile) {
                                                 5),
           .want_get = -1,
           .percent = -76,
-      .num_updates = (size_t[]){0, 0, 0, 0, 0, 0},
-          },
+          .num_updates = (size_t[]){0, 0, 0, 0, 0, 0},
+      },
       {
           .fam = create_metric_family_for_test6(
               "test6-percentile", 5, 8,
@@ -589,16 +626,21 @@ DEF_TEST(uc_get_percentile) {
               create_metric_family_for_test7("test7-percentile", 9, 68, 84.543),
           .percent = 0,
           .num_updates = (size_t[]){9, 1, 0, 6, 8, 0, 7, 0, 4},
-          .updates = (double*[]){(double[]){1.354, 4.2343, 67.543, 7243.2435, 543.2543,
-                                54.43, 543.534, 9023.534, 2358453.534534},
-              (double[]){67.543},
-              (double[]){},
-              (double[]){54.4645, 768.435, 6.4534, 986.43, 987.534, 23.5},
-              (double[]){546.654, 1324.324, 457.43, 678.435, 5785.435, 895.32, 9.423, 9853.543},
-              (double[]){},
-              (double[]){654.645, 45352.6, 53453.43, 543.435, 76.43, 797.43, 76.43},
-              (double[]){},
-              (double[]){83.4653, 943.463, 573.543, 90.543}, },
+          .updates =
+              (double *[]){
+                  (double[]){1.354, 4.2343, 67.543, 7243.2435, 543.2543, 54.43,
+                             543.534, 9023.534, 2358453.534534},
+                  (double[]){67.543},
+                  (double[]){},
+                  (double[]){54.4645, 768.435, 6.4534, 986.43, 987.534, 23.5},
+                  (double[]){546.654, 1324.324, 457.43, 678.435, 5785.435,
+                             895.32, 9.423, 9853.543},
+                  (double[]){},
+                  (double[]){654.645, 45352.6, 53453.43, 543.435, 76.43, 797.43,
+                             76.43},
+                  (double[]){},
+                  (double[]){83.4653, 943.463, 573.543, 90.543},
+              },
           .want_ret_value = 84.543,
           .metric_idx = 35,
       },
@@ -607,20 +649,54 @@ DEF_TEST(uc_get_percentile) {
                                                 1.345, 9.67),
           .percent = 100,
           .num_updates = (size_t[]){15, 67, 6, 0, 56, 26, 1},
-          .updates = (double*[]) {(double[]) {7273.23889, 2332.61737, 5700.55615, 7812.98765,
-                                              4264.86158, 268.74688, 6486.08937, 6204.44048,
-                                              7235.73534, 2794.02672, 9288.39283, 4662.6566,
-                                              6517.20614, 7785.61931, 8087.83614, 1094.24435,
-                                              8093.33661, 2796.65101, 1425.40209, 2949.08743,
-                                              3074.2948, 9631.15671, 1448.20895, 9843.30987,
-                                              5045.33169, 6653.13623},
-                                  (double[]){8.9836,44.92963,3.13412,72.36738,107.39301,21.2692,33.24933,10.00479,11.07998,101.58473,56.7942,102.57711,85.23387,5.50962,109.7728,25.13287,82.06147,7.88873,65.86362,68.49312,76.34463,11.84615,51.95518,51.36831,44.59729,27.56038,54.12334,3.14058,70.23039,113.51434,100.76535,1.42056,98.09661,70.88242,55.39125,4.84537,48.7601,3.89373,61.61134,97.6968,42.15975,66.19623,83.75841,93.82006,86.68521,47.97931,83.52405,79.94514,52.24084,34.4199,89.83969,93.75171,88.65762,8.99014,1.12716,9.23472,44.18075,75.32575,40.50866,0.62965,109.54525,63.84394,19.85427,20.86203,42.07358,100.14113,9.58807},
-                                  (double[]){65.43, 7.54, 10.42323, 11.543, 20.4235, 109.423},
-                                  (double[]){},
-                                  (double[]){40.70721,111.25481,58.84637,130.57275,12.98124,107.43372,7.30452,62.89139,98.57436,81.20726,32.09759,142.48247,45.98872,26.61524,91.13035,105.86144,110.31826,43.40806,46.45192,23.47531,6.53419,149.77225,119.41684,8.76683,134.67231,59.93585,129.2164,108.17816,43.76639,138.4096,44.9372,146.85231,35.69273,91.43816,50.39418,139.84918,132.96587,41.81809,35.02065,67.94941,59.01611,138.43066,95.45903,51.71665,31.17835,125.77984,24.81209,43.67169,59.02432,77.40476,72.55881,103.22872,61.44734,110.21046,22.42225,53.0431},
-                                  (double[]){38.81053,2.92907,58.62993,1.02672,21.98664,27.78435,62.01765,11.04862,35.70885,20.19808,48.87309,16.81291,46.22889,50.54755,59.58231,50.21794,26.45925,10.17534,26.77216,18.10478,30.72786,16.07058,16.60934,44.67609,46.58571,66.82775},
-                                  (double[]){44.32},
-          },.want_ret_value = 57.2479817070748,
+          .updates =
+              (double *[]){
+                  (double[]){7273.23889, 2332.61737, 5700.55615, 7812.98765,
+                             4264.86158, 268.74688,  6486.08937, 6204.44048,
+                             7235.73534, 2794.02672, 9288.39283, 4662.6566,
+                             6517.20614, 7785.61931, 8087.83614, 1094.24435,
+                             8093.33661, 2796.65101, 1425.40209, 2949.08743,
+                             3074.2948,  9631.15671, 1448.20895, 9843.30987,
+                             5045.33169, 6653.13623},
+                  (double[]){
+                      8.9836,    44.92963,  3.13412,  72.36738, 107.39301,
+                      21.2692,   33.24933,  10.00479, 11.07998, 101.58473,
+                      56.7942,   102.57711, 85.23387, 5.50962,  109.7728,
+                      25.13287,  82.06147,  7.88873,  65.86362, 68.49312,
+                      76.34463,  11.84615,  51.95518, 51.36831, 44.59729,
+                      27.56038,  54.12334,  3.14058,  70.23039, 113.51434,
+                      100.76535, 1.42056,   98.09661, 70.88242, 55.39125,
+                      4.84537,   48.7601,   3.89373,  61.61134, 97.6968,
+                      42.15975,  66.19623,  83.75841, 93.82006, 86.68521,
+                      47.97931,  83.52405,  79.94514, 52.24084, 34.4199,
+                      89.83969,  93.75171,  88.65762, 8.99014,  1.12716,
+                      9.23472,   44.18075,  75.32575, 40.50866, 0.62965,
+                      109.54525, 63.84394,  19.85427, 20.86203, 42.07358,
+                      100.14113, 9.58807},
+                  (double[]){65.43, 7.54, 10.42323, 11.543, 20.4235, 109.423},
+                  (double[]){},
+                  (double[]){
+                      40.70721,  111.25481, 58.84637,  130.57275, 12.98124,
+                      107.43372, 7.30452,   62.89139,  98.57436,  81.20726,
+                      32.09759,  142.48247, 45.98872,  26.61524,  91.13035,
+                      105.86144, 110.31826, 43.40806,  46.45192,  23.47531,
+                      6.53419,   149.77225, 119.41684, 8.76683,   134.67231,
+                      59.93585,  129.2164,  108.17816, 43.76639,  138.4096,
+                      44.9372,   146.85231, 35.69273,  91.43816,  50.39418,
+                      139.84918, 132.96587, 41.81809,  35.02065,  67.94941,
+                      59.01611,  138.43066, 95.45903,  51.71665,  31.17835,
+                      125.77984, 24.81209,  43.67169,  59.02432,  77.40476,
+                      72.55881,  103.22872, 61.44734,  110.21046, 22.42225,
+                      53.0431},
+                  (double[]){38.81053, 2.92907,  58.62993, 1.02672,  21.98664,
+                             27.78435, 62.01765, 11.04862, 35.70885, 20.19808,
+                             48.87309, 16.81291, 46.22889, 50.54755, 59.58231,
+                             50.21794, 26.45925, 10.17534, 26.77216, 18.10478,
+                             30.72786, 16.07058, 16.60934, 44.67609, 46.58571,
+                             66.82775},
+                  (double[]){44.32},
+              },
+          .want_ret_value = 57.2479817070748,
           .metric_idx = 0,
       },
       {
@@ -638,40 +714,66 @@ DEF_TEST(uc_get_percentile) {
                   8055.85652, 8514.09805, 8786.67945, 8814.77247, 9421.52142,
                   9584.05069, 9618.27028, 9788.40721, 9862.77031}),
           .percent = 56.3,
-          .num_updates = (size_t[]){54,67,8,9},
-          .updates = (double*[]) {
-              (double[]) {
-                  9473.99522, 9682.46524, 6902.22386, 2632.59974, 224.97903,
-                  4425.67438, 1094.25828, 5507.07452, 6140.55588, 6586.78403,
-                  3748.51025, 7342.42407, 461.98087, 2370.005, 6234.53679,
-                  3630.13252, 9190.53656, 2377.16807, 2554.37586, 5973.07804,
-                  9459.471, 977.36175, 4707.95627, 9373.90178, 5625.67662,
-                  9200.20201, 2503.82766, 5539.63445, 8564.03697, 5179.19388,
-                  8530.74263, 3829.30061, 9251.19378, 8991.0057, 8464.4043,
-                  7580.73952, 9025.62113, 8952.42671, 9287.5265, 8579.52376,
-                  2938.24169, 1229.20803, 3995.36776, 2629.81514, 222.9282,
-                  321.08365, 958.73825, 393.90684, 7396.77622, 2706.27567,
-                  7376.80843, 3028.44747, 8684.45493, 8277.39937},
-              (double[]){94.34024,5369.42045,106.99225,4845.37869,3694.95099,6859.38458,3403.18808,9102.51424,4098.48109,5954.08755,6146.62894,3494.39408,4229.73443,1400.66599,8942.00647,6992.12526,3145.67041,4158.62876,8337.978,8311.53907,5934.71194,6885.4022,7941.92203,1636.68227,6086.39492,1893.09594,4984.28907,756.5788,9298.44361,6460.4752,8455.53452,2607.52741,62.34891,2499.08504,1370.14777,7838.19529,4335.81203,736.71981,9177.66445,8299.95565,7745.85028,5442.34546,7129.24099,6034.30483,2666.01496,5626.89066,1948.9354,842.76915,4425.71523,8022.58775,3228.76266,6616.1537,7016.92999,6867.16531,4919.9911,3812.5397,353.57387,7504.68569,8575.42736,9262.40423,6691.10738,9253.02204,9171.75229,6153.56538,8469.24383,4859.31769,1161.66019},
-              (double[]){4400.00001,9833.13863,100.16011,6849.80943,510.31266,2866.47649,4492.46879,8692.87943},
-              (double[]){1566.00821,7594.931,995.13973,1289.97209,9242.79285,9702.15248,82.44731,1854.97795,5236.74648},
-          },.want_ret_value = 2011.40738,
+          .num_updates = (size_t[]){54, 67, 8, 9},
+          .updates =
+              (double *[]){
+                  (double[]){9473.99522, 9682.46524, 6902.22386, 2632.59974,
+                             224.97903,  4425.67438, 1094.25828, 5507.07452,
+                             6140.55588, 6586.78403, 3748.51025, 7342.42407,
+                             461.98087,  2370.005,   6234.53679, 3630.13252,
+                             9190.53656, 2377.16807, 2554.37586, 5973.07804,
+                             9459.471,   977.36175,  4707.95627, 9373.90178,
+                             5625.67662, 9200.20201, 2503.82766, 5539.63445,
+                             8564.03697, 5179.19388, 8530.74263, 3829.30061,
+                             9251.19378, 8991.0057,  8464.4043,  7580.73952,
+                             9025.62113, 8952.42671, 9287.5265,  8579.52376,
+                             2938.24169, 1229.20803, 3995.36776, 2629.81514,
+                             222.9282,   321.08365,  958.73825,  393.90684,
+                             7396.77622, 2706.27567, 7376.80843, 3028.44747,
+                             8684.45493, 8277.39937},
+                  (double[]){94.34024,   5369.42045, 106.99225,  4845.37869,
+                             3694.95099, 6859.38458, 3403.18808, 9102.51424,
+                             4098.48109, 5954.08755, 6146.62894, 3494.39408,
+                             4229.73443, 1400.66599, 8942.00647, 6992.12526,
+                             3145.67041, 4158.62876, 8337.978,   8311.53907,
+                             5934.71194, 6885.4022,  7941.92203, 1636.68227,
+                             6086.39492, 1893.09594, 4984.28907, 756.5788,
+                             9298.44361, 6460.4752,  8455.53452, 2607.52741,
+                             62.34891,   2499.08504, 1370.14777, 7838.19529,
+                             4335.81203, 736.71981,  9177.66445, 8299.95565,
+                             7745.85028, 5442.34546, 7129.24099, 6034.30483,
+                             2666.01496, 5626.89066, 1948.9354,  842.76915,
+                             4425.71523, 8022.58775, 3228.76266, 6616.1537,
+                             7016.92999, 6867.16531, 4919.9911,  3812.5397,
+                             353.57387,  7504.68569, 8575.42736, 9262.40423,
+                             6691.10738, 9253.02204, 9171.75229, 6153.56538,
+                             8469.24383, 4859.31769, 1161.66019},
+                  (double[]){4400.00001, 9833.13863, 100.16011, 6849.80943,
+                             510.31266, 2866.47649, 4492.46879, 8692.87943},
+                  (double[]){1566.00821, 7594.931, 995.13973, 1289.97209,
+                             9242.79285, 9702.15248, 82.44731, 1854.97795,
+                             5236.74648},
+              },
+          .want_ret_value = 2011.40738,
           .metric_idx = 48,
       },
   };
 
+  /* TODO(bkjg): add test cases to the uc_update function that will give an
+   * error in distribution_sub function */
   uc_init();
   for (size_t i = 0; i < (sizeof(cases) / sizeof(cases[0])); ++i) {
     printf("## Case %zu:\n", i);
 
     for (size_t k = 0; k < cases[i].fam->metric.num; ++k) {
       for (size_t l = 0; l <= k; ++l) {
-          for (size_t j = 0; j < cases[i].num_updates[l]; ++j) {
-            CHECK_ZERO(distribution_update(
-                cases[i].fam->metric.ptr[k].value.distribution, cases[i].updates[l][j]));
-          }
+        for (size_t j = 0; j < cases[i].num_updates[l]; ++j) {
+          CHECK_ZERO(distribution_update(
+              cases[i].fam->metric.ptr[k].value.distribution,
+              cases[i].updates[l][j]));
         }
       }
+    }
 
     CHECK_ZERO(uc_update(cases[i].fam));
 
@@ -704,8 +806,8 @@ DEF_TEST(uc_get_rate_by_name) {
     gauge_t ret_value;
     gauge_t want_ret_value;
     metric_family_t *fam;
-    double *updates;
-    int num_updates;
+    double **updates;
+    size_t *num_updates;
   } cases[] = {
       {
           /* TODO(bkjg): maybe change the return value to EINVAL when the
@@ -713,41 +815,52 @@ DEF_TEST(uc_get_rate_by_name) {
           .fam = create_metric_family_for_test1(
               "test1-rate-by-name", 3, (gauge_t[]){69.54, 95.67, 45.87}),
           .want_ret_value = 45.87,
+          .num_updates = (size_t[]){0, 0, 0},
       },
       {
           .fam = fam_test2,
           .want_ret_value = want_ret_value_for_test2,
+          .num_updates = (size_t[]){0, 0, 0, 0, 0, 0},
       },
       {
           .fam = create_metric_family_for_test3("test3-rate-by-name", 2,
                                                 (gauge_t[]){436.54, 543.6}),
           .want_ret_value = 543.6,
+          .num_updates = (size_t[]){0, 0},
       },
       {
           .fam = create_metric_family_for_test4("test4-rate-by-name"),
           .want_ret_value = NAN,
+          .num_updates = (size_t[]){0},
       },
       {
           .fam = create_metric_family_for_test5("test5-rate-by-name", 4, 48,
                                                 1.033, 35),
-          .num_updates = 75,
+          .num_updates = (size_t[]){75, 4, 5, 0},
           .updates =
-              (double[]){
-                  4159.654,   9603.94667, 6060.77104, 20.11649,   21.07854,
-                  7963.46534, 179.10527,  44.50653,   176.80966,  8881.67928,
-                  5330.64572, 4725.76119, 41.95417,   44.85246,   3917.1775,
-                  4252.7976,  82.38465,   91.43321,   553.65691,  3162.53235,
-                  21.63984,   9750.3053,  39.8265,    3745.03322, 565.97145,
-                  2500.5585,  5454.60361, 3249.507,   9847.01554, 4695.82556,
-                  307.72055,  60.01705,   7245.61576, 1777.3541,  510.62964,
-                  5821.57195, 8501.10822, 1017.39535, 5747.66313, 730.39328,
-                  2036.318,   600.15378,  4453.83351, 9879.11423, 9020.87809,
-                  3403.07313, 9429.83863, 11.328,     50.28723,   80.87675,
-                  3841.93743, 2270.33075, 862.9549,   83.00705,   7178.40826,
-                  2368.45065, 3153.68087, 458.31409,  4949.40529, 862.93844,
-                  8778.1962,  95.5752,    8604.12661, 274.7418,   2123.17802,
-                  614.29148,  1915.66805, 7996.38788, 93.39166,   832.57039,
-                  5094.52733, 58.69212,   4746.39854, 722.9694,   6768.01305},
+              (double *[]){
+                  (double[]){4159.654,   9603.94667, 6060.77104, 20.11649,
+                             21.07854,   7963.46534, 179.10527,  44.50653,
+                             176.80966,  8881.67928, 5330.64572, 4725.76119,
+                             41.95417,   44.85246,   3917.1775,  4252.7976,
+                             82.38465,   91.43321,   553.65691,  3162.53235,
+                             21.63984,   9750.3053,  39.8265,    3745.03322,
+                             565.97145,  2500.5585,  5454.60361, 3249.507,
+                             9847.01554, 4695.82556, 307.72055,  60.01705,
+                             7245.61576, 1777.3541,  510.62964,  5821.57195,
+                             8501.10822, 1017.39535, 5747.66313, 730.39328,
+                             2036.318,   600.15378,  4453.83351, 9879.11423,
+                             9020.87809, 3403.07313, 9429.83863, 11.328,
+                             50.28723,   80.87675,   3841.93743, 2270.33075,
+                             862.9549,   83.00705,   7178.40826, 2368.45065,
+                             3153.68087, 458.31409,  4949.40529, 862.93844,
+                             8778.1962,  95.5752,    8604.12661, 274.7418,
+                             2123.17802, 614.29148,  1915.66805, 7996.38788,
+                             93.39166,   832.57039,  5094.52733, 58.69212,
+                             4746.39854, 722.9694,   6768.01305},
+                  (double[]){26.24206, 29.78883, 35.16503, 28.52225},
+                  (double[]){45.65, 78.435, 34.324, 57.45, 67.5743},
+                  (double[]){}},
           .want_ret_value = 35,
       },
       {
@@ -763,48 +876,110 @@ DEF_TEST(uc_get_rate_by_name) {
                          812.37927, 835.96259, 841.42108, 853.20455, 865.72175,
                          873.74441, 880.88184, 900.20886, 973.97989, 976.72908,
                          979.7941,  991.89657}),
-          .num_updates = 68,
+          .num_updates = (size_t[]){68, 8, 0, 0, 9, 11},
           .updates =
-              (double[]){
-                  4682.42335, 4020.54089, 565.10587,  3954.73905, 6439.72826,
-                  9010.67591, 8621.51997, 9915.12095, 2913.60702, 8645.39755,
-                  6423.67358, 4830.46203, 8067.11382, 238.90511,  5809.10209,
-                  7820.37444, 2742.35617, 7310.94613, 6630.98218, 8333.84097,
-                  6513.26349, 1295.61267, 5724.2328,  1371.68056, 5650.33203,
-                  8102.43229, 3675.91657, 9497.04227, 7286.45926, 8378.14153,
-                  4291.39604, 9606.11436, 6525.73329, 3496.49047, 1500.50609,
-                  5513.17177, 57.07583,   2666.14731, 6138.06959, 7829.2008,
-                  4590.09268, 6646.89925, 4234.80301, 9875.51713, 8664.20834,
-                  9593.93277, 5290.35192, 9947.5131,  9303.34419, 4821.80711,
-                  5620.28822, 2695.28733, 1496.69721, 4338.82326, 769.33479,
-                  5846.82939, 7256.13839, 5769.4598,  2450.50956, 2482.28105,
-                  4821.93336, 3614.77436, 6639.69338, 3495.76385, 2296.34926,
-                  6616.96188, 2966.60109, 1549.4343},
-          .want_ret_value = 15.59219,
+              (double *[]){
+                  (double[]){4682.42335, 420.549,    565.187,    3954.73905,
+                             643.72826,  900.67591,  821.51997,  9915.12095,
+                             2913.60702, 645.39755,  6423.67358, 430.46203,
+                             87.11382,   238.90511,  509.10209,  720.37444,
+                             22.35617,   0.94613,    6630.98218, 833.84097,
+                             613.26349,  125.61267,  528,        1371.68056,
+                             5650.3303,  8102.43229, 75.91657,   997.04227,
+                             7286.45926, 838.14153,  421.39604,  9606.11436,
+                             65.73329,   34.49047,   15.50609,   513.17177,
+                             57.07583,   6.14731,    6138.069,   9.2008,
+                             590.09268,  646.89925,  42.801,     95.51713,
+                             64.20834,   953.93277,  590.35192,  994.31,
+                             9303.344,   4821.80711, 560.28822,  295.28733,
+                             1.69721,    326,        769.3479,   586.82939,
+                             756.13839,  9.4598,     240.556,    242.28105,
+                             481.93336,  314.77436,  639.6,      3495.76385,
+                             226.34926,  6616.96188, 2966.60109, 1549.4343},
+                  (double[]){645.43, 745.425, 989432.3423, 89.432, 678.423,
+                             903.54, 589.34, 569.54},
+                  (double[]){},
+                  (double[]){},
+                  (double[]){567.432, 678.43, 543.5346, 895.3, 234.543, 178.453,
+                             864.23, 900.543, 4235},
+                  (double[]){42342.4324, 543.423, 678.435, 245.325, 8753.6456,
+                             906.5435, 6874.634, 674.34, 789.534, 543.543, 654.43}},
+          .want_ret_value = 718.85353,
       },
       {
           .fam =
               create_metric_family_for_test7("test7-rate-by-name", 10, 532, 98),
-          .num_updates = 36,
-          .updates = (double[]){8563.48484, 7737.26182, 8461.55369, 7345.18085,
-                                6922.39556, 9826.36599, 8285.47882, 9242.88802,
-                                1879.60733, 2017.17049, 9946.55565, 5047.35425,
-                                5956.43188, 3637.33311, 2275.67666, 5241.08879,
-                                3752.92924, 4518.3078,  5574.17357, 444.83081,
-                                8731.81445, 4428.15217, 5869.54926, 4006.06406,
-                                6442.546,   8566.80388, 6627.0215,  2276.11951,
-                                7684.56221, 9571.34356, 7074.81794, 3457.6747,
-                                747.35085,  9269.56873, 6193.34178, 1339.58513},
-          .want_ret_value = 98,
+          .num_updates = (size_t[]){36, 0, 0, 0, 0, 3, 78, 45, 9, 10},
+          .updates =
+              (double *[]){
+                  (double[]){8563.48484, 7737.26182, 8461.55369, 7345.18085,
+                             6922.39556, 9826.36599, 8285.47882, 9242.88802,
+                             1879.60733, 2017.17049, 9946.55565, 5047.35425,
+                             5956.43188, 3637.33311, 2275.67666, 5241.08879,
+                             3752.92924, 4518.3078,  5574.17357, 444.83081,
+                             8731.81445, 4428.15217, 5869.54926, 4006.06406,
+                             6442.546,   8566.80388, 6627.0215,  2276.11951,
+                             7684.56221, 9571.34356, 7074.81794, 3457.6747,
+                             747.35085,  9269.56873, 6193.34178, 1339.58513},
+                  (double[]){},
+                  (double[]){},
+                  (double[]){},
+                  (double[]){},
+                  (double[]){125.543, 642.5345, 7564.25},
+                  (double[]){22195.68641, 20118.4779,  27788.0238,  21660.95577,
+                             13109.17633, 45481.75486, 60772.61211, 15502.82054,
+                             64807.98058, 80269.72468, 17138.73195, 36947.45858,
+                             13698.34813, 24327.0788,  2310.4785,   47154.80257,
+                             42025.80305, 34341.75166, 50052.9567,  76862.15098,
+                             96078.89941, 57201.03172, 9861.25572,  87059.45503,
+                             26535.97795, 12066.52634, 35314.64922, 51132.33884,
+                             50256.12067, 6097.42143,  92925.59698, 78582.07681,
+                             89309.56916, 20259.27171, 3171.51752,  46472.43649,
+                             84907.56782, 4987.50946,  89845.81376, 5311.01208,
+                             34311.3633,  53558.35518, 91755.7273,  2035.08046,
+                             53700.1584,  91605.23363, 38349.06227, 17148.10497,
+                             36924.49226, 39106.15963, 60389.16114, 10506.33747,
+                             34272.86238, 40229.98104, 29947.99145, 80874.60114,
+                             94268.40706, 31144.25066, 2994.40595,  78146.89748,
+                             82519.67508, 39423.41723, 23379.64765, 74648.37952,
+                             85765.40285, 24009.43512, 69162.25593, 55258.07303,
+                             8626.32408,  42564.13693, 33160.6236,  11919.79605,
+                             13647.54085, 98696.50118, 18862.64208, 28554.92706,
+                             83405.96533, 47459.24177},
+                  (double[]){66075.33301, 81245.72895, 79264.1119,  71294.4439,
+                             69789.35421, 44400.87995, 61855.39209, 79255.32008,
+                             72927.19757, 40667.6036,  72490.18809, 21742.83491,
+                             89137.57279, 31740.68086, 97752.72254, 33346.88699,
+                             60235.58325, 43753.29565, 58615.5088,  5223.76648,
+                             64124.03391, 90914.4585,  12524.41179, 70676.85368,
+                             87377.49,    47835.43439, 7397.05884,  59284.78323,
+                             5100.00019,  64840.49217, 35805.81813, 75682.15466,
+                             1400.07204,  77499.47769, 65685.72436, 5006.66765,
+                             35944.44801, 60647.21456, 96690.41787, 26233.1071,
+                             40308.1231,  22477.09745, 3575.69941,  55313.28453,
+                             44959.21375},
+                  (double[]){47817.79309, 61037.21185, 38306.19433, 37380.72465,
+                             45474.26121, 35413.80266, 23993.95002, 52741.09605,
+                             7207.58457},
+                  (double[]){47415.11645, 2098.94152, 91558.98643, 53955.27033,
+                             85504.56864, 13830.14932, 9515.16889, 98472.57733,
+                             84736.51036, 21878.60046},
+              },
+          .want_ret_value = 47432,
       },
   };
 
   uc_init();
   for (size_t i = 0; i < (sizeof(cases) / sizeof(cases[0])); ++i) {
     printf("## Case %zu:\n", i);
-    for (int j = 0; j < cases[i].num_updates; ++j) {
-      CHECK_ZERO(distribution_update(
-          cases[i].fam->metric.ptr[0].value.distribution, cases[i].updates[j]));
+    for (size_t k = 0; k < cases[i].fam->metric.num; ++k) {
+      for (size_t l = 0; l <= k; ++l) {
+        for (size_t j = 0; j < cases[i].num_updates[l]; ++j) {
+          CHECK_ZERO(distribution_update(
+              cases[i].fam->metric.ptr[k].value.distribution,
+              cases[i].updates[l][j]));
+        }
+      }
     }
 
     CHECK_ZERO(uc_update(cases[i].fam));