diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2011-11-25 11:06:57 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-26 13:10:09 +0100 |
commit | e1147dcb4b187de10c65fb17646988d31429c3f3 (patch) | |
tree | 266e2c69a0744632b368a2e81350aca20f6caa1e /tests/auto/corelib/thread/qatomicpointer | |
parent | 57c31045df4ca7ca259dad72d2db20292f009704 (diff) |
Test QAtomicPointer<const T>
Commit f4b6628083bf98ffa9169d8a8b890d84b6046867 fixed it on windows.
Now test it work within QAtomicPtr
Change-Id: Ibf5c31a133d6d544a78ce626fac9085b73c97fd5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/thread/qatomicpointer')
-rw-r--r-- | tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp b/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp index 377cdd5544..5141bda4c2 100644 --- a/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp +++ b/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp @@ -74,6 +74,7 @@ private slots: void fetchAndAdd_data(); void fetchAndAdd(); + void constAndVolatile(); private: static void warningFreeHelper(); }; @@ -657,5 +658,56 @@ void tst_QAtomicPointer::fetchAndAdd() } } +template <typename T> void constAndVolatile_helper() +{ + T *one = 0; + T *two = &one; + T *three = &two; + + { + QAtomicPointer<T> atomic1 = one; + QAtomicPointer<T> atomic2 = two; + QAtomicPointer<T> atomic3 = three; + + QVERIFY(atomic1.load() == one); + QVERIFY(atomic2.load() == two); + QVERIFY(atomic3.load() == three); + + QVERIFY(atomic1.fetchAndStoreRelaxed(two) == one); + QVERIFY(atomic2.fetchAndStoreRelaxed(three) == two); + QVERIFY(atomic3.fetchAndStoreRelaxed(one) == three); + + QVERIFY(atomic1.load() == two); + QVERIFY(atomic2.load() == three); + QVERIFY(atomic3.load() == one); + } + { + QAtomicPointer<T> atomic1 = one; + QAtomicPointer<T> atomic2 = two; + QAtomicPointer<T> atomic3 = three; + + QVERIFY(atomic1.load() == one); + QVERIFY(atomic2.load() == two); + QVERIFY(atomic3.load() == three); + + QVERIFY(atomic1.testAndSetRelaxed(one, two)); + QVERIFY(atomic2.testAndSetRelaxed(two, three)); + QVERIFY(atomic3.testAndSetRelaxed(three, one)); + + QVERIFY(atomic1.load() == two); + QVERIFY(atomic2.load() == three); + QVERIFY(atomic3.load() == one); + } + +} + +void tst_QAtomicPointer::constAndVolatile() +{ + constAndVolatile_helper<void>(); + constAndVolatile_helper<const void>(); + constAndVolatile_helper<volatile void>(); + constAndVolatile_helper<const volatile void>(); +} + QTEST_APPLESS_MAIN(tst_QAtomicPointer) #include "tst_qatomicpointer.moc" |