summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorVitaly Fanaskov <vitaly.fanaskov@qt.io>2020-04-14 12:51:14 +0200
committerVitaly Fanaskov <vitaly.fanaskov@qt.io>2020-04-23 17:09:52 +0200
commit9ba0715f08a64758453b941c4add22a269a30f71 (patch)
treefb99f735af3ed5e020317bdfb4f6866720722e43 /tests
parent23b998fa454ca021aa595f66d2e1964da4a119a4 (diff)
QFuture: the result type doesn't have to be a default-constructible
Added asserts to insure the invariant declared in the documentation. Canceled future object is not valid, hence we don't need to handle this case separately. Fixes: QTBUG-83389 Change-Id: Ib0653ef40cd3135574a91740e4ce2c6dc4da8a71 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index 4784cf16db..8d4ae41fd5 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -116,6 +116,8 @@ private slots:
void runAndTake();
void resultsReadyAt_data();
void resultsReadyAt();
+ void takeResultWorksForTypesWithoutDefaultCtor();
+ void canceledFutureIsNotValid();
private:
using size_type = std::vector<int>::size_type;
@@ -2744,5 +2746,40 @@ void tst_QFuture::resultsReadyAt()
QCOMPARE(taken, 0b1111);
}
+template <class T>
+auto makeFutureInterface(T &&result)
+{
+ QFutureInterface<T> f;
+
+ f.reportStarted();
+ f.reportResult(std::forward<T>(result));
+ f.reportFinished();
+
+ return f;
+}
+
+void tst_QFuture::takeResultWorksForTypesWithoutDefaultCtor()
+{
+ struct Foo
+ {
+ Foo() = delete;
+ explicit Foo(int i) : _i(i) {}
+
+ int _i = -1;
+ };
+
+ auto f = makeFutureInterface(Foo(42));
+
+ QCOMPARE(f.takeResult()._i, 42);
+}
+void tst_QFuture::canceledFutureIsNotValid()
+{
+ auto f = makeFutureInterface(42);
+
+ f.cancel();
+
+ QVERIFY(!f.isValid());
+}
+
QTEST_MAIN(tst_QFuture)
#include "tst_qfuture.moc"