92 lines · cpp
1//===-- Unittests for pthread_mutexattr_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-exception6//7//===----------------------------------------------------------------------===//8 9#include "hdr/errno_macros.h"10#include "src/pthread/pthread_mutexattr_destroy.h"11#include "src/pthread/pthread_mutexattr_getpshared.h"12#include "src/pthread/pthread_mutexattr_getrobust.h"13#include "src/pthread/pthread_mutexattr_gettype.h"14#include "src/pthread/pthread_mutexattr_init.h"15#include "src/pthread/pthread_mutexattr_setpshared.h"16#include "src/pthread/pthread_mutexattr_setrobust.h"17#include "src/pthread/pthread_mutexattr_settype.h"18#include "test/UnitTest/Test.h"19#include <pthread.h>20 21TEST(LlvmLibcPThreadMutexAttrTest, InitAndDestroy) {22 pthread_mutexattr_t attr;23 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0);24 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_destroy(&attr), 0);25}26 27TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetType) {28 int type;29 pthread_mutexattr_t attr;30 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0);31 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_gettype(&attr, &type), 0);32 ASSERT_EQ(type, int(PTHREAD_MUTEX_DEFAULT));33 34 ASSERT_EQ(35 LIBC_NAMESPACE::pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE),36 0);37 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_gettype(&attr, &type), 0);38 ASSERT_EQ(type, int(PTHREAD_MUTEX_RECURSIVE));39 40 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_settype(&attr,41 PTHREAD_MUTEX_ERRORCHECK),42 0);43 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_gettype(&attr, &type), 0);44 ASSERT_EQ(type, int(PTHREAD_MUTEX_ERRORCHECK));45 46 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_settype(&attr, 0xBAD), EINVAL);47}48 49TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetRobust) {50 int robust;51 pthread_mutexattr_t attr;52 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0);53 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getrobust(&attr, &robust), 0);54 ASSERT_EQ(robust, int(PTHREAD_MUTEX_STALLED));55 56 ASSERT_EQ(57 LIBC_NAMESPACE::pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST),58 0);59 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getrobust(&attr, &robust), 0);60 ASSERT_EQ(robust, int(PTHREAD_MUTEX_ROBUST));61 62 ASSERT_EQ(63 LIBC_NAMESPACE::pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_STALLED),64 0);65 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getrobust(&attr, &robust), 0);66 ASSERT_EQ(robust, int(PTHREAD_MUTEX_STALLED));67 68 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setrobust(&attr, 0xBAD), EINVAL);69}70 71TEST(LlvmLibcPThreadMutexAttrTest, SetAndGetPShared) {72 int pshared;73 pthread_mutexattr_t attr;74 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_init(&attr), 0);75 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getpshared(&attr, &pshared), 0);76 ASSERT_EQ(pshared, int(PTHREAD_PROCESS_PRIVATE));77 78 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setpshared(79 &attr, PTHREAD_PROCESS_SHARED),80 0);81 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getpshared(&attr, &pshared), 0);82 ASSERT_EQ(pshared, int(PTHREAD_PROCESS_SHARED));83 84 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setpshared(85 &attr, PTHREAD_PROCESS_PRIVATE),86 0);87 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_getpshared(&attr, &pshared), 0);88 ASSERT_EQ(pshared, int(PTHREAD_PROCESS_PRIVATE));89 90 ASSERT_EQ(LIBC_NAMESPACE::pthread_mutexattr_setpshared(&attr, 0xBAD), EINVAL);91}92