// Copyright 2023 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
//    list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
//    this list of conditions and the following disclaimer in the documentation
//    and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
//    contributors may be used to endorse or promote products derived from
//    this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

////////////////////////////////////////////////////////////////////////////////
// File generated by 'tools/src/cmd/gen' using the template:
//   src/tint/cmd/bench/attribute_bench.cc.tmpl
//
// To regenerate run: './tools/run gen'
//
//                       Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/lang/core/attribute.h"

#include <array>

#include "benchmark/benchmark.h"

namespace tint::core {
namespace {

void AttributeParser(::benchmark::State& state) {
    const char* kStrings[] = {
        "alccn",
        "3g",
        "aVign",
        "align",
        "alig1",
        "qqlJn",
        "alill7n",
        "ppqqndnHH",
        "bicv",
        "bndiGg",
        "binding",
        "bindiivg",
        "8WWnding",
        "bxxding",
        "bXnd_ggrc",
        "bleXVuc",
        "3lend_src",
        "blend_src",
        "blend_sEc",
        "blTTPn_src",
        "ddlen_sxxc",
        "b44iltin",
        "buSSltVVn",
        "RuiR22n",
        "builtin",
        "bFlt9n",
        "buitin",
        "VOORRHin",
        "olyr",
        "n77rrllGr",
        "colo40",
        "color",
        "oor",
        "cozz",
        "1ippor",
        "compuXXe",
        "9II5onnpute",
        "comaSSrHHYe",
        "compute",
        "cokke",
        "jomgRu",
        "cbput",
        "diagnojtic",
        "dagnostic",
        "diagosqi",
        "diagnostic",
        "diagnNNstc",
        "dignvvtic",
        "diagnostiQ",
        "frafmrt",
        "frjgment",
        "frawNN82t",
        "fragment",
        "fragmnt",
        "frrrgment",
        "fGagment",
        "grFFup",
        "gE",
        "grrrp",
        "group",
        "grp",
        "grJJD",
        "gu",
        "K",
        "FsJ",
        "KK_v",
        "id",
        "5O8",
        "",
        "DDbbB",
        "input_attachment_indKKx",
        "33nput_attacOmentindex",
        "ittp6t_attaQQhmeoot_9ndex",
        "input_attachment_index",
        "nput_attac66ment_index",
        "inpt_attachmOnx_inde6zz",
        "input_attacyyment_index",
        "nterZZHate",
        "WWnerpolaq4e",
        "interOOoate",
        "interpolate",
        "iYohepolte",
        "inteolat",
        "interoFate",
        "invarwnt",
        "GvrKanff",
        "KKnqariant",
        "invariant",
        "invammia3t",
        "invarint",
        "inqriant",
        "obbatibn",
        "lcaiiio",
        "loqatiOn",
        "location",
        "loTTatiovv",
        "FFocation",
        "fo00QPio",
        "must_uPe",
        "ust_uss77",
        "mustCubbRe",
        "must_use",
        "must_usXX",
        "muOOt_CCse",
        "sst_usL",
        "sizX",
        "sze",
        "qq",
        "size",
        "s22ze",
        "iz0yz",
        "VPzi",
        "vrtCnn",
        "ArqqHHx",
        "ertex",
        "vertex",
        "vefKK",
        "Pegge",
        "verte",
        "4orkgrouTT_Nizc",
        "worgrouppp7lize",
        "wgzrkgrup_siNe",
        "workgroup_size",
        "uuorkgbop_sXXze",
        "worgroup_size",
        "worKgroQ_88ze",
    };
    for (auto _ : state) {
        for (auto* str : kStrings) {
            auto result = ParseAttribute(str);
            benchmark::DoNotOptimize(result);
        }
    }
}  // NOLINT(readability/fn_size)

BENCHMARK(AttributeParser);

}  // namespace
}  // namespace tint::core
