/* * atomictest.cpp * * Created on: Jun 23, 2012 * Author: gregor */ #include #include #include "GLTB/atomicops.h" // TODO test gltb::atomicNAnd and gltb::atomicCAS #define ATOMICS_TEST_SIGNED(testName, testType) \ TEST(AtomicsSigned, testName) \ { \ testType a=0, returnValue; \ returnValue = gltb::atomicAdd(&a, (testType)2); \ ASSERT_EQ(returnValue, 0); \ ASSERT_EQ(a, 2); \ \ returnValue = gltb::atomicSub(&a, (testType)4); \ ASSERT_EQ(returnValue, 2); \ ASSERT_EQ(a, -2); \ \ returnValue = gltb::atomicInc(&a); \ ASSERT_EQ(returnValue, -2); \ ASSERT_EQ(a, -1); \ \ returnValue = gltb::atomicDec(&a); \ ASSERT_EQ(returnValue, -1); \ ASSERT_EQ(a, -2); \ \ a = 10; \ returnValue = gltb::atomicAnd(&a, (testType)6); \ ASSERT_EQ(returnValue, 10); \ ASSERT_EQ(a, 2); \ \ returnValue = gltb::atomicOr(&a, (testType)4); \ ASSERT_EQ(returnValue, 2); \ ASSERT_EQ(a, 6); \ \ returnValue = gltb::atomicXOr(&a, (testType)2); \ ASSERT_EQ(returnValue, 6); \ ASSERT_EQ(a, 4); \ } ATOMICS_TEST_SIGNED(atomicsLongLong, long long) ATOMICS_TEST_SIGNED(atomicsInt, int) ATOMICS_TEST_SIGNED(atomicsShort, short) ATOMICS_TEST_SIGNED(atomicsChar, char) // TODO test gltb::atomicNAnd and gltb::atomicCAS #define ATOMICS_TEST_UNSIGNED(testName, testType) \ TEST(AtomicsUnsigned, testName) \ { \ testType a=0, returnValue; \ returnValue = gltb::atomicAdd(&a, (testType)6); \ ASSERT_EQ(returnValue, 0); \ ASSERT_EQ(a, 6); \ \ returnValue = gltb::atomicSub(&a, (testType)4); \ ASSERT_EQ(returnValue, 6); \ ASSERT_EQ(a, 2); \ \ returnValue = gltb::atomicInc(&a); \ ASSERT_EQ(returnValue, 2); \ ASSERT_EQ(a, 3); \ \ returnValue = gltb::atomicDec(&a); \ ASSERT_EQ(returnValue, 3); \ ASSERT_EQ(a, 2); \ \ a = 10; \ returnValue = gltb::atomicAnd(&a, (testType)6); \ ASSERT_EQ(returnValue, 10); \ ASSERT_EQ(a, 2); \ \ returnValue = gltb::atomicOr(&a, (testType)4); \ ASSERT_EQ(returnValue, 2); \ ASSERT_EQ(a, 6); \ \ returnValue = gltb::atomicXOr(&a, (testType)2); \ ASSERT_EQ(returnValue, 6); \ ASSERT_EQ(a, 4); \ } ATOMICS_TEST_UNSIGNED(atomicsLongLong, unsigned long long) ATOMICS_TEST_UNSIGNED(atomicsInt, unsigned int) ATOMICS_TEST_UNSIGNED(atomicsShort, unsigned short) ATOMICS_TEST_UNSIGNED(atomicsChar, unsigned char) int main(int argc, char *argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }