aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-04-10 10:25:30 -0700
committerAlon Zakai <alonzakai@gmail.com>2014-04-10 10:25:30 -0700
commitd7f14cea09e8d2911dc44ede06d28b34e5fd555f (patch)
treec5e737cb18df54ca17fc2b7233f4e2eda09235a6
parent022873c12ec07fab6fbd72d04f7a2616b8f0abc9 (diff)
enable test_atomic_cxx on everything but 64-bit operations; #2273
-rw-r--r--tests/core/test_atomic_cxx.cpp14
-rw-r--r--tests/core/test_atomic_cxx.txt61
-rw-r--r--tests/test_core.py2
3 files changed, 19 insertions, 58 deletions
diff --git a/tests/core/test_atomic_cxx.cpp b/tests/core/test_atomic_cxx.cpp
index 8caa3bad..1b48b153 100644
--- a/tests/core/test_atomic_cxx.cpp
+++ b/tests/core/test_atomic_cxx.cpp
@@ -24,18 +24,18 @@ template<typename TYPE> void test(TYPE mask0, TYPE mask1, TYPE mask2) {
// test atomic<int>
std::atomic<dog> atomicDog(5);
printf("atomic<int>.is_lock_free(): %s", atomicDog.is_lock_free() ? "true" : "false");
- printf("atomic<int> value: %lld\n", TYPE(atomicDog));
+ printf("atomic<int> value: %lld\n", (long long)TYPE(atomicDog));
// test store/load
for (TYPE i = 0; i < numMemoryOrders; i++) {
atomicDog.store(i, memoryOrder[i]);
- printf("store/load %lld: %lld\n", i, atomicDog.load(memoryOrder[i]));
+ printf("store/load %lld: %lld\n", (long long)i, (long long)atomicDog.load(memoryOrder[i]));
}
// test exchange
for (TYPE i = 0; i < numMemoryOrders; i++) {
TYPE old = atomicDog.exchange(i, memoryOrder[i]);
- printf("exchange %lld: old=%lld new=%lld\n", i, old, TYPE(atomicDog));
+ printf("exchange %lld: old=%lld new=%lld\n", (long long)i, (long long)old, (long long)TYPE(atomicDog));
}
// compare_exchange_weak
@@ -81,7 +81,7 @@ template<typename TYPE> void test(TYPE mask0, TYPE mask1, TYPE mask2) {
atomicDog = 0;
for (int i = 0; i < numMemoryOrders; i++) {
int old = atomicDog.fetch_xor((1<<i), memoryOrder[i]);
- printf("fetch_xor %ld: old=%llx, new=%lx\n", i, old, TYPE(atomicDog));
+ printf("fetch_xor %ld: old=%llx, new=%lx\n", i, (long long)old, TYPE(atomicDog));
}
// operator++, --
@@ -108,10 +108,14 @@ template<typename TYPE> void test(TYPE mask0, TYPE mask1, TYPE mask2) {
int main() {
// test 8, 16, 32 and 64-bit data types
+ printf("\n8 bits\n\n");
test<char>(0xFF, 0xF0, 0x0F);
+ printf("\n16 bits\n\n");
test<short>(0xFFFF, 0xF0F0, 0x0F0F);
+ printf("\n32 bits\n\n");
test<int>(0xFFFFFFFF, 0xF0F0F0F0, 0x0F0F0F0F);
- test<long long>(0xFFFFFFFFFFFFFFFF, 0xF0F0F0F0F0F0F0F0, 0x0F0F0F0F0F0F0F0F);
+ //printf("\n64 bits\n\n");
+ //test<long long>(0xFFFFFFFFFFFFFFFF, 0xF0F0F0F0F0F0F0F0, 0x0F0F0F0F0F0F0F0F);
// test atomic_flag (should also have memory_orders, but probably doesn't matter
// to find the missing atomic functions)
diff --git a/tests/core/test_atomic_cxx.txt b/tests/core/test_atomic_cxx.txt
index 25baa0cb..3076f24b 100644
--- a/tests/core/test_atomic_cxx.txt
+++ b/tests/core/test_atomic_cxx.txt
@@ -1,3 +1,6 @@
+
+8 bits
+
atomic<int>.is_lock_free(): trueatomic<int> value: 5
store/load 0: 0
store/load 1: 1
@@ -50,6 +53,9 @@ operator-=: 5
operator|=: ffffffff
operator|=: fffffff0
operator^=: ffffffff
+
+16 bits
+
atomic<int>.is_lock_free(): trueatomic<int> value: 5
store/load 0: 0
store/load 1: 1
@@ -102,6 +108,9 @@ operator-=: 5
operator|=: ffffffff
operator|=: fffff0f0
operator^=: ffffffff
+
+32 bits
+
atomic<int>.is_lock_free(): trueatomic<int> value: 5
store/load 0: 0
store/load 1: 1
@@ -154,57 +163,5 @@ operator-=: 5
operator|=: ffffffff
operator|=: f0f0f0f0
operator^=: ffffffff
-atomic<int>.is_lock_free(): trueatomic<int> value: 5
-store/load 0: 0
-store/load 1: 1
-store/load 2: 2
-store/load 3: 3
-store/load 4: 4
-store/load 5: 5
-exchange 0: old=5 new=0
-exchange 1: old=0 new=1
-exchange 2: old=1 new=2
-exchange 3: old=2 new=3
-exchange 4: old=3 new=4
-exchange 5: old=4 new=5
-compare_exchange_weak 5: success = false
-compare_exchange_strong 5: success = false
-fetch_add 0: old=0 new=1
-fetch_add 1: old=1 new=2
-fetch_add 2: old=2 new=3
-fetch_add 3: old=3 new=4
-fetch_add 4: old=4 new=5
-fetch_add 5: old=5 new=6
-fetch_sub 0: old=6 new=5
-fetch_sub 1: old=5 new=4
-fetch_sub 2: old=4 new=3
-fetch_sub 3: old=3 new=2
-fetch_sub 4: old=2 new=1
-fetch_sub 5: old=1 new=0
-fetch_and 0: old=ffffffffffffffff, new=1
-fetch_and 1: old=ffffffffffffffff, new=2
-fetch_and 2: old=ffffffffffffffff, new=4
-fetch_and 3: old=ffffffffffffffff, new=8
-fetch_and 4: old=ffffffffffffffff, new=10
-fetch_and 5: old=ffffffffffffffff, new=20
-fetch_or 0: old=0, new=1
-fetch_or 1: old=1, new=3
-fetch_or 2: old=3, new=7
-fetch_or 3: old=7, new=f
-fetch_or 4: old=f, new=1f
-fetch_or 5: old=1f, new=3f
-fetch_xor 0: old=0, new=1
-fetch_xor 1: old=1, new=3
-fetch_xor 2: old=3, new=7
-fetch_xor 3: old=7, new=f
-fetch_xor 4: old=f, new=1f
-fetch_xor 5: old=1f, new=3f
-operator++: 1
-operator--: 0
-operator+=: 10
-operator-=: 5
-operator|=: ffffffffffffffff
-operator|=: f0f0f0f0f0f0f0f0
-operator^=: ffffffffffffffff
atomic_flag: false
done.
diff --git a/tests/test_core.py b/tests/test_core.py
index a3712de2..d4960684 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -4422,7 +4422,7 @@ PORT: 3979
src, output = (test_path + s for s in ('.in', '.out'))
self.do_run_from_file(src, output)
- def zzztest_atomic_cxx(self):
+ def test_atomic_cxx(self):
if self.emcc_args is None: return self.skip('needs emcc')
test_path = path_from_root('tests', 'core', 'test_atomic_cxx')
src, output = (test_path + s for s in ('.cpp', '.txt'))