summaryrefslogtreecommitdiffstats
path: root/test/atomic_test.cpp
diff options
context:
space:
mode:
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;
}