diff --git a/tests/library/call-queue-test.cpp b/tests/library/call-queue-test.cpp index cc0b73cf7..aae3462ed 100644 --- a/tests/library/call-queue-test.cpp +++ b/tests/library/call-queue-test.cpp @@ -32,7 +32,6 @@ #include "lib/call-queue.hpp" #include -//#include #include @@ -46,8 +45,43 @@ namespace test{ - namespace { // test data - } + namespace { // test fixture + + uint calc_sum = 0; + uint ctor_sum = 0; + uint dtor_sum = 0; + + template + struct Dummy + { + uint val_; + + Dummy() + : val_(i) + { + ctor_sum += (val_+1); + } + + ~Dummy() + { + dtor_sum += val_; + } + + int + operator++() + { + return ++val_; + } + }; + + template + void + increment (Dummy&& dummy) //NOTE: dummy is consumed here + { + calc_sum += ++dummy; + } + + }//(End) test fixture @@ -94,10 +128,41 @@ namespace test{ } + /** + * @test consistency of queue data handling + * - functors of various types can be mixed + * - entries are moved in and out of the queue + * - no copying whatsoever happens + * - each entry gets invoked + * - all entries are invoked in order + * - enqueuing and dequeuing can be interspersed + * - no memory leaks in bound argument data + */ void verify_Consistency () { - UNIMPLEMENTED("verify_Consistency"); + calc_sum = 0; + ctor_sum = 0; + dtor_sum = 0; + + CallQueue queue; + queue.feed ([]() { increment(Dummy<0>{}); }); //NOTE: each lambda binds a different instantiation of the increment template + queue.feed ([]() { increment(Dummy<1>{}); }); // and each invocation closes over an anonymous rvalue instance + queue.feed ([]() { increment(Dummy<2>{}); }); + + queue.invoke(); + queue.invoke(); + queue.feed ([]() { increment(Dummy<3>{}); }); + queue.feed ([]() { increment(Dummy<4>{}); }); + + queue.invoke(); + queue.invoke(); + queue.invoke(); + + uint expected = (5+1)*5/2; + CHECK (calc_sum = expected); + CHECK (ctor_sum = expected); + CHECK (dtor_sum = expected); } diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 2c1fd309a..3c644290e 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -1024,8 +1024,8 @@ - - + + @@ -1049,8 +1049,12 @@ - - + + + + + +