@@ -658,7 +658,7 @@ DEF_TEST(distribution_get_num_buckets) {
658
658
}
659
659
660
660
DEF_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 );
662
662
distribution_t * dist_test2 = distribution_new_exponential (14 , 1.5 , 4 );
663
663
distribution_t * dist_test3 = distribution_new_custom (
664
664
28 ,
@@ -675,43 +675,47 @@ DEF_TEST(distribution_get_buckets_boundaries) {
675
675
int num_buckets ;
676
676
double * want_boundaries ;
677
677
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
+ }};
709
712
710
713
for (size_t i = 0 ; i < (sizeof (cases ) / sizeof (cases [0 ])); ++ i ) {
711
714
EXPECT_EQ_UINT64 (cases [i ].num_buckets ,
712
715
distribution_get_num_buckets (cases [i ].input_dist ));
713
716
714
- double * boundaries = distribution_get_buckets_boundaries (cases [i ].input_dist );
717
+ double * boundaries =
718
+ distribution_get_buckets_boundaries (cases [i ].input_dist );
715
719
716
720
if (cases [i ].want_boundaries == NULL ) {
717
721
EXPECT_EQ_PTR (cases [i ].want_boundaries , boundaries );
@@ -733,6 +737,85 @@ DEF_TEST(distribution_get_buckets_boundaries) {
733
737
return 0 ;
734
738
}
735
739
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
+
736
819
int main (void ) {
737
820
RUN_TEST (distribution_new_linear );
738
821
RUN_TEST (distribution_new_exponential );
@@ -743,5 +826,6 @@ int main(void) {
743
826
RUN_TEST (distribution_clone );
744
827
RUN_TEST (distribution_get_num_buckets );
745
828
RUN_TEST (distribution_get_buckets_boundaries );
829
+ RUN_TEST (distribution_get_buckets_counters );
746
830
END_TEST ;
747
831
}
0 commit comments