diff options
Diffstat (limited to 'src/pal/tests/palsuite/threading/GetCurrentThread/test1/thread.cpp')
-rw-r--r-- | src/pal/tests/palsuite/threading/GetCurrentThread/test1/thread.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/threading/GetCurrentThread/test1/thread.cpp b/src/pal/tests/palsuite/threading/GetCurrentThread/test1/thread.cpp new file mode 100644 index 0000000000..b2bb97fd67 --- /dev/null +++ b/src/pal/tests/palsuite/threading/GetCurrentThread/test1/thread.cpp @@ -0,0 +1,93 @@ +// 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: GetCurrentThread/test1/thread.c +** +** Purpose: Test to ensure GetCurrentThread returns a handle to +** the current thread. +** +** Dependencies: GetThreadPriority +** SetThreadPriority +** Fail +** Trace +** + +** +**=========================================================*/ + +#include <palsuite.h> + +int __cdecl main( int argc, char **argv ) +{ + + HANDLE hThread; + int nPriority; + + if(0 != (PAL_Initialize(argc, argv))) + { + return ( FAIL ); + } + +#if !HAVE_SCHED_OTHER_ASSIGNABLE + /* Defining thread priority for SCHED_OTHER is implementation defined. + Some platforms like NetBSD cannot reassign it as they are dynamic. + */ + printf("paltest_getcurrentthread_test1 has been disabled on this platform\n"); +#else + hThread = GetCurrentThread(); + + nPriority = GetThreadPriority(hThread); + + if ( THREAD_PRIORITY_NORMAL != nPriority ) + { + if ( THREAD_PRIORITY_ERROR_RETURN == nPriority ) + { + Fail ("GetThreadPriority function call failed for %s\n" + "GetLastError returned %d\n", argv[0], GetLastError()); + } + else + { + Fail ("GetThreadPriority function call failed for %s\n" + "The priority returned was %d\n", argv[0], nPriority); + } + } + else + { + nPriority = 0; + + if (0 == SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST)) + { + Fail ("Unable to set thread priority. Either handle doesn't" + " point to current thread \nor SetThreadPriority " + "function failed. Failing test.\n"); + } + + nPriority = GetThreadPriority(hThread); + + if ( THREAD_PRIORITY_ERROR_RETURN == nPriority ) + { + Fail ("GetThreadPriority function call failed for %s\n" + "GetLastError returned %d\n", argv[0], GetLastError()); + } + else if ( THREAD_PRIORITY_HIGHEST == nPriority ) + { + Trace ("GetCurrentThread returns handle to the current " + "thread.\n"); + exit ( PASS ); + } + else + { + Fail ("Unable to set thread priority. Either handle doesn't" + " point to current thread \nor SetThreadPriority " + "function failed. Failing test.\n"); + } + } +#endif + + PAL_Terminate(); + return ( PASS ); + +} |