1 //===-- Unittests for pthread_rwlockattr_t --------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "include/llvm-libc-macros/generic-error-number-macros.h" // EINVAL 10 #include "src/pthread/pthread_rwlockattr_destroy.h" 11 #include "src/pthread/pthread_rwlockattr_getkind_np.h" 12 #include "src/pthread/pthread_rwlockattr_getpshared.h" 13 #include "src/pthread/pthread_rwlockattr_init.h" 14 #include "src/pthread/pthread_rwlockattr_setkind_np.h" 15 #include "src/pthread/pthread_rwlockattr_setpshared.h" 16 #include "test/UnitTest/Test.h" 17 18 // TODO: https://github.com/llvm/llvm-project/issues/88997 19 #include <pthread.h> // PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_SHARED 20 21 TEST(LlvmLibcPThreadRWLockAttrTest, InitAndDestroy) { 22 pthread_rwlockattr_t attr; 23 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0); 24 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0); 25 } 26 27 TEST(LlvmLibcPThreadRWLockAttrTest, GetDefaultValues) { 28 pthread_rwlockattr_t attr; 29 30 // Invalid values. 31 int pshared = 42; 32 int pref = 1337; 33 34 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0); 35 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getpshared(&attr, &pshared), 0); 36 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getkind_np(&attr, &pref), 0); 37 38 ASSERT_EQ(pshared, PTHREAD_PROCESS_PRIVATE); 39 ASSERT_EQ(pref, PTHREAD_RWLOCK_PREFER_READER_NP); 40 41 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0); 42 } 43 44 TEST(LlvmLibcPThreadRWLockAttrTest, SetGoodValues) { 45 pthread_rwlockattr_t attr; 46 47 // Invalid values. 48 int pshared = 42; 49 int pref = 1337; 50 51 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0); 52 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_setpshared( 53 &attr, PTHREAD_PROCESS_SHARED), 54 0); 55 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_setkind_np( 56 &attr, PTHREAD_RWLOCK_PREFER_WRITER_NP), 57 0); 58 59 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getpshared(&attr, &pshared), 0); 60 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getkind_np(&attr, &pref), 0); 61 62 ASSERT_EQ(pshared, PTHREAD_PROCESS_SHARED); 63 ASSERT_EQ(pref, PTHREAD_RWLOCK_PREFER_WRITER_NP); 64 65 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0); 66 } 67 68 TEST(LlvmLibcPThreadRWLockAttrTest, SetBadValues) { 69 pthread_rwlockattr_t attr; 70 71 // Invalid values. 72 int pshared = 42; 73 int pref = 1337; 74 75 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0); 76 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_setpshared(&attr, pshared), 77 EINVAL); 78 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_setkind_np(&attr, pref), EINVAL); 79 80 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getpshared(&attr, &pshared), 0); 81 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getkind_np(&attr, &pref), 0); 82 83 ASSERT_EQ(pshared, PTHREAD_PROCESS_PRIVATE); 84 ASSERT_EQ(pref, PTHREAD_RWLOCK_PREFER_READER_NP); 85 86 ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0); 87 } 88