From fbd87787aa90227e70d5d716ca95f4338e3a4673 Mon Sep 17 00:00:00 2001 From: Denis Blank Date: Sat, 10 Feb 2018 01:37:38 +0100 Subject: [PATCH] Add a unit test which was removed in the original version * Because unfinished traversals weren't allowed there. --- .../test-continuable-traverse-async.cpp | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/test/unit-test/single/test-continuable-traverse-async.cpp b/test/unit-test/single/test-continuable-traverse-async.cpp index 1b02ee5..a34e90c 100644 --- a/test/unit-test/single/test-continuable-traverse-async.cpp +++ b/test/unit-test/single/test-continuable-traverse-async.cpp @@ -123,6 +123,36 @@ struct async_increasing_int_visitor } }; +template +struct async_increasing_int_interrupted_visitor + : async_counter_base> { + + bool operator()(async_traverse_visit_tag, std::size_t i) { + EXPECT_EQ(i, this->counter()); + ++this->counter(); + + // Detach the control flow at the second step + return i == 0; + } + + template + void operator()(async_traverse_detach_tag, std::size_t i, N&& next) { + EXPECT_EQ(i, 1U); + EXPECT_EQ(this->counter(), 2U); + + // Don't call next here + unused(next); + } + + template + void operator()(async_traverse_complete_tag, T&& pack) const { + unused(pack); + + // Will never be called + FAIL(); + } +}; + template void test_async_traversal_base(Args&&... args) { // Test that every element is traversed in the correct order @@ -140,6 +170,14 @@ void test_async_traversal_base(Args&&... args) { traverse_pack_async(async_increasing_int_visitor{}, args...); EXPECT_EQ(result->counter(), ArgCount + 1U); } + + // Test that the first element is traversed only, + // if we don't call the resume continuation. + { + auto result = traverse_pack_async( + async_increasing_int_interrupted_visitor{}, args...); + EXPECT_EQ(result->counter(), 2U); + } } TEST(async_traversal, base) {