//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// Unittests for clock_getcpuclockid.
///
//===----------------------------------------------------------------------===//

#include "hdr/errno_macros.h"
#include "hdr/types/clockid_t.h"
#include "hdr/types/pid_t.h"
#include "hdr/types/struct_timespec.h"
#include "src/time/clock_getcpuclockid.h"
#include "src/time/clock_gettime.h"
#include "src/unistd/getpid.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/Test.h"

using LlvmLibcClockGetCpuClockIdTest =
    LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST_F(LlvmLibcClockGetCpuClockIdTest, CurrentProcessZeroPid) {
  clockid_t clock_id = 0;
  ASSERT_EQ(LIBC_NAMESPACE::clock_getcpuclockid(0, &clock_id), 0);
  // On Linux, pid 0 translates to (~0 << 3) | 2 == -6.
  EXPECT_EQ(clock_id, static_cast<clockid_t>(-6));

  // Validate that we can use resulting clock_id to get time.
  struct timespec ts;
  EXPECT_EQ(LIBC_NAMESPACE::clock_gettime(clock_id, &ts), 0);
  EXPECT_GE(ts.tv_sec, static_cast<time_t>(0));
}

TEST_F(LlvmLibcClockGetCpuClockIdTest, CurrentProcessExplicitPid) {
  pid_t pid = LIBC_NAMESPACE::getpid();
  clockid_t clock_id = 0;
  ASSERT_EQ(LIBC_NAMESPACE::clock_getcpuclockid(pid, &clock_id), 0);
  EXPECT_EQ(clock_id,
            static_cast<clockid_t>((static_cast<unsigned int>(~pid) << 3) | 2));

  // Validate that we can use resulting clock_id to get time.
  struct timespec ts;
  EXPECT_EQ(LIBC_NAMESPACE::clock_gettime(clock_id, &ts), 0);
  EXPECT_GE(ts.tv_sec, static_cast<time_t>(0));
}

TEST_F(LlvmLibcClockGetCpuClockIdTest, InvalidPid) {
  clockid_t clock_id = 0;
  // Invalid PIDs should fail with ESRCH.
  EXPECT_EQ(LIBC_NAMESPACE::clock_getcpuclockid(-1, &clock_id), ESRCH);
  EXPECT_EQ(LIBC_NAMESPACE::clock_getcpuclockid(1000000000, &clock_id), ESRCH);
}
