29 #include <gtest/gtest-spi.h>
30 #include <gtest/gtest.h>
70 bool check()
const override {
return true; }
73 bool zero()
const override {
return true; }
78 TEST(StatsStatStorTest, SetValueResult)
95 TEST(StatsStatStorTest, Prepare)
108 TEST(StatsStatStorTest, IncDec)
136 TEST(StatsStatStorTest, ZeroReset)
141 ASSERT_TRUE(stor.
zero());
144 ASSERT_TRUE(stor.
zero());
148 ASSERT_FALSE(stor.
zero());
152 TEST(StatsAvgStorTest, SetValueResult)
186 ASSERT_DEATH(stor.result(),
".+");
194 TEST(StatsAvgStorTest, Prepare)
252 TEST(StatsAvgStorTest, ZeroReset)
257 ASSERT_TRUE(stor.
zero());
260 ASSERT_TRUE(stor.
zero());
268 ASSERT_FALSE(stor.
zero());
273 TEST(StatsDistStorDeathTest, BucketSize0)
275 testing::internal::CaptureStderr();
277 testing::internal::GetCapturedStderr();
286 TEST(StatsDistStorTest, ZeroReset)
294 ASSERT_TRUE(stor.
zero());
298 ASSERT_FALSE(stor.
zero());
301 ASSERT_TRUE(stor.
zero());
319 ASSERT_EQ(stor.
size(), size);
321 ASSERT_EQ(stor.
size(), size);
323 ASSERT_EQ(stor.
size(), size);
325 ASSERT_EQ(stor.
size(), size);
327 ASSERT_EQ(stor.
size(), size);
341 ASSERT_EQ(
data.type, expected_data.
type);
342 ASSERT_EQ(
data.min, expected_data.
min);
343 ASSERT_EQ(
data.max, expected_data.
max);
347 ASSERT_EQ(
data.sum, expected_data.
sum);
350 ASSERT_EQ(
data.logs, expected_data.
logs);
353 ASSERT_EQ(
data.cvec.size(), expected_data.
cvec.size());
354 for (
int i = 0;
i < expected_data.
cvec.size();
i++) {
355 ASSERT_EQ(
data.cvec[
i], expected_data.
cvec[
i]);
379 expected_data.
min = params.
min;
380 expected_data.
max = params.
max;
381 expected_data.
sum = 0;
383 expected_data.
logs = 0;
387 for (
int i = 0;
i < num_values;
i++) {
388 stor.
sample(values[
i].value, values[
i].numSamples);
402 TEST(StatsDistStorTest, SamplePrepareSingle)
417 expected_data.
cvec.clear();
419 expected_data.
cvec[2] = 5;
425 TEST(StatsDistStorTest, SamplePrepareMultiple)
435 ValueSamples values[] = {{10, 5}, {1234, 2}, {12345678, 99}, {-10, 4},
436 {17, 17}, {52, 63}, {18, 11}, {0, 1}, {99, 15}, {-1, 200}, {100, 50}};
443 expected_data.
max_val = 12345678;
447 expected_data.
sum = 0;
450 expected_data.
cvec.clear();
452 expected_data.
cvec[0] = 1;
453 expected_data.
cvec[2] = 5;
454 expected_data.
cvec[3] = 17+11;
455 expected_data.
cvec[10] = 63;
456 expected_data.
cvec[19] = 15;
469 ValueSamples values[] = {{10, 5}, {1234, 2}, {12345678, 99}, {-10, 4},
470 {17, 17}, {52, 63}, {18, 11}, {0, 1}, {99, 15}, {-1, 200}, {100, 50}};
472 for (
int i = 0;
i < num_values;
i++) {
473 stor.
sample(values[
i].value, values[
i].numSamples);
486 expected_data.
min = params.
min;
487 expected_data.
max = params.
max;
490 expected_data.
sum = 0;
493 expected_data.
cvec.clear();
501 TEST(StatsHistStorDeathTest, NotEnoughBuckets0)
503 testing::internal::CaptureStderr();
505 testing::internal::GetCapturedStderr();
509 TEST(StatsHistStorDeathTest, NotEnoughBuckets1)
511 testing::internal::CaptureStderr();
513 testing::internal::GetCapturedStderr();
522 TEST(StatsHistStorTest, ZeroReset)
530 ASSERT_TRUE(stor.
zero());
534 ASSERT_FALSE(stor.
zero());
537 ASSERT_TRUE(stor.
zero());
556 ASSERT_EQ(stor.
size(), sizes[
i]);
558 ASSERT_EQ(stor.
size(), sizes[
i]);
560 ASSERT_EQ(stor.
size(), sizes[
i]);
562 ASSERT_EQ(stor.
size(), sizes[
i]);
564 ASSERT_EQ(stor.
size(), sizes[
i]);
591 expected_data.
sum = 0;
593 expected_data.
logs = 0;
597 for (
int i = 0;
i < num_values;
i++) {
598 stor.
sample(values[
i].value, values[
i].numSamples);
603 if (values[
i].value < 0) {
607 expected_data.
logs +=
620 TEST(StatsHistStorTest, SamplePrepareFit)
627 ValueSamples values[] = {{0, 5}, {1, 2}, {2, 99}, {3, 4}};
628 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
632 expected_data.
min = 0;
634 expected_data.
cvec.clear();
636 expected_data.
cvec[0] = 5;
637 expected_data.
cvec[1] = 2;
638 expected_data.
cvec[2] = 99;
639 expected_data.
cvec[3] = 4;
648 TEST(StatsHistStorTest, SamplePrepareSingleGrowUp)
656 ValueSamples values[] = {{0, 5}, {1, 2}, {2, 99}, {4, 4}};
657 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
661 expected_data.
min = 0;
663 expected_data.
cvec.clear();
665 expected_data.
cvec[0] = 5+2;
666 expected_data.
cvec[1] = 99;
667 expected_data.
cvec[2] = 4;
668 expected_data.
cvec[3] = 0;
677 TEST(StatsHistStorTest, SamplePrepareMultipleGrowUp)
685 ValueSamples values[] = {{0, 5}, {1, 2}, {2, 99}, {16, 4}};
686 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
690 expected_data.
min = 0;
692 expected_data.
cvec.clear();
694 expected_data.
cvec[0] = 5+2+99;
695 expected_data.
cvec[1] = 0;
696 expected_data.
cvec[2] = 4;
697 expected_data.
cvec[3] = 0;
707 TEST(StatsHistStorTest, SamplePrepareGrowDownOddBuckets)
716 {{0, 5}, {1, 2}, {2, 99}, {3, 12}, {4, 33}, {-1, 4}};
717 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
721 expected_data.
min = -4;
723 expected_data.
cvec.clear();
725 expected_data.
cvec[0] = 0;
726 expected_data.
cvec[1] = 4;
727 expected_data.
cvec[2] = 5+2;
728 expected_data.
cvec[3] = 99+12;
729 expected_data.
cvec[4] = 33;
739 TEST(StatsHistStorTest, SamplePrepareGrowDownEvenBuckets)
747 ValueSamples values[] = {{0, 5}, {1, 2}, {2, 99}, {-1, 4}};
748 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
752 expected_data.
min = -4;
754 expected_data.
cvec.clear();
756 expected_data.
cvec[0] = 0;
757 expected_data.
cvec[1] = 4;
758 expected_data.
cvec[2] = 5+2;
759 expected_data.
cvec[3] = 99;
769 TEST(StatsHistStorTest, SamplePrepareGrowDownGrowOutOddBuckets)
778 {{0, 5}, {1, 2}, {2, 99}, {3, 12}, {4, 33}, {-12, 4}};
779 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
783 expected_data.
min = -16;
785 expected_data.
cvec.clear();
787 expected_data.
cvec[0] = 4;
788 expected_data.
cvec[1] = 0;
789 expected_data.
cvec[2] = 5+2+99+12+33;
790 expected_data.
cvec[3] = 0;
791 expected_data.
cvec[4] = 0;
801 TEST(StatsHistStorTest, SamplePrepareGrowDownGrowOutEvenBuckets)
810 {{0, 5}, {1, 2}, {2, 99}, {3, 12}, {-12, 4}};
811 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
815 expected_data.
min = -16;
817 expected_data.
cvec.clear();
819 expected_data.
cvec[0] = 4;
820 expected_data.
cvec[1] = 0;
821 expected_data.
cvec[2] = 5+2+99+12;
822 expected_data.
cvec[3] = 0;
832 TEST(StatsHistStorTest, SamplePrepareMultipleGrowOddBuckets)
842 {{0, 5}, {7, 2}, {31, 99}, {-8, 12}, {127, 4}, {-120, 53}, {-50, 1}};
843 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
847 expected_data.
min = -128;
849 expected_data.
cvec.clear();
851 expected_data.
cvec[0] = 53;
852 expected_data.
cvec[1] = 12+1;
853 expected_data.
cvec[2] = 5+2+99;
854 expected_data.
cvec[3] = 4;
855 expected_data.
cvec[4] = 0;
865 TEST(StatsHistStorTest, SamplePrepareMultipleGrowEvenBuckets)
874 {{0, 5}, {7, 2}, {31, 99}, {-8, 12}, {127, 4}, {-120, 53}, {-50, 1}};
875 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
879 expected_data.
min = -128;
881 expected_data.
cvec.clear();
883 expected_data.
cvec[0] = 53;
884 expected_data.
cvec[1] = 12+1;
885 expected_data.
cvec[2] = 5+2+99;
886 expected_data.
cvec[3] = 4;
903 {{0, 5}, {7, 2}, {31, 99}, {-8, 12}, {127, 4}, {-120, 53}, {-50, 1}};
904 const int num_values =
sizeof(values) /
sizeof(
ValueSamples);
905 for (
int i = 0;
i < num_values;
i++) {
906 stor.
sample(values[
i].value, values[
i].numSamples);
915 expected_data.
min = 0;
917 expected_data.
cvec.clear();
924 TEST(StatsHistStorDeathTest, AddDifferentSize)
934 ASSERT_DEATH(stor.add(&stor2),
".+");
938 TEST(StatsHistStorDeathTest, AddDifferentMin)
950 ASSERT_DEATH(stor.add(&stor2),
".+");
963 ValueSamples values[] = {{0, 5}, {3, 2}, {20, 37}, {32, 18}};
965 for (
int i = 0;
i < num_values;
i++) {
966 stor.
sample(values[
i].value, values[
i].numSamples);
974 ValueSamples values2[] = {{10, 10}, {0, 1}, {80, 4}, {17, 100}, {95, 79}};
975 int num_values2 =
sizeof(values2) /
sizeof(
ValueSamples);
976 for (
int i = 0;
i < num_values2;
i++) {
977 stor2.
sample(values2[
i].value, values2[
i].numSamples);
985 stor.
prepare(&info, merge_data);
992 expected_data.
min = 0;
993 expected_data.
max = 127;
996 expected_data.
cvec.clear();
998 expected_data.
cvec[0] = 5+2+37+10+1+100;
999 expected_data.
cvec[1] = 18;
1000 expected_data.
cvec[2] = 4+79;
1001 expected_data.
cvec[3] = 0;
1016 TEST(StatsSampleStorTest, ZeroReset)
1022 ASSERT_TRUE(stor.
zero());
1024 stor.
reset(
nullptr);
1026 ASSERT_FALSE(stor.
zero());
1028 stor.
reset(
nullptr);
1029 ASSERT_TRUE(stor.
zero());
1033 TEST(StatsSampleStorTest, SamplePrepare)
1036 ValueSamples values[] = {{10, 5}, {1234, 2}, {0xFFFFFFFF, 18}};
1037 int num_values =
sizeof(values) /
sizeof(
ValueSamples);
1045 stor.
sample(values[0].value, values[0].numSamples);
1052 ASSERT_EQ(
data.type, expected_data.
type);
1053 ASSERT_EQ(
data.sum, expected_data.
sum);
1058 expected_data.
sum = 0;
1061 stor.
reset(
nullptr);
1063 ASSERT_EQ(
data.type, expected_data.
type);
1064 ASSERT_EQ(
data.sum, expected_data.
sum);
1069 for (
int i = 0;
i < num_values;
i++) {
1070 stor.
sample(values[
i].value, values[
i].numSamples);
1073 expected_data.
sum +=
val;
1078 ASSERT_EQ(
data.type, expected_data.
type);
1079 ASSERT_EQ(
data.sum, expected_data.
sum);
1094 ASSERT_EQ(stor.
size(), 1);
1096 ASSERT_EQ(stor.
size(), 1);
1098 ASSERT_EQ(stor.
size(), 1);
1099 stor.
reset(
nullptr);
1100 ASSERT_EQ(stor.
size(), 1);
1102 ASSERT_EQ(stor.
size(), 1);
1110 TEST(StatsAvgSampleStorTest, ZeroReset)
1116 ASSERT_TRUE(stor.
zero());
1118 stor.
reset(
nullptr);
1120 ASSERT_FALSE(stor.
zero());
1122 stor.
reset(
nullptr);
1123 ASSERT_TRUE(stor.
zero());
1127 TEST(StatsAvgSampleStorTest, SamplePrepare)
1130 ValueSamples values[] = {{10, 5}, {1234, 2}, {0xFFFFFFFF, 18}};
1131 int num_values =
sizeof(values) /
sizeof(
ValueSamples);
1139 stor.
sample(values[0].value, values[0].numSamples);
1145 ASSERT_EQ(
data.type, expected_data.
type);
1146 ASSERT_EQ(
data.sum, expected_data.
sum);
1153 expected_data.
sum = 0;
1155 stor.
reset(
nullptr);
1157 ASSERT_EQ(
data.type, expected_data.
type);
1158 ASSERT_EQ(
data.sum, expected_data.
sum);
1165 for (
int i = 0;
i < num_values;
i++) {
1166 stor.
sample(values[
i].value, values[
i].numSamples);
1169 expected_data.
sum +=
val;
1173 ASSERT_EQ(
data.type, expected_data.
type);
1174 ASSERT_EQ(
data.sum, expected_data.
sum);
1189 ASSERT_EQ(stor.
size(), 1);
1191 ASSERT_EQ(stor.
size(), 1);
1193 ASSERT_EQ(stor.
size(), 1);
1194 stor.
reset(
nullptr);
1195 ASSERT_EQ(stor.
size(), 1);
1197 ASSERT_EQ(stor.
size(), 1);
1205 TEST(StatsSparseHistStorTest, ZeroReset)
1211 ASSERT_TRUE(stor.
zero());
1213 stor.
reset(
nullptr);
1215 ASSERT_FALSE(stor.
zero());
1217 stor.
reset(
nullptr);
1218 ASSERT_TRUE(stor.
zero());
1222 TEST(StatsSparseHistStorTest, SamplePrepare)
1225 ValueSamples values[] = {{10, 5}, {1234, 2}, {0xFFFFFFFF, 18}};
1226 int num_values =
sizeof(values) /
sizeof(
ValueSamples);
1231 stor.
sample(values[0].value, values[0].numSamples);
1233 ASSERT_EQ(stor.
size(), 1);
1234 ASSERT_EQ(
data.cmap.size(), 1);
1239 stor.
reset(
nullptr);
1241 ASSERT_EQ(stor.
size(), 0);
1242 ASSERT_EQ(
data.cmap.size(), 0);
1243 ASSERT_EQ(
data.samples, 0);
1246 for (
int i = 0;
i < num_values;
i++) {
1247 stor.
sample(values[
i].value, values[
i].numSamples);
1251 ASSERT_EQ(stor.
size(), num_values);
1252 ASSERT_EQ(
data.cmap.size(), num_values);
1253 for (
int i = 0;
i < num_values;
i++) {
1257 ASSERT_EQ(
data.samples, total_samples);