X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fdmclock%2Fsupport%2Ftest%2Ftest_ind_intru_heap.cc;fp=src%2Fceph%2Fsrc%2Fdmclock%2Fsupport%2Ftest%2Ftest_ind_intru_heap.cc;h=9ec03b5cacff57bafa3ae9658792dbc2e1fe382c;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/dmclock/support/test/test_ind_intru_heap.cc b/src/ceph/src/dmclock/support/test/test_ind_intru_heap.cc new file mode 100644 index 0000000..9ec03b5 --- /dev/null +++ b/src/ceph/src/dmclock/support/test/test_ind_intru_heap.cc @@ -0,0 +1,82 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +/* + * Copyright (C) 2016 Red Hat Inc. + */ + + +#include +#include +#include + +#include "indirect_intrusive_heap.h" + + +class TestCompare; + + +class Test1 { + friend TestCompare; + + int data; + +public: + + crimson::IndIntruHeapData heap_data; + + Test1(int _data) : data(_data) {} + + friend std::ostream& operator<<(std::ostream& out, const Test1& d) { + out << d.data << " (" << d.heap_data << ")"; + return out; + } + + int& the_data() { return data; } +}; + + +struct TestCompare { + bool operator()(const Test1& d1, const Test1& d2) { + return d1.data < d2.data; + } +}; + + +int main(int argc, char** argv) { + Test1 d1(2); + Test1 d2(3); + Test1 d3(1); + Test1 d4(-5); + + crimson::IndIntruHeap, Test1, &Test1::heap_data, TestCompare> my_heap; + + const std::shared_ptr d99 = std::make_shared(99); + + my_heap.push(std::make_shared(2)); + my_heap.push(d99); + my_heap.push(std::make_shared(1)); + my_heap.push(std::make_shared(-5)); + my_heap.push(std::make_shared(12)); + my_heap.push(std::make_shared(-12)); + my_heap.push(std::make_shared(-7)); + + std::cout << my_heap << std::endl; + + auto& t = my_heap.top(); + t.the_data() = 17; + my_heap.adjust_down(t); + + std::cout << my_heap << std::endl; + + my_heap.display_sorted(std::cout); + + while (!my_heap.empty()) { + auto& top = my_heap.top(); + std::cout << top << std::endl; + my_heap.pop(); + std::cout << my_heap << std::endl; + } + + return 0; +}