// Copyright 2019 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 <gtest/gtest.h>

#include "tools/fidlcat/interception_tests/interception_workflow_test.h"

namespace fidlcat {

// zx_ticks_get tests.

std::unique_ptr<SystemCallTest> ZxTicksGet(int64_t result, std::string_view result_name) {
  return std::make_unique<SystemCallTest>("zx_ticks_get", result, result_name);
}

#define TICKS_GET_DISPLAY_TEST_CONTENT(result, expected) \
  PerformDisplayTest("$plt(zx_ticks_get)", ZxTicksGet(result, #result), expected)

#define TICKS_GET_DISPLAY_TEST(name, errno, expected)                                            \
  TEST_F(InterceptionWorkflowTestX64, name) { TICKS_GET_DISPLAY_TEST_CONTENT(errno, expected); } \
  TEST_F(InterceptionWorkflowTestArm, name) { TICKS_GET_DISPLAY_TEST_CONTENT(errno, expected); }

TICKS_GET_DISPLAY_TEST(ZxTicksGet, 497475301988264,
                       "\n"
                       "\x1B[32m0.000000\x1B[0m "
                       "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m zx_ticks_get()\n"
                       "\x1B[32m0.000000\x1B[0m "
                       "  -> \x1B[32mticks\x1B[0m: \x1B[34m497475301988264\x1B[0m\n")

// zx_ticks_per_second tests.

std::unique_ptr<SystemCallTest> ZxTicksPerSecond(int64_t result, std::string_view result_name) {
  return std::make_unique<SystemCallTest>("zx_ticks_per_second", result, result_name);
}

#define TICKS_PER_SECOND_DISPLAY_TEST_CONTENT(result, expected) \
  PerformDisplayTest("$plt(zx_ticks_per_second)", ZxTicksPerSecond(result, #result), expected)

#define TICKS_PER_SECOND_DISPLAY_TEST(name, errno, expected) \
  TEST_F(InterceptionWorkflowTestX64, name) {                \
    TICKS_PER_SECOND_DISPLAY_TEST_CONTENT(errno, expected);  \
  }                                                          \
  TEST_F(InterceptionWorkflowTestArm, name) {                \
    TICKS_PER_SECOND_DISPLAY_TEST_CONTENT(errno, expected);  \
  }

TICKS_PER_SECOND_DISPLAY_TEST(
    ZxTicksPerSecond, 2992964000,
    "\n"
    "\x1B[32m0.000000\x1B[0m "
    "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m zx_ticks_per_second()\n"
    "\x1B[32m0.000000\x1B[0m "
    "  -> \x1B[32mticks\x1B[0m: \x1B[34m2992964000\x1B[0m\n")

}  // namespace fidlcat
