xref: /llvm-project/libc/test/src/pthread/pthread_condattr_test.cpp (revision 854cc8986650267846c5eaf8ba164584a9ea7c01)
106947b9fSNick Desaulniers //===-- Unittests for pthread_condattr_t ----------------------------------===//
206947b9fSNick Desaulniers //
306947b9fSNick Desaulniers // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
406947b9fSNick Desaulniers // See https://llvm.org/LICENSE.txt for license information.
506947b9fSNick Desaulniers // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
606947b9fSNick Desaulniers //
706947b9fSNick Desaulniers //===----------------------------------------------------------------------===//
806947b9fSNick Desaulniers 
9*854cc898SNick Desaulniers #include "include/llvm-libc-macros/generic-error-number-macros.h" // EINVAL
10*854cc898SNick Desaulniers #include "include/llvm-libc-macros/time-macros.h" // CLOCK_REALTIME, CLOCK_MONOTONIC
11*854cc898SNick Desaulniers #include "src/pthread/pthread_condattr_destroy.h"
12*854cc898SNick Desaulniers #include "src/pthread/pthread_condattr_getclock.h"
13*854cc898SNick Desaulniers #include "src/pthread/pthread_condattr_getpshared.h"
14*854cc898SNick Desaulniers #include "src/pthread/pthread_condattr_init.h"
15*854cc898SNick Desaulniers #include "src/pthread/pthread_condattr_setclock.h"
16*854cc898SNick Desaulniers #include "src/pthread/pthread_condattr_setpshared.h"
1706947b9fSNick Desaulniers #include "test/UnitTest/Test.h"
1806947b9fSNick Desaulniers 
19*854cc898SNick Desaulniers // TODO: https://github.com/llvm/llvm-project/issues/88997
20*854cc898SNick Desaulniers #include <pthread.h> // PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_SHARED
2106947b9fSNick Desaulniers 
TEST(LlvmLibcPThreadCondAttrTest,InitAndDestroy)2206947b9fSNick Desaulniers TEST(LlvmLibcPThreadCondAttrTest, InitAndDestroy) {
2306947b9fSNick Desaulniers   pthread_condattr_t cond;
24*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_init(&cond), 0);
25*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_destroy(&cond), 0);
2606947b9fSNick Desaulniers }
2706947b9fSNick Desaulniers 
TEST(LlvmLibcPThreadCondAttrTest,GetDefaultValues)2806947b9fSNick Desaulniers TEST(LlvmLibcPThreadCondAttrTest, GetDefaultValues) {
2906947b9fSNick Desaulniers   pthread_condattr_t cond;
3006947b9fSNick Desaulniers 
3106947b9fSNick Desaulniers   // Invalid clock id.
3206947b9fSNick Desaulniers   clockid_t clock = 7;
3306947b9fSNick Desaulniers   // Invalid value.
3406947b9fSNick Desaulniers   int pshared = 42;
3506947b9fSNick Desaulniers 
36*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_init(&cond), 0);
37*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_getclock(&cond, &clock), 0);
3806947b9fSNick Desaulniers   ASSERT_EQ(clock, CLOCK_REALTIME);
39*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_getpshared(&cond, &pshared), 0);
4006947b9fSNick Desaulniers   ASSERT_EQ(pshared, PTHREAD_PROCESS_PRIVATE);
41*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_destroy(&cond), 0);
4206947b9fSNick Desaulniers }
4306947b9fSNick Desaulniers 
TEST(LlvmLibcPThreadCondAttrTest,SetGoodValues)4406947b9fSNick Desaulniers TEST(LlvmLibcPThreadCondAttrTest, SetGoodValues) {
4506947b9fSNick Desaulniers   pthread_condattr_t cond;
4606947b9fSNick Desaulniers 
4706947b9fSNick Desaulniers   // Invalid clock id.
4806947b9fSNick Desaulniers   clockid_t clock = 7;
4906947b9fSNick Desaulniers   // Invalid value.
5006947b9fSNick Desaulniers   int pshared = 42;
5106947b9fSNick Desaulniers 
52*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_init(&cond), 0);
53*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_setclock(&cond, CLOCK_MONOTONIC),
54*854cc898SNick Desaulniers             0);
55*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_getclock(&cond, &clock), 0);
5606947b9fSNick Desaulniers   ASSERT_EQ(clock, CLOCK_MONOTONIC);
57*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_setpshared(&cond,
58*854cc898SNick Desaulniers                                                         PTHREAD_PROCESS_SHARED),
59*854cc898SNick Desaulniers             0);
60*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_getpshared(&cond, &pshared), 0);
6106947b9fSNick Desaulniers   ASSERT_EQ(pshared, PTHREAD_PROCESS_SHARED);
62*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_destroy(&cond), 0);
6306947b9fSNick Desaulniers }
6406947b9fSNick Desaulniers 
TEST(LlvmLibcPThreadCondAttrTest,SetBadValues)6506947b9fSNick Desaulniers TEST(LlvmLibcPThreadCondAttrTest, SetBadValues) {
6606947b9fSNick Desaulniers   pthread_condattr_t cond;
6706947b9fSNick Desaulniers 
6806947b9fSNick Desaulniers   // Invalid clock id.
6906947b9fSNick Desaulniers   clockid_t clock = 7;
7006947b9fSNick Desaulniers   // Invalid value.
7106947b9fSNick Desaulniers   int pshared = 42;
7206947b9fSNick Desaulniers 
73*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_init(&cond), 0);
74*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_setclock(&cond, clock), EINVAL);
75*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_getclock(&cond, &clock), 0);
7606947b9fSNick Desaulniers   ASSERT_EQ(clock, CLOCK_REALTIME);
77*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_setpshared(&cond, pshared),
78*854cc898SNick Desaulniers             EINVAL);
79*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_getpshared(&cond, &pshared), 0);
8006947b9fSNick Desaulniers   ASSERT_EQ(pshared, PTHREAD_PROCESS_PRIVATE);
81*854cc898SNick Desaulniers   ASSERT_EQ(LIBC_NAMESPACE::pthread_condattr_destroy(&cond), 0);
8206947b9fSNick Desaulniers }
83