X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Ftest%2Fcommon%2Fhistogram.cc;fp=src%2Fceph%2Fsrc%2Ftest%2Fcommon%2Fhistogram.cc;h=765f4c97debf25cddb9d6a06acc8e4361defe8ed;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/test/common/histogram.cc b/src/ceph/src/test/common/histogram.cc new file mode 100644 index 0000000..765f4c9 --- /dev/null +++ b/src/ceph/src/test/common/histogram.cc @@ -0,0 +1,129 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2014 Inktank + * + * LGPL2.1 (see COPYING-LGPL2.1) or later + */ + +#include +#include + +#include "common/histogram.h" +#include "include/stringify.h" + +TEST(Histogram, Basic) { + pow2_hist_t h; + + h.add(0); + h.add(0); + h.add(0); + ASSERT_EQ(3, h.h[0]); + ASSERT_EQ(1u, h.h.size()); + + h.add(1); + ASSERT_EQ(3, h.h[0]); + ASSERT_EQ(1, h.h[1]); + ASSERT_EQ(2u, h.h.size()); + + h.add(2); + h.add(2); + ASSERT_EQ(3, h.h[0]); + ASSERT_EQ(1, h.h[1]); + ASSERT_EQ(2, h.h[2]); + ASSERT_EQ(3u, h.h.size()); +} + +TEST(Histogram, Set) { + pow2_hist_t h; + h.set_bin(0, 12); + h.set_bin(2, 12); + ASSERT_EQ(12, h.h[0]); + ASSERT_EQ(0, h.h[1]); + ASSERT_EQ(12, h.h[2]); + ASSERT_EQ(3u, h.h.size()); +} + +TEST(Histogram, Position) { + pow2_hist_t h; + uint64_t lb, ub; + h.add(0); + ASSERT_EQ(-1, h.get_position_micro(-20, &lb, &ub)); +} + +TEST(Histogram, Position1) { + pow2_hist_t h; + h.add(0); + uint64_t lb, ub; + h.get_position_micro(0, &lb, &ub); + ASSERT_EQ(0u, lb); + ASSERT_EQ(1000000u, ub); + h.add(0); + h.add(0); + h.add(0); + h.get_position_micro(0, &lb, &ub); + ASSERT_EQ(0u, lb); + ASSERT_EQ(1000000u, ub); +} + +TEST(Histogram, Position2) { + pow2_hist_t h; + h.add(1); + h.add(1); + uint64_t lb, ub; + h.get_position_micro(0, &lb, &ub); + ASSERT_EQ(0u, lb); + ASSERT_EQ(0u, ub); + h.add(0); + h.get_position_micro(0, &lb, &ub); + ASSERT_EQ(0u, lb); + ASSERT_EQ(333333u, ub); + h.get_position_micro(1, &lb, &ub); + ASSERT_EQ(333333u, lb); + ASSERT_EQ(1000000u, ub); +} + +TEST(Histogram, Position3) { + pow2_hist_t h; + h.h.resize(10, 0); + h.h[0] = 1; + h.h[5] = 1; + uint64_t lb, ub; + h.get_position_micro(4, &lb, &ub); + ASSERT_EQ(500000u, lb); + ASSERT_EQ(500000u, ub); +} + +TEST(Histogram, Position4) { + pow2_hist_t h; + h.h.resize(10, 0); + h.h[0] = UINT_MAX; + h.h[5] = UINT_MAX; + uint64_t lb, ub; + h.get_position_micro(4, &lb, &ub); + ASSERT_EQ(0u, lb); + ASSERT_EQ(0u, ub); +} + +TEST(Histogram, Decay) { + pow2_hist_t h; + h.set_bin(0, 123); + h.set_bin(3, 12); + h.set_bin(5, 1); + h.decay(1); + ASSERT_EQ(61, h.h[0]); + ASSERT_EQ(6, h.h[3]); + ASSERT_EQ(4u, h.h.size()); +} + +/* + * Local Variables: + * compile-command: "cd ../.. ; make -j4 && + * make unittest_histogram && + * valgrind --tool=memcheck --leak-check=full \ + * ./unittest_histogram + * " + * End: + */