From e1147dcb4b187de10c65fb17646988d31429c3f3 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 25 Nov 2011 11:06:57 +0100 Subject: [PATCH] Test QAtomicPointer Commit f4b6628083bf98ffa9169d8a8b890d84b6046867 fixed it on windows. Now test it work within QAtomicPtr Change-Id: Ibf5c31a133d6d544a78ce626fac9085b73c97fd5 Reviewed-by: Thiago Macieira --- .../qatomicpointer/tst_qatomicpointer.cpp | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) 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"