update TimeseriesHistogram::rate to return a template type
[folly.git] / folly / test / TimeseriesHistogramTest.cpp
index e106e88134f848bdb27d3d4763ca0a35366c12b3..3cb5ce8bedb0c71617aaf40c7c3e0c1794d03fb7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2016 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,8 @@
 #include <folly/stats/TimeseriesHistogram.h>
 #include <folly/stats/TimeseriesHistogram-defs.h>
 
+#include <random>
+
 #include <gtest/gtest.h>
 
 using namespace std;
@@ -218,6 +220,50 @@ TEST(TimeseriesHistogram, Basic) {
     EXPECT_EQ(0, hist.getBucket(0).count(IntMTMHTS::MINUTE));
     EXPECT_EQ(0, hist.getBucket(hist.getNumBuckets() - 1).count(
                 IntMTMHTS::MINUTE));
+
+    EXPECT_EQ(6000, hist.count(IntMTMHTS::MINUTE));
+    EXPECT_EQ(60000, hist.count(IntMTMHTS::TEN_MINUTE));
+    EXPECT_EQ(360000, hist.count(IntMTMHTS::HOUR));
+    EXPECT_EQ(360000, hist.count(IntMTMHTS::ALLTIME));
+
+    // Each second we added 4950 total over 100 data points
+    EXPECT_EQ(297000, hist.sum(IntMTMHTS::MINUTE));
+    EXPECT_EQ(2970000, hist.sum(IntMTMHTS::TEN_MINUTE));
+    EXPECT_EQ(17820000, hist.sum(IntMTMHTS::HOUR));
+    EXPECT_EQ(17820000, hist.sum(IntMTMHTS::ALLTIME));
+
+    EXPECT_EQ(49, hist.avg<int>(IntMTMHTS::MINUTE));
+    EXPECT_EQ(49, hist.avg<int>(IntMTMHTS::TEN_MINUTE));
+    EXPECT_EQ(49, hist.avg<int>(IntMTMHTS::HOUR));
+    EXPECT_EQ(49, hist.avg<int>(IntMTMHTS::ALLTIME));
+    EXPECT_EQ(49.5, hist.avg<double>(IntMTMHTS::MINUTE));
+    EXPECT_EQ(49.5, hist.avg<double>(IntMTMHTS::TEN_MINUTE));
+    EXPECT_EQ(49.5, hist.avg<double>(IntMTMHTS::HOUR));
+    EXPECT_EQ(49.5, hist.avg<double>(IntMTMHTS::ALLTIME));
+
+    EXPECT_EQ(4950, hist.rate<int>(IntMTMHTS::MINUTE));
+    EXPECT_EQ(4950, hist.rate<int>(IntMTMHTS::TEN_MINUTE));
+    EXPECT_EQ(4950, hist.rate<int>(IntMTMHTS::HOUR));
+    EXPECT_EQ(4950, hist.rate<int>(IntMTMHTS::ALLTIME));
+    EXPECT_EQ(4950, hist.rate<double>(IntMTMHTS::MINUTE));
+    EXPECT_EQ(4950, hist.rate<double>(IntMTMHTS::TEN_MINUTE));
+    EXPECT_EQ(4950, hist.rate<double>(IntMTMHTS::HOUR));
+    EXPECT_EQ(4950, hist.rate<double>(IntMTMHTS::ALLTIME));
+
+    EXPECT_EQ(1000, hist.count(seconds(10), seconds(20)));
+    EXPECT_EQ(49500, hist.sum(seconds(10), seconds(20)));
+    EXPECT_EQ(4950, hist.rate(seconds(10), seconds(20)));
+    EXPECT_EQ(49.5, hist.avg<double>(seconds(10), seconds(20)));
+
+    EXPECT_EQ(200, hist.count(seconds(3550), seconds(3552)));
+    EXPECT_EQ(9900, hist.sum(seconds(3550), seconds(3552)));
+    EXPECT_EQ(4950, hist.rate(seconds(3550), seconds(3552)));
+    EXPECT_EQ(49.5, hist.avg<double>(seconds(3550), seconds(3552)));
+
+    EXPECT_EQ(0, hist.count(seconds(4550), seconds(4552)));
+    EXPECT_EQ(0, hist.sum(seconds(4550), seconds(4552)));
+    EXPECT_EQ(0, hist.rate(seconds(4550), seconds(4552)));
+    EXPECT_EQ(0, hist.avg<double>(seconds(4550), seconds(4552)));
   }
 
   // -----------------
@@ -428,7 +474,6 @@ TEST(TimeseriesHistogram, QueryByInterval) {
 
   for (int i = 0; i < 12; i++) {
     const auto& itv = intervals[i];
-    int c = mhts.count(itv.start, itv.end);
     // Some of the older intervals that fall in the alltime bucket
     // are off by 1 or 2 in their estimated counts.
     size_t tolerance = 0;
@@ -484,4 +529,3 @@ TEST(TimeseriesHistogram, SingleUniqueValue) {
     }
   }
 }
-