From b1acbb01c444dbdef2672ee74c27e395da0e6315 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 10 Jun 2021 14:21:01 +0800 Subject: [PATCH] test/crimson: add test case for errorator parallel_for_each Signed-off-by: Xuehan Xu --- src/test/crimson/test_errorator.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/crimson/test_errorator.cc b/src/test/crimson/test_errorator.cc index ad1223295a16d..8e4f09795fc81 100644 --- a/src/test/crimson/test_errorator.cc +++ b/src/test/crimson/test_errorator.cc @@ -1,10 +1,14 @@ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*- // vim: ts=8 sw=2 smarttab +#include +#include + #include "test/crimson/gtest_seastar.h" #include "crimson/common/errorator.h" #include "crimson/common/log.h" +#include "seastar/core/sleep.hh" struct errorator_test_t : public seastar_test_suite_t { using ertr = crimson::errorator; @@ -18,6 +22,21 @@ struct errorator_test_t : public seastar_test_suite_t { } }); } + static constexpr int SIZE = 42; + ertr::future<> test_parallel_for_each() { + auto sum = std::make_unique(0); + return ertr::parallel_for_each( + boost::make_counting_iterator(0), + boost::make_counting_iterator(SIZE), + [sum=sum.get()](int i) { + *sum += i; + }).safe_then([sum=std::move(sum)] { + int expected = std::accumulate(boost::make_counting_iterator(0), + boost::make_counting_iterator(SIZE), + 0); + ASSERT_EQ(*sum, expected); + }); + } struct noncopyable_t { constexpr noncopyable_t() = default; ~noncopyable_t() = default; @@ -55,6 +74,13 @@ TEST_F(errorator_test_t, basic) }); } +TEST_F(errorator_test_t, parallel_for_each) +{ + run_async([this] { + test_parallel_for_each().unsafe_get0(); + }); +} + TEST_F(errorator_test_t, non_copy_then) { run_async([this] { -- 2.39.5