xref: /aosp_15_r20/external/llvm-libc/test/src/sched/affinity_test.cpp (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- Unittests for sched_getaffinity and sched_setaffinity -------------===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker 
9*71db0c75SAndroid Build Coastguard Worker #include "src/__support/OSUtil/syscall.h"
10*71db0c75SAndroid Build Coastguard Worker #include "src/errno/libc_errno.h"
11*71db0c75SAndroid Build Coastguard Worker #include "src/sched/sched_getaffinity.h"
12*71db0c75SAndroid Build Coastguard Worker #include "src/sched/sched_setaffinity.h"
13*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/ErrnoSetterMatcher.h"
14*71db0c75SAndroid Build Coastguard Worker 
15*71db0c75SAndroid Build Coastguard Worker #include <sched.h>
16*71db0c75SAndroid Build Coastguard Worker #include <sys/syscall.h>
17*71db0c75SAndroid Build Coastguard Worker 
TEST(LlvmLibcSchedAffinityTest,SmokeTest)18*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSchedAffinityTest, SmokeTest) {
19*71db0c75SAndroid Build Coastguard Worker   cpu_set_t mask;
20*71db0c75SAndroid Build Coastguard Worker   LIBC_NAMESPACE::libc_errno = 0;
21*71db0c75SAndroid Build Coastguard Worker   using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
22*71db0c75SAndroid Build Coastguard Worker   pid_t tid = LIBC_NAMESPACE::syscall_impl<pid_t>(SYS_gettid);
23*71db0c75SAndroid Build Coastguard Worker   ASSERT_GT(tid, pid_t(0));
24*71db0c75SAndroid Build Coastguard Worker   // We just get and set the same mask.
25*71db0c75SAndroid Build Coastguard Worker   ASSERT_THAT(LIBC_NAMESPACE::sched_getaffinity(tid, sizeof(cpu_set_t), &mask),
26*71db0c75SAndroid Build Coastguard Worker               Succeeds(0));
27*71db0c75SAndroid Build Coastguard Worker   ASSERT_THAT(LIBC_NAMESPACE::sched_setaffinity(tid, sizeof(cpu_set_t), &mask),
28*71db0c75SAndroid Build Coastguard Worker               Succeeds(0));
29*71db0c75SAndroid Build Coastguard Worker }
30*71db0c75SAndroid Build Coastguard Worker 
TEST(LlvmLibcSchedAffinityTest,BadMask)31*71db0c75SAndroid Build Coastguard Worker TEST(LlvmLibcSchedAffinityTest, BadMask) {
32*71db0c75SAndroid Build Coastguard Worker   using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
33*71db0c75SAndroid Build Coastguard Worker   pid_t tid = LIBC_NAMESPACE::syscall_impl<pid_t>(SYS_gettid);
34*71db0c75SAndroid Build Coastguard Worker 
35*71db0c75SAndroid Build Coastguard Worker   LIBC_NAMESPACE::libc_errno = 0;
36*71db0c75SAndroid Build Coastguard Worker   ASSERT_THAT(
37*71db0c75SAndroid Build Coastguard Worker       LIBC_NAMESPACE::sched_getaffinity(tid, sizeof(cpu_set_t), nullptr),
38*71db0c75SAndroid Build Coastguard Worker       Fails(EFAULT));
39*71db0c75SAndroid Build Coastguard Worker 
40*71db0c75SAndroid Build Coastguard Worker   LIBC_NAMESPACE::libc_errno = 0;
41*71db0c75SAndroid Build Coastguard Worker   ASSERT_THAT(
42*71db0c75SAndroid Build Coastguard Worker       LIBC_NAMESPACE::sched_setaffinity(tid, sizeof(cpu_set_t), nullptr),
43*71db0c75SAndroid Build Coastguard Worker       Fails(EFAULT));
44*71db0c75SAndroid Build Coastguard Worker 
45*71db0c75SAndroid Build Coastguard Worker   LIBC_NAMESPACE::libc_errno = 0;
46*71db0c75SAndroid Build Coastguard Worker }
47