diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-04-10 10:25:30 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-04-10 10:25:30 -0700 |
commit | d7f14cea09e8d2911dc44ede06d28b34e5fd555f (patch) | |
tree | c5e737cb18df54ca17fc2b7233f4e2eda09235a6 | |
parent | 022873c12ec07fab6fbd72d04f7a2616b8f0abc9 (diff) |
enable test_atomic_cxx on everything but 64-bit operations; #2273
-rw-r--r-- | tests/core/test_atomic_cxx.cpp | 14 | ||||
-rw-r--r-- | tests/core/test_atomic_cxx.txt | 61 | ||||
-rw-r--r-- | tests/test_core.py | 2 |
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')) |