1*83f153ceSSiva Chandra Reddy //===-- Unittests for pthread_mutexattr_t ---------------------------------===//
2*83f153ceSSiva Chandra Reddy //
3*83f153ceSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*83f153ceSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*83f153ceSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*83f153ceSSiva Chandra Reddy //
7*83f153ceSSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*83f153ceSSiva Chandra Reddy
9*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_destroy.h"
10*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_getpshared.h"
11*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_getrobust.h"
12*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_gettype.h"
13*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_init.h"
14*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_setpshared.h"
15*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_setrobust.h"
16*83f153ceSSiva Chandra Reddy #include "src/pthread/pthread_mutexattr_settype.h"
17*83f153ceSSiva Chandra Reddy #include "utils/UnitTest/Test.h"
18*83f153ceSSiva Chandra Reddy
19*83f153ceSSiva Chandra Reddy #include <errno.h>
20*83f153ceSSiva Chandra Reddy #include <pthread.h>
21*83f153ceSSiva Chandra Reddy
TEST(LlvmLibcPThreadMutexAttrTest,InitAndDestroy)22*83f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, InitAndDestroy) {
23*83f153ceSSiva Chandra Reddy pthread_mutexattr_t attr;
24*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_init(&attr), 0);
25*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_destroy(&attr), 0);
26*83f153ceSSiva Chandra Reddy }
27*83f153ceSSiva Chandra Reddy
TEST(LlvmLibcPThreadMutexAttrTest,SetAndGetType)28*83f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetType) {
29*83f153ceSSiva Chandra Reddy int type;
30*83f153ceSSiva Chandra Reddy pthread_mutexattr_t attr;
31*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_init(&attr), 0);
32*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_gettype(&attr, &type), 0);
33*83f153ceSSiva Chandra Reddy ASSERT_EQ(type, int(PTHREAD_MUTEX_DEFAULT));
34*83f153ceSSiva Chandra Reddy
35*83f153ceSSiva Chandra Reddy ASSERT_EQ(
36*83f153ceSSiva Chandra Reddy __llvm_libc::pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE),
37*83f153ceSSiva Chandra Reddy 0);
38*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_gettype(&attr, &type), 0);
39*83f153ceSSiva Chandra Reddy ASSERT_EQ(type, int(PTHREAD_MUTEX_RECURSIVE));
40*83f153ceSSiva Chandra Reddy
41*83f153ceSSiva Chandra Reddy ASSERT_EQ(
42*83f153ceSSiva Chandra Reddy __llvm_libc::pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK),
43*83f153ceSSiva Chandra Reddy 0);
44*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_gettype(&attr, &type), 0);
45*83f153ceSSiva Chandra Reddy ASSERT_EQ(type, int(PTHREAD_MUTEX_ERRORCHECK));
46*83f153ceSSiva Chandra Reddy
47*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_settype(&attr, 0xBAD), EINVAL);
48*83f153ceSSiva Chandra Reddy }
49*83f153ceSSiva Chandra Reddy
TEST(LlvmLibcPThreadMutexAttrTest,SetAndGetRobust)50*83f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetRobust) {
51*83f153ceSSiva Chandra Reddy int robust;
52*83f153ceSSiva Chandra Reddy pthread_mutexattr_t attr;
53*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_init(&attr), 0);
54*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_getrobust(&attr, &robust), 0);
55*83f153ceSSiva Chandra Reddy ASSERT_EQ(robust, int(PTHREAD_MUTEX_STALLED));
56*83f153ceSSiva Chandra Reddy
57*83f153ceSSiva Chandra Reddy ASSERT_EQ(
58*83f153ceSSiva Chandra Reddy __llvm_libc::pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST), 0);
59*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_getrobust(&attr, &robust), 0);
60*83f153ceSSiva Chandra Reddy ASSERT_EQ(robust, int(PTHREAD_MUTEX_ROBUST));
61*83f153ceSSiva Chandra Reddy
62*83f153ceSSiva Chandra Reddy ASSERT_EQ(
63*83f153ceSSiva Chandra Reddy __llvm_libc::pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_STALLED),
64*83f153ceSSiva Chandra Reddy 0);
65*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_getrobust(&attr, &robust), 0);
66*83f153ceSSiva Chandra Reddy ASSERT_EQ(robust, int(PTHREAD_MUTEX_STALLED));
67*83f153ceSSiva Chandra Reddy
68*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_setrobust(&attr, 0xBAD), EINVAL);
69*83f153ceSSiva Chandra Reddy }
70*83f153ceSSiva Chandra Reddy
TEST(LlvmLibcPThreadMutexAttrTest,SetAndGetPShared)71*83f153ceSSiva Chandra Reddy TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetPShared) {
72*83f153ceSSiva Chandra Reddy int pshared;
73*83f153ceSSiva Chandra Reddy pthread_mutexattr_t attr;
74*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_init(&attr), 0);
75*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_getpshared(&attr, &pshared), 0);
76*83f153ceSSiva Chandra Reddy ASSERT_EQ(pshared, int(PTHREAD_PROCESS_PRIVATE));
77*83f153ceSSiva Chandra Reddy
78*83f153ceSSiva Chandra Reddy ASSERT_EQ(
79*83f153ceSSiva Chandra Reddy __llvm_libc::pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED),
80*83f153ceSSiva Chandra Reddy 0);
81*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_getpshared(&attr, &pshared), 0);
82*83f153ceSSiva Chandra Reddy ASSERT_EQ(pshared, int(PTHREAD_PROCESS_SHARED));
83*83f153ceSSiva Chandra Reddy
84*83f153ceSSiva Chandra Reddy ASSERT_EQ(
85*83f153ceSSiva Chandra Reddy __llvm_libc::pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_PRIVATE),
86*83f153ceSSiva Chandra Reddy 0);
87*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_getpshared(&attr, &pshared), 0);
88*83f153ceSSiva Chandra Reddy ASSERT_EQ(pshared, int(PTHREAD_PROCESS_PRIVATE));
89*83f153ceSSiva Chandra Reddy
90*83f153ceSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::pthread_mutexattr_setpshared(&attr, 0xBAD), EINVAL);
91*83f153ceSSiva Chandra Reddy }
92