summaryrefslogtreecommitdiffstats
path: root/test/atomic_test.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-08-13 18:21:53 +0000
committerDavid Robillard <d@drobilla.net>2012-08-13 18:21:53 +0000
commit331cdd5eb4cacd5396e7e56dd826b320212674fd (patch)
treefc4badc5fbdbbee9302e1ee158330b10fb3c83c6 /test/atomic_test.cpp
parentca660c8b407affd24802c43429b6341e76010660 (diff)
downloadraul-331cdd5eb4cacd5396e7e56dd826b320212674fd.tar.gz
raul-331cdd5eb4cacd5396e7e56dd826b320212674fd.tar.bz2
raul-331cdd5eb4cacd5396e7e56dd826b320212674fd.zip
Drop glib for atomics and use gcc/clang builtins.
git-svn-id: http://svn.drobilla.net/lad/trunk/raul@4681 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'test/atomic_test.cpp')
-rw-r--r--test/atomic_test.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/atomic_test.cpp b/test/atomic_test.cpp
index 51d710d..e3a8d73 100644
--- a/test/atomic_test.cpp
+++ b/test/atomic_test.cpp
@@ -20,10 +20,51 @@
using namespace std;
using namespace Raul;
+#define TEST(cond) { if (!(cond)) return 1; }
+
int
main()
{
/* TODO: Actually test functionality... */
+ AtomicInt i(0);
+ TEST(i == 0);
+
+ ++i;
+ TEST(i == 1);
+
+ --i;
+ TEST(i == 0);
+
+ TEST(i + 1 == 1);
+ TEST(i - 1 == -1);
+
+ i += 2;
+ TEST(i == 2);
+
+ i -= 4;
+ TEST(i == -2);
+
+ TEST(i.compare_and_exchange(-2, 0));
+ TEST(i == 0);
+
+ TEST(i.exchange_and_add(5) == 0);
+ TEST(i == 5);
+
+ i = 1;
+ TEST(i == 1);
+ TEST(i.decrement_and_test());
+
+ int five = 5;
+ int seven = 7;
+ AtomicPtr<int> p;
+ TEST(p.get() == NULL);
+
+ p = &five;
+ TEST(p.get() == &five);
+ TEST(*p.get() == 5);
+ TEST(p.compare_and_exchange(&five, &seven));
+ TEST(p.get() == &seven);
+ TEST(*p.get() = 7);
return 0;
}