diff options
author | Eric Lemanissier <eric.lemanissier@gmail.com> | 2017-01-16 12:22:43 +0100 |
---|---|---|
committer | Eric Lemanissier <eric.lemanissier@gmail.com> | 2017-02-17 13:57:30 +0000 |
commit | c5e687895dd2eba3106f697b6e92b84683402403 (patch) | |
tree | a9658c00cc2fd250b06ceff218e2c6cb65f2c432 /tests/auto | |
parent | 1d6700171cf41c17983edff285c3658933610523 (diff) |
Adapt to the C++ SIC introduced by P0012: noexcept overloading
see 5a1b4832a2 for more detail
Task-number: QTBUG-58142
Change-Id: I51851ea9b4fe7b8eeadc452bc3dbb1ea00026d29
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto')
4 files changed, 184 insertions, 0 deletions
diff --git a/tests/auto/concurrent/qtconcurrentmap/qtconcurrentmap.pro b/tests/auto/concurrent/qtconcurrentmap/qtconcurrentmap.pro index 3af207ae5a..fd8fd0a74a 100644 --- a/tests/auto/concurrent/qtconcurrentmap/qtconcurrentmap.pro +++ b/tests/auto/concurrent/qtconcurrentmap/qtconcurrentmap.pro @@ -3,3 +3,6 @@ TARGET = tst_qtconcurrentmap QT = core testlib concurrent SOURCES = tst_qtconcurrentmap.cpp DEFINES += QT_STRICT_ITERATORS + +# Force C++17 if available +contains(QT_CONFIG, c++1z): CONFIG += c++1z diff --git a/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp b/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp index 25ac952396..96656a6dff 100644 --- a/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp +++ b/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp @@ -48,6 +48,7 @@ private slots: void blocking_mappedReduced(); void assignResult(); void functionOverloads(); + void noExceptFunctionOverloads(); #ifndef QT_NO_EXCEPTIONS void exceptions(); #endif @@ -2025,6 +2026,16 @@ int fn(int &i) return i; } +int fnConstNoExcept(const int &i) Q_DECL_NOTHROW +{ + return i; +} + +int fnNoExcept(int &i) Q_DECL_NOTHROW +{ + return i; +} + QString changeTypeConst(const int &) { return QString(); @@ -2035,6 +2046,16 @@ QString changeType(int &) return QString(); } +QString changeTypeConstNoExcept(const int &) Q_DECL_NOTHROW +{ + return QString(); +} + +QString changeTypeNoExcept(int &) Q_DECL_NOTHROW +{ + return QString(); +} + int changeTypeQStringListConst(const QStringList &) { return 0; @@ -2045,6 +2066,16 @@ int changeTypeQStringList(QStringList &) return 0; } +int changeTypeQStringListConstNoExcept(const QStringList &) Q_DECL_NOTHROW +{ + return 0; +} + +int changeTypeQStringListNoExcept(QStringList &) Q_DECL_NOTHROW +{ + return 0; +} + class MemFnTester { public: @@ -2069,6 +2100,26 @@ public: { return QString(); } + + MemFnTester fnNoExcept() Q_DECL_NOTHROW + { + return MemFnTester(); + } + + MemFnTester fnConstNoExcept() const Q_DECL_NOTHROW + { + return MemFnTester(); + } + + QString changeTypeNoExcept() Q_DECL_NOTHROW + { + return QString(); + } + + QString changeTypeConstNoExcept() const Q_DECL_NOTHROW + { + return QString(); + } }; Q_DECLARE_METATYPE(QVector<MemFnTester>); @@ -2097,6 +2148,29 @@ void tst_QtConcurrentMap::functionOverloads() QtConcurrent::blockingMapped<QList<QString> >(constMemFnTesterList, &MemFnTester::changeTypeConst); } +void tst_QtConcurrentMap::noExceptFunctionOverloads() +{ + QList<int> intList; + const QList<int> constIntList; + QList<MemFnTester> classList; + const QList<MemFnTester> constMemFnTesterList; + + QtConcurrent::mapped(intList, fnConstNoExcept); + QtConcurrent::mapped(constIntList, fnConstNoExcept); + QtConcurrent::mapped(classList, &MemFnTester::fnConstNoExcept); + QtConcurrent::mapped(constMemFnTesterList, &MemFnTester::fnConstNoExcept); + + QtConcurrent::blockingMapped<QVector<int> >(intList, fnConstNoExcept); + QtConcurrent::blockingMapped<QVector<int> >(constIntList, fnConstNoExcept); + QtConcurrent::blockingMapped<QVector<MemFnTester> >(classList, &MemFnTester::fnConstNoExcept); + QtConcurrent::blockingMapped<QVector<MemFnTester> >(constMemFnTesterList, &MemFnTester::fnConstNoExcept); + + QtConcurrent::blockingMapped<QList<QString> >(intList, changeTypeConstNoExcept); + QtConcurrent::blockingMapped<QList<QString> >(constIntList, changeTypeConstNoExcept); + QtConcurrent::blockingMapped<QList<QString> >(classList, &MemFnTester::changeTypeConstNoExcept); + QtConcurrent::blockingMapped<QList<QString> >(constMemFnTesterList, &MemFnTester::changeTypeConstNoExcept); +} + QAtomicInt currentInstanceCount; QAtomicInt peakInstanceCount; class InstanceCounter diff --git a/tests/auto/concurrent/qtconcurrentrun/qtconcurrentrun.pro b/tests/auto/concurrent/qtconcurrentrun/qtconcurrentrun.pro index f60462f9ed..44891b7ba5 100644 --- a/tests/auto/concurrent/qtconcurrentrun/qtconcurrentrun.pro +++ b/tests/auto/concurrent/qtconcurrentrun/qtconcurrentrun.pro @@ -2,3 +2,6 @@ CONFIG += testcase TARGET = tst_qtconcurrentrun QT = core testlib concurrent SOURCES = tst_qtconcurrentrun.cpp + +# Force C++17 if available +contains(QT_CONFIG, c++1z): CONFIG += c++1z diff --git a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp index bd53aa69fe..4e3668d72e 100644 --- a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp +++ b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp @@ -123,6 +123,28 @@ public: int operator()(int in) const { return in; } }; +class ANoExcept +{ +public: + int member0() Q_DECL_NOTHROW { return 10; } + int member1(int in) Q_DECL_NOTHROW { return in; } + + typedef int result_type; + int operator()() Q_DECL_NOTHROW { return 10; } + int operator()(int in) Q_DECL_NOTHROW { return in; } +}; + +class AConstNoExcept +{ +public: + int member0() const Q_DECL_NOTHROW { return 10; } + int member1(int in) const Q_DECL_NOTHROW { return in; } + + typedef int result_type; + int operator()() const Q_DECL_NOTHROW { return 10; } + int operator()(int in) const Q_DECL_NOTHROW { return in; } +}; + void tst_QtConcurrentRun::returnValue() { QThreadPool pool; @@ -214,6 +236,88 @@ void tst_QtConcurrentRun::returnValue() QCOMPARE(f.result(), 20); f = run(&pool, &aConst, 20); QCOMPARE(f.result(), 20); + + ANoExcept aNoExcept; + f = run(&aNoExcept, &ANoExcept::member0); + QCOMPARE(f.result(), 10); + f = run(&pool, &aNoExcept, &ANoExcept::member0); + QCOMPARE(f.result(), 10); + + f = run(&aNoExcept, &ANoExcept::member1, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, &aNoExcept, &ANoExcept::member1, 20); + QCOMPARE(f.result(), 20); + + f = run(aNoExcept, &ANoExcept::member0); + QCOMPARE(f.result(), 10); + f = run(&pool, aNoExcept, &ANoExcept::member0); + QCOMPARE(f.result(), 10); + + f = run(aNoExcept, &ANoExcept::member1, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, aNoExcept, &ANoExcept::member1, 20); + QCOMPARE(f.result(), 20); + + f = run(aNoExcept); + QCOMPARE(f.result(), 10); + f = run(&pool, aNoExcept); + QCOMPARE(f.result(), 10); + + f = run(&aNoExcept); + QCOMPARE(f.result(), 10); + f = run(&pool, &aNoExcept); + QCOMPARE(f.result(), 10); + + f = run(aNoExcept, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, aNoExcept, 20); + QCOMPARE(f.result(), 20); + + f = run(&aNoExcept, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, &aNoExcept, 20); + QCOMPARE(f.result(), 20); + + const AConstNoExcept aConstNoExcept = AConstNoExcept(); + f = run(&aConstNoExcept, &AConstNoExcept::member0); + QCOMPARE(f.result(), 10); + f = run(&pool, &aConstNoExcept, &AConstNoExcept::member0); + QCOMPARE(f.result(), 10); + + f = run(&aConstNoExcept, &AConstNoExcept::member1, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, &aConstNoExcept, &AConstNoExcept::member1, 20); + QCOMPARE(f.result(), 20); + + f = run(aConstNoExcept, &AConstNoExcept::member0); + QCOMPARE(f.result(), 10); + f = run(&pool, aConstNoExcept, &AConstNoExcept::member0); + QCOMPARE(f.result(), 10); + + f = run(aConstNoExcept, &AConstNoExcept::member1, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, aConstNoExcept, &AConstNoExcept::member1, 20); + QCOMPARE(f.result(), 20); + + f = run(aConstNoExcept); + QCOMPARE(f.result(), 10); + f = run(&pool, aConstNoExcept); + QCOMPARE(f.result(), 10); + + f = run(&aConstNoExcept); + QCOMPARE(f.result(), 10); + f = run(&pool, &aConstNoExcept); + QCOMPARE(f.result(), 10); + + f = run(aConstNoExcept, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, aConstNoExcept, 20); + QCOMPARE(f.result(), 20); + + f = run(&aConstNoExcept, 20); + QCOMPARE(f.result(), 20); + f = run(&pool, &aConstNoExcept, 20); + QCOMPARE(f.result(), 20); } struct TestClass |