diff options
Diffstat (limited to 'src/pal/tests/palsuite/miscellaneous/InterlockedExchange64')
4 files changed, 124 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/CMakeLists.txt new file mode 100644 index 0000000000..f6aa0cb2d9 --- /dev/null +++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +add_subdirectory(test1) + diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt new file mode 100644 index 0000000000..3f4cd5e058 --- /dev/null +++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + test.cpp +) + +add_executable(paltest_interlockedexchange64_test1 + ${SOURCES} +) + +add_dependencies(paltest_interlockedexchange64_test1 coreclrpal) + +target_link_libraries(paltest_interlockedexchange64_test1 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp new file mode 100644 index 0000000000..12e8b50580 --- /dev/null +++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/test.cpp @@ -0,0 +1,85 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*============================================================ +** +** Source: test.c +** +** Purpose: InterlockedExchange64() function +** +** +**=========================================================*/ + +/* This test is FINISHED. Note: The biggest feature of this function is that + it locks the value before it increments it -- in order to make it so only + one thread can access it. But, I really don't have a great test to make + sure it's thread safe. Any ideas? +*/ + +#include <palsuite.h> + +#define START_VALUE 0 + +int __cdecl main(int argc, char *argv[]) { + + LONGLONG TheValue = START_VALUE; + LONGLONG NewValue = 5; + LONGLONG TheReturn; + + /* + * Initialize the PAL and return FAILURE if this fails + */ + + if(0 != (PAL_Initialize(argc, argv))) + { + return FAIL; + } + +/* +** Run only on 64 bit platforms +*/ +#if defined(BIT64) && defined(PLATFORM_UNIX) + + TheReturn = InterlockedExchange64(&TheValue,NewValue); + + /* Compare the exchanged value with the value we exchanged it with. Should + be the same. + */ + if(TheValue != NewValue) + { +#ifdef PLATFORM_UNIX + Fail("ERROR: The value which was exchanged should now be %ll, but " + "instead it is %ll.",NewValue,TheValue); +#else + Fail("ERROR: The value which was exchanged should now be %I64, but " + "instead it is %I64.",NewValue,TheValue); +#endif + } + + /* Check to make sure it returns the origional number which 'TheValue' was + set to. + */ + + if(TheReturn != START_VALUE) + { +#ifdef PLATFORM_UNIX + Fail("ERROR: The value returned should be the value before the " + "exchange happened, which was %ll, but %ll was returned.", + START_VALUE,TheReturn); +#else + Fail("ERROR: The value returned should be the value before the " + "exchange happened, which was %I64, but %I64 was returned.", + START_VALUE,TheReturn); +#endif + } + +#endif //defined(BIT64) && defined(_IA64_) + PAL_Terminate(); + return PASS; +} + + + + + diff --git a/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/testinfo.dat b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/testinfo.dat new file mode 100644 index 0000000000..3669e99614 --- /dev/null +++ b/src/pal/tests/palsuite/miscellaneous/InterlockedExchange64/test1/testinfo.dat @@ -0,0 +1,16 @@ +# Licensed to the .NET Foundation under one or more agreements. +# The .NET Foundation licenses this file to you under the MIT license. +# See the LICENSE file in the project root for more information. + +Version = 1.0 +Section = Miscellaneous +Function = InterlockedExchange64 +Name = Positive test of InterlockedExchange64 +TYPE = DEFAULT +EXE1 = test +Description += Test to see if this exchanges the variables correctly and += has the correct return value. + + + |