xref: /llvm-project/libc/test/src/pthread/pthread_rwlockattr_test.cpp (revision dd7963239e94bcd46e56ae90b08d2d0c9904ff00)
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_getpshared.h"
12 #include "src/pthread/pthread_rwlockattr_init.h"
13 #include "src/pthread/pthread_rwlockattr_setpshared.h"
14 #include "test/UnitTest/Test.h"
15 
16 // TODO: https://github.com/llvm/llvm-project/issues/88997
17 #include <pthread.h> // PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_SHARED
18 
19 TEST(LlvmLibcPThreadRWLockAttrTest, InitAndDestroy) {
20   pthread_rwlockattr_t attr;
21   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0);
22   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0);
23 }
24 
25 TEST(LlvmLibcPThreadRWLockAttrTest, GetDefaultValues) {
26   pthread_rwlockattr_t attr;
27 
28   // Invalid value.
29   int pshared = 42;
30 
31   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0);
32   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getpshared(&attr, &pshared), 0);
33   ASSERT_EQ(pshared, PTHREAD_PROCESS_PRIVATE);
34   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0);
35 }
36 
37 TEST(LlvmLibcPThreadRWLockAttrTest, SetGoodValues) {
38   pthread_rwlockattr_t attr;
39 
40   // Invalid value.
41   int pshared = 42;
42 
43   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0);
44   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_setpshared(
45                 &attr, PTHREAD_PROCESS_SHARED),
46             0);
47   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getpshared(&attr, &pshared), 0);
48   ASSERT_EQ(pshared, PTHREAD_PROCESS_SHARED);
49   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0);
50 }
51 
52 TEST(LlvmLibcPThreadRWLockAttrTest, SetBadValues) {
53   pthread_rwlockattr_t attr;
54 
55   // Invalid value.
56   int pshared = 42;
57 
58   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_init(&attr), 0);
59   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_setpshared(&attr, pshared),
60             EINVAL);
61   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_getpshared(&attr, &pshared), 0);
62   ASSERT_EQ(pshared, PTHREAD_PROCESS_PRIVATE);
63   ASSERT_EQ(LIBC_NAMESPACE::pthread_rwlockattr_destroy(&attr), 0);
64 }
65