aboutsummaryrefslogtreecommitdiff
path: root/tests/runner.py
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-01-17 14:52:05 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-01-17 14:52:05 -0800
commit074e5f54d468730b3719fac72710322170a20535 (patch)
tree62c1f335e1ac360c32ad57e54677bb5c9a39b2d2 /tests/runner.py
parent76ddb8091266741ae046d1b6fdeef4f782617d5b (diff)
handle atomic operations appearing in libc++
Diffstat (limited to 'tests/runner.py')
-rw-r--r--tests/runner.py46
1 files changed, 21 insertions, 25 deletions
diff --git a/tests/runner.py b/tests/runner.py
index d0056400..6db5aaf3 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -3820,33 +3820,29 @@ def process(filename):
self.do_run(src, expected)
CORRECT_SIGNS = 0
- def test_atomic_builtins(self): # XXX TODO
+ def test_atomic(self):
src = '''
- type __sync_fetch_and_add (type *ptr, type value, ...)
- type __sync_fetch_and_sub (type *ptr, type value, ...)
- type __sync_fetch_and_or (type *ptr, type value, ...)
- type __sync_fetch_and_and (type *ptr, type value, ...)
- type __sync_fetch_and_xor (type *ptr, type value, ...)
- type __sync_fetch_and_nand (type *ptr, type value, ...)
-
- type __sync_add_and_fetch (type *ptr, type value, ...)
- type __sync_sub_and_fetch (type *ptr, type value, ...)
- type __sync_or_and_fetch (type *ptr, type value, ...)
- type __sync_and_and_fetch (type *ptr, type value, ...)
- type __sync_xor_and_fetch (type *ptr, type value, ...)
- type __sync_nand_and_fetch (type *ptr, type value, ...)
-
- bool __sync_bool_compare_and_swap (type *ptr, type oldval type newval, ...)
- type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...)
-
- __sync_synchronize (...)
-
- type __sync_lock_test_and_set (type *ptr, type value, ...)
-
- void __sync_lock_release (type *ptr, ...)
- '''
+ #include <stdio.h>
+ int main() {
+ int x = 10;
+ int y = __sync_add_and_fetch(&x, 5);
+ printf("*%d,%d*\\n", x, y);
+ x = 10;
+ y = __sync_fetch_and_add(&x, 5);
+ printf("*%d,%d*\\n", x, y);
+ x = 10;
+ y = __sync_lock_test_and_set(&x, 6);
+ printf("*%d,%d*\\n", x, y);
+ x = 10;
+ y = __sync_bool_compare_and_swap(&x, 9, 7);
+ printf("*%d,%d*\\n", x, y);
+ y = __sync_bool_compare_and_swap(&x, 10, 7);
+ printf("*%d,%d*\\n", x, y);
+ return 0;
+ }
+ '''
- self.do_run(src, 'hello world\n77.\n',
+ self.do_run(src, '*15,15*\n*15,10*\n*6,10*\n*10,0*\n*7,1*')
# libc++ tests