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 void constAndVolatile_helper() +{ + T *one = 0; + T *two = &one; + T *three = &two; + + { + QAtomicPointer atomic1 = one; + QAtomicPointer atomic2 = two; + QAtomicPointer 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 atomic1 = one; + QAtomicPointer atomic2 = two; + QAtomicPointer 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(); + constAndVolatile_helper(); + constAndVolatile_helper(); + constAndVolatile_helper(); +} + QTEST_APPLESS_MAIN(tst_QAtomicPointer) #include "tst_qatomicpointer.moc"