22using namespace std::chrono_literals;
26 void CoroTaskTest::testReturn ()
33 void CoroTaskTest::testWait ()
50 void CoroTaskTest::testTaskDestr ()
66 class MockReply :
public QNetworkReply
70 using QNetworkReply::QNetworkReply;
72 using QNetworkReply::setAttribute;
73 using QNetworkReply::setError;
74 using QNetworkReply::setFinished;
75 using QNetworkReply::setHeader;
76 using QNetworkReply::setOperation;
77 using QNetworkReply::setRawHeader;
78 using QNetworkReply::setRequest;
79 using QNetworkReply::setUrl;
83 Buffer_.setData (data);
84 Buffer_.open (QIODevice::ReadOnly);
85 open (QIODevice::ReadOnly);
90 return Buffer_.read (data,
maxSize);
93 void abort ()
override
100 std::unique_ptr<MockReply> Reply_;
102 explicit MockNAM (std::unique_ptr<MockReply>
reply)
114 Reply_->setUrl (
req.url ());
115 Reply_->setOperation (
op);
116 Reply_->setRequest (
req);
117 return Reply_.get ();
123 auto reply = std::make_unique<MockReply> ();
124 reply->setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 200);
125 reply->SetData (data);
131 auto reply = std::make_unique<MockReply> ();
132 reply->setAttribute (QNetworkRequest::HttpStatusCodeAttribute, 404);
133 reply->setError (QNetworkReply::NetworkError::ContentAccessDenied,
"well, 404!"_qs);
139 const QByteArray data {
"this is some test data" };
146 co_return reply.GetReplyData ();
161 co_return reply.GetReplyData ();
169 reply.setFinished (
true);
174 QTimer::singleShot (10ms,
177 reply.setFinished (
true);
183 void CoroTaskTest::testNetworkReplyGoodNoWait ()
188 void CoroTaskTest::testNetworkReplyGoodWait ()
193 void CoroTaskTest::testNetworkReplyBadNoWait ()
198 void CoroTaskTest::testNetworkReplyBadWait ()
203 void CoroTaskTest::testContextDestrBeforeFinish ()
205 auto context = std::make_unique<QObject> ();
208 co_await AddContextObject { *
context };
210 co_return context->children ().size ();
217 void CoroTaskTest::testContextDestrAfterFinish ()
219 auto context = std::make_unique<QObject> ();
222 co_await AddContextObject { *
context };
224 co_return context->children ().size ();
230 void CoroTaskTest::testWaitMany ()
232 constexpr auto max = 100;
235 co_await Precisely { std::chrono::milliseconds {
max - index } };
241 QVector<Task<int>>
tasks;
243 for (
int i = 0;
i <
max; ++
i)
260 void CoroTaskTest::testWaitManyTuple ()
278 void CoroTaskTest::testEither ()
285 co_return Result_t::Right (
theInt > 420);
293 co_return Result_t::Right (
theInt > 420);
301 co_return Result_t::Right (
theInt > 420);
306 void CoroTaskTest::testThrottleSameCoro ()
309 constexpr auto count = 10;
330 void CoroTaskTest::testThrottleSameCoroSlow ()
333 constexpr auto count = 10;
354 void CoroTaskTest::testThrottleManyCoros ()
356 Throttle
t { 1ms, Qt::TimerType::PreciseTimer };
357 constexpr auto count = 10;
static Either Left(const L &l)
static Either Right(R &&r)
constexpr detail::AggregateType< detail::AggregateFunction::Count, Ptr > count
constexpr detail::AggregateType< detail::AggregateFunction::Max, Ptr > max
Task< QVector< T >, Exts... > InParallel(QVector< Task< T, Exts... > > tasks)
Container< T > Filter(const Container< T > &c, F f)
WithPrecision< Qt::PreciseTimer > Precisely
T GetTaskResult(Task< T, Extensions... > task)