initial code repo
[stor4nfv.git] / src / ceph / src / test / old / testcounter.cc
diff --git a/src/ceph/src/test/old/testcounter.cc b/src/ceph/src/test/old/testcounter.cc
new file mode 100644 (file)
index 0000000..66068e4
--- /dev/null
@@ -0,0 +1,70 @@
+
+#include "common/DecayCounter.h"
+
+#include <list>
+using namespace std;
+
+struct RealCounter {
+public:
+  list<int> hits;
+  
+  void hit(int ms) {
+       hits.push_back(ms);
+  }
+  
+  int get(double hl, int now) {
+       trim(now-hl);
+       return hits.size();
+  }
+
+  void trim(int to) {
+       while (!hits.empty() &&
+                  hits.front() < to) 
+         hits.pop_front();
+  }
+
+};
+
+int main(int argc, char **argv)
+{
+  int target;
+  double hl = atof(argv[1]);
+  cerr << "halflife " << hl << endl;
+
+  DecayCounter dc(hl);
+  RealCounter rc;
+
+  utime_t now = ceph_clock_now();
+
+  for (int ms=0; ms < 300*1000; ms++) {
+       if (ms % 30000 == 0) {
+         target = 1 + (rand() % 10) * 10;
+         if (ms > 200000) target = 0;
+       }
+
+       if (target &&
+               (rand() % (1000/target) == 0)) {
+         dc.hit();
+         rc.hit(ms);
+       }
+
+       if (ms % 500 == 0) dc.get(now);
+       if (ms % 100 == 0) {
+         //dc.get(now);
+         DecayCounter o = dc;
+         cout << ms << "\t"
+                  << target*hl << "\t"
+                  << rc.get(hl*1000, ms) << "\t"
+                  << o.get(now) << "\t" 
+                  << dc.val << "\t"
+               //                 << dc.delta << "\t"
+                  << o.get_last_vel() << "\t"
+                  << o.get_last() + o.get_last_vel() << "\t"
+                  << endl;
+       }
+
+       now += .001;
+  }
+
+}