// Copyright 2020 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 <lib/fidl/coding.h>

#include <perftest/perftest.h>
#include <test/benchmarkfidl/cpp/fidl.h>

#include "data.h"

namespace {

#define BENCHMARK_FOR(Name, Num)                                                 \
  bool Benchmark##Name##S##Num(perftest::RepeatState* state) {                   \
    while (state->KeepRunning()) {                                               \
      const char* bytes = lib_fidl_microbenchmarks::Name##_S_##Num;              \
      uint32_t num_bytes = sizeof(lib_fidl_microbenchmarks::Name##_S_##Num) - 1; \
      ZX_ASSERT(fidl_validate_string(bytes, num_bytes));                         \
    }                                                                            \
    return true;                                                                 \
  }

BENCHMARK_FOR(Utf8, 258)
BENCHMARK_FOR(Utf8, 1025)
BENCHMARK_FOR(Utf8, 4098)
BENCHMARK_FOR(Utf8, 16385)
BENCHMARK_FOR(Utf8, 65536)

BENCHMARK_FOR(Ascii, 258)
BENCHMARK_FOR(Ascii, 1025)
BENCHMARK_FOR(Ascii, 4098)
BENCHMARK_FOR(Ascii, 16385)
BENCHMARK_FOR(Ascii, 65536)

void RegisterTests() {
  perftest::RegisterTest("LibFIDL/fidl_validate_string/258/WallTime", BenchmarkUtf8S258);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/1025/WallTime", BenchmarkUtf8S1025);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/4098/WallTime", BenchmarkUtf8S4098);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/16385/WallTime", BenchmarkUtf8S16385);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/65536/WallTime", BenchmarkUtf8S65536);

  perftest::RegisterTest("LibFIDL/fidl_validate_string/ASCII/258/WallTime", BenchmarkAsciiS258);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/ASCII/1025/WallTime", BenchmarkAsciiS1025);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/ASCII/4098/WallTime", BenchmarkAsciiS4098);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/ASCII/16385/WallTime", BenchmarkAsciiS16385);
  perftest::RegisterTest("LibFIDL/fidl_validate_string/ASCII/65536/WallTime", BenchmarkAsciiS65536);
}
PERFTEST_CTOR(RegisterTests)

}  // namespace
