summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2011-11-25 11:06:57 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-26 13:10:09 +0100
commite1147dcb4b187de10c65fb17646988d31429c3f3 (patch)
tree266e2c69a0744632b368a2e81350aca20f6caa1e
parent57c31045df4ca7ca259dad72d2db20292f009704 (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>
-rw-r--r--tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp52
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"