@@ -658,7 +658,7 @@ DEF_TEST(distribution_get_num_buckets) {
658658}
659659
660660DEF_TEST (distribution_get_buckets_boundaries ) {
661- distribution_t * dist_test1 = distribution_new_linear (5 , 15.0 );
661+ distribution_t * dist_test1 = distribution_new_linear (5 , 15.0 );
662662 distribution_t * dist_test2 = distribution_new_exponential (14 , 1.5 , 4 );
663663 distribution_t * dist_test3 = distribution_new_custom (
664664 28 ,
@@ -675,43 +675,47 @@ DEF_TEST(distribution_get_buckets_boundaries) {
675675 int num_buckets ;
676676 double * want_boundaries ;
677677 int cannot_be_free ;
678- } cases [] = {{
679- .input_dist = NULL ,
680- .want_boundaries = NULL ,
681- .num_buckets = 0 ,
682- },
683- {
684- .input_dist = dist_test1 ,
685- .num_buckets = 5 ,
686- .want_boundaries = array_new_linear (5 , 15.0 ),
687- },
688- {
689- .input_dist = dist_test2 ,
690- .num_buckets = 14 ,
691- .want_boundaries = array_new_exponential (14 , 1.5 , 4 ),
692- },
693- {
694- .input_dist = dist_test3 ,
695- .num_buckets = 29 ,
696- .want_boundaries = (double []){1 , 4 , 6 , 19.3 , 65.35 ,
697- 98.9423 , 904.4321 , 1000.432 , 7894.90145 , 8000.5472 ,
698- 9000.852 , 10942.11 , 11443 , 89002.432 , 90423.62 ,
699- 95326.54 , 97642.90 , 100432.75 , 109543.62 , 209536.3543 ,
700- 500426.626 , 635690.62 , 790426.268 , 800738.374 , 1000436.637 ,
701- 1111111.98 , 1234567.890 , 2345678.901 , INFINITY },
702- .cannot_be_free = 1 ,
703- },
704- {
705- .input_dist = dist_test4 ,
706- .num_buckets = 30 ,
707- .want_boundaries = array_new_linear (30 , 1.5 ),
708- }};
678+ } cases [] = {
679+ {
680+ .input_dist = NULL ,
681+ .want_boundaries = NULL ,
682+ .num_buckets = 0 ,
683+ },
684+ {
685+ .input_dist = dist_test1 ,
686+ .num_buckets = 5 ,
687+ .want_boundaries = array_new_linear (5 , 15.0 ),
688+ },
689+ {
690+ .input_dist = dist_test2 ,
691+ .num_buckets = 14 ,
692+ .want_boundaries = array_new_exponential (14 , 1.5 , 4 ),
693+ },
694+ {
695+ .input_dist = dist_test3 ,
696+ .num_buckets = 29 ,
697+ .want_boundaries =
698+ (double []){
699+ 1 , 4 , 6 , 19.3 , 65.35 ,
700+ 98.9423 , 904.4321 , 1000.432 , 7894.90145 , 8000.5472 ,
701+ 9000.852 , 10942.11 , 11443 , 89002.432 , 90423.62 ,
702+ 95326.54 , 97642.90 , 100432.75 , 109543.62 , 209536.3543 ,
703+ 500426.626 , 635690.62 , 790426.268 , 800738.374 , 1000436.637 ,
704+ 1111111.98 , 1234567.890 , 2345678.901 , INFINITY },
705+ .cannot_be_free = 1 ,
706+ },
707+ {
708+ .input_dist = dist_test4 ,
709+ .num_buckets = 30 ,
710+ .want_boundaries = array_new_linear (30 , 1.5 ),
711+ }};
709712
710713 for (size_t i = 0 ; i < (sizeof (cases ) / sizeof (cases [0 ])); ++ i ) {
711714 EXPECT_EQ_UINT64 (cases [i ].num_buckets ,
712715 distribution_get_num_buckets (cases [i ].input_dist ));
713716
714- double * boundaries = distribution_get_buckets_boundaries (cases [i ].input_dist );
717+ double * boundaries =
718+ distribution_get_buckets_boundaries (cases [i ].input_dist );
715719
716720 if (cases [i ].want_boundaries == NULL ) {
717721 EXPECT_EQ_PTR (cases [i ].want_boundaries , boundaries );
@@ -733,6 +737,85 @@ DEF_TEST(distribution_get_buckets_boundaries) {
733737 return 0 ;
734738}
735739
740+ DEF_TEST (distribution_get_buckets_counters ) {
741+ distribution_t * dist_test1 = distribution_new_linear (10 , 5.0 );
742+ distribution_t * dist_test2 = distribution_new_exponential (8 , 1.5 , 2 );
743+ distribution_t * dist_test3 = distribution_new_custom (
744+ 11 , (double []){1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 89 , 144 });
745+
746+ struct {
747+ distribution_t * input_dist ;
748+ double * gauges ;
749+ int num_queries ;
750+ uint64_t * counters ;
751+ int num_buckets ;
752+ double sum_gauges ;
753+ } cases [] = {
754+ {
755+ .input_dist = NULL ,
756+ .num_queries = 0 ,
757+ .num_buckets = 0 ,
758+ .sum_gauges = NAN ,
759+ },
760+ {
761+ .input_dist = dist_test1 ,
762+ .num_queries = 11 ,
763+ .gauges = (double []){1 , 2 , 3 , 5 , 10 , 90 , 8 , 45 , 44 , 41.45 , 40.5 },
764+ .num_buckets = 10 ,
765+ .counters = (uint64_t []){3 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 9 , 11 },
766+ .sum_gauges = 0 ,
767+ },
768+ {
769+ .input_dist = dist_test2 ,
770+ .num_queries = 16 ,
771+ .gauges =
772+ (double []){1.5 , 1.23 , 1.67 , 2 , 24.532 , 25 , 28.43 , 98.43 , 10.43 ,
773+ 7.53 , 11.235 , 4.43256 , 7.432 , 3 , 3.01 , 2.98 },
774+ .num_buckets = 8 ,
775+ .counters = (uint64_t []){3 , 5 , 8 , 8 , 10 , 12 , 12 , 16 },
776+ .sum_gauges = 29.863 ,
777+ },
778+ {
779+ .input_dist = dist_test3 ,
780+ .num_queries = 15 ,
781+ .gauges = (double []){0 , 0.65 , 0.7 , 0.99 , 0.999999 , 1 , 2.65 , 3 , 3.1123 ,
782+ 10.923 , 90.432 , 145.90 , 144 , 143.999999 , 190 },
783+ .num_buckets = 12 ,
784+ .counters = (uint64_t []){5 , 6 , 7 , 9 , 9 , 10 , 10 , 10 , 10 , 10 , 12 , 15 },
785+ .sum_gauges = 120.286546 ,
786+ }};
787+
788+ for (size_t i = 0 ; i < (sizeof (cases ) / sizeof (cases [0 ])); ++ i ) {
789+ printf ("## Case %zu:\n" , i );
790+
791+ for (int j = 0 ; j < cases [i ].num_queries ; ++ j ) {
792+ // EXPECT_EQ_INT(cases[i].status_codes[j],
793+ distribution_update (cases [i ].input_dist , cases [i ].gauges [j ]);
794+ }
795+
796+ EXPECT_EQ_UINT64 (cases [i ].num_buckets ,
797+ distribution_get_num_buckets (cases [i ].input_dist ));
798+
799+ uint64_t * counters = distribution_get_buckets_counters (cases [i ].input_dist );
800+
801+ if (cases [i ].counters == NULL ) {
802+ EXPECT_EQ_PTR (cases [i ].counters , counters );
803+ } else {
804+ CHECK_NOT_NULL (counters );
805+ for (size_t j = 0 ; j < cases [i ].num_buckets ; ++ j ) {
806+ EXPECT_EQ_UINT64 (cases [i ].counters [j ], counters [j ]);
807+ }
808+ free (counters );
809+ }
810+
811+ //double sum = distribution_get_sum_gauges(cases[i].input_dist);
812+ //EXPECT_EQ_DOUBLE(cases[i].sum_gauges, sum);
813+ distribution_destroy (cases [i ].input_dist );
814+ }
815+
816+ return 0 ;
817+ }
818+
736819int main (void ) {
737820 RUN_TEST (distribution_new_linear );
738821 RUN_TEST (distribution_new_exponential );
@@ -743,5 +826,6 @@ int main(void) {
743826 RUN_TEST (distribution_clone );
744827 RUN_TEST (distribution_get_num_buckets );
745828 RUN_TEST (distribution_get_buckets_boundaries );
829+ RUN_TEST (distribution_get_buckets_counters );
746830 END_TEST ;
747831}
0 commit comments