// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <errno.h>
#include <unistd.h>
#include <zxtest/zxtest.h>

namespace {

TEST(SysconfTest, NProcessors) {
  long rv;
  rv = sysconf(_SC_NPROCESSORS_CONF);
  EXPECT_GE(rv, 1, "wrong number of cpus configured");
  rv = sysconf(_SC_NPROCESSORS_ONLN);
  EXPECT_GE(rv, 1, "wrong number of cpus currently online");
}

TEST(SysconfTest, InvalidInput) {
  // test on invalid input
  errno = 0;
  long rv = sysconf(-1);
  EXPECT_EQ(rv, -1, "wrong return value on invalid input");
  EXPECT_EQ(errno, EINVAL, "wrong errno value on invalid input");
}

TEST(SysconfTest, IndeterminateLimit) {
  // Indeterminate limit.
  errno = 0;
  long rv = sysconf(_SC_ARG_MAX);
  EXPECT_EQ(rv, -1, "wrong return value for indeterminate limit {ARG_MAX}");
  EXPECT_EQ(errno, 0, "wrong errno value for indeterminate limit {ARG_MAX}");
}

}  // anonymous namespace
