183f153ceSSiva Chandra Reddy //===-- Unittests for pthread_mutexattr_t ---------------------------------===// 283f153ceSSiva Chandra Reddy // 383f153ceSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 483f153ceSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information. 583f153ceSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 683f153ceSSiva Chandra Reddy // 783f153ceSSiva Chandra Reddy //===----------------------------------------------------------------------===// 883f153ceSSiva Chandra Reddy 9*46944b0cSJob Henandez Lara #include "hdr/errno_macros.h" 1083f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_destroy.h" 1183f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_getpshared.h" 1283f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_getrobust.h" 1383f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_gettype.h" 1483f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_init.h" 1583f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_setpshared.h" 1683f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_setrobust.h" 1783f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_settype.h" 18af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h" 1983f153ceSSiva Chandra Reddy #include <pthread.h> 2083f153ceSSiva Chandra Reddy 2183f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, InitAndDestroy) { 2283f153ceSSiva Chandra Reddy pthread_mutexattr_t attr; 23b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0); 24b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_destroy(&attr), 0); 2583f153ceSSiva Chandra Reddy } 2683f153ceSSiva Chandra Reddy 2783f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetType) { 2883f153ceSSiva Chandra Reddy int type; 2983f153ceSSiva Chandra Reddy pthread_mutexattr_t attr; 30b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0); 31b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_gettype(&attr, &type), 0); 3283f153ceSSiva Chandra Reddy ASSERT_EQ(type, int(PTHREAD_MUTEX_DEFAULT)); 3383f153ceSSiva Chandra Reddy 3483f153ceSSiva Chandra Reddy ASSERT_EQ( 35b6bc9d72SGuillaume Chatelet LIBC_NAMESPACE::pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE), 3683f153ceSSiva Chandra Reddy 0); 37b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_gettype(&attr, &type), 0); 3883f153ceSSiva Chandra Reddy ASSERT_EQ(type, int(PTHREAD_MUTEX_RECURSIVE)); 3983f153ceSSiva Chandra Reddy 40b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_settype(&attr, 41b6bc9d72SGuillaume Chatelet PTHREAD_MUTEX_ERRORCHECK), 4283f153ceSSiva Chandra Reddy 0); 43b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_gettype(&attr, &type), 0); 4483f153ceSSiva Chandra Reddy ASSERT_EQ(type, int(PTHREAD_MUTEX_ERRORCHECK)); 4583f153ceSSiva Chandra Reddy 46b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_settype(&attr, 0xBAD), EINVAL); 4783f153ceSSiva Chandra Reddy } 4883f153ceSSiva Chandra Reddy 4983f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetRobust) { 5083f153ceSSiva Chandra Reddy int robust; 5183f153ceSSiva Chandra Reddy pthread_mutexattr_t attr; 52b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0); 53b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getrobust(&attr, &robust), 0); 5483f153ceSSiva Chandra Reddy ASSERT_EQ(robust, int(PTHREAD_MUTEX_STALLED)); 5583f153ceSSiva Chandra Reddy 5683f153ceSSiva Chandra Reddy ASSERT_EQ( 57b6bc9d72SGuillaume Chatelet LIBC_NAMESPACE::pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST), 58b6bc9d72SGuillaume Chatelet 0); 59b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getrobust(&attr, &robust), 0); 6083f153ceSSiva Chandra Reddy ASSERT_EQ(robust, int(PTHREAD_MUTEX_ROBUST)); 6183f153ceSSiva Chandra Reddy 6283f153ceSSiva Chandra Reddy ASSERT_EQ( 63b6bc9d72SGuillaume Chatelet LIBC_NAMESPACE::pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_STALLED), 6483f153ceSSiva Chandra Reddy 0); 65b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getrobust(&attr, &robust), 0); 6683f153ceSSiva Chandra Reddy ASSERT_EQ(robust, int(PTHREAD_MUTEX_STALLED)); 6783f153ceSSiva Chandra Reddy 68b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setrobust(&attr, 0xBAD), EINVAL); 6983f153ceSSiva Chandra Reddy } 7083f153ceSSiva Chandra Reddy 7183f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetPShared) { 7283f153ceSSiva Chandra Reddy int pshared; 7383f153ceSSiva Chandra Reddy pthread_mutexattr_t attr; 74b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0); 75b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getpshared(&attr, &pshared), 0); 7683f153ceSSiva Chandra Reddy ASSERT_EQ(pshared, int(PTHREAD_PROCESS_PRIVATE)); 7783f153ceSSiva Chandra Reddy 78b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setpshared( 79b6bc9d72SGuillaume Chatelet &attr, PTHREAD_PROCESS_SHARED), 8083f153ceSSiva Chandra Reddy 0); 81b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getpshared(&attr, &pshared), 0); 8283f153ceSSiva Chandra Reddy ASSERT_EQ(pshared, int(PTHREAD_PROCESS_SHARED)); 8383f153ceSSiva Chandra Reddy 84b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setpshared( 85b6bc9d72SGuillaume Chatelet &attr, PTHREAD_PROCESS_PRIVATE), 8683f153ceSSiva Chandra Reddy 0); 87b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getpshared(&attr, &pshared), 0); 8883f153ceSSiva Chandra Reddy ASSERT_EQ(pshared, int(PTHREAD_PROCESS_PRIVATE)); 8983f153ceSSiva Chandra Reddy 90b6bc9d72SGuillaume Chatelet ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setpshared(&attr, 0xBAD), EINVAL); 9183f153ceSSiva Chandra Reddy } 92