// 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/lang/core/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",
        "bXltigg",
        "ultXn",
        "buil3in",
        "builtin",
        "Euiltin",
        "bPTTltin",
        "builtdxx",
        "c44lor",
        "coVVSSr",
        "22RRr",
        "color",
        "cFor",
        "colr",
        "ROOHVr",
        "copuye",
        "llnorrp77te",
        "comp4t00",
        "compute",
        "opooe",
        "zzpute",
        "ciimppu1",
        "XXiagnostic",
        "IIia99nonnt55c",
        "dYagSSrrstHHac",
        "diagnostic",
        "dakkoHtc",
        "jiagnsgRR",
        "diagbost",
        "fragjent",
        "fragmnt",
        "frqent",
        "fragment",
        "fragenNN",
        "ravvent",
        "frgmQQnt",
        "grof",
        "grojp",
        "NNrw2u",
        "group",
        "grup",
        "grroup",
        "Group",
        "iFF",
        "NN",
        "iAA",
        "id",
        "d",
        "L",
        "yy",
        "nek",
        "indx",
        "Jndx",
        "index",
        "incex",
        "iOdex",
        "__nttKKvv",
        "int8rpoxx5e",
        "inteqq__lte",
        "interpqlate",
        "interpolate",
        "33ntOpolat66",
        "intoott6QQlate",
        "66terpolate",
        "zzxvO6rint",
        "invayyiant",
        "HHnariZt",
        "invariant",
        "iWW44rianq",
        "iOOvaiant",
        "ivariYnt",
        "ltion",
        "loaFion",
        "wocatio",
        "location",
        "Kcatoff",
        "qocKKtion",
        "lFcmmt3on",
        "mustuse",
        "must_se",
        "ubbt_ube",
        "must_use",
        "mstiius",
        "muqt_uOe",
        "muTTt_usvv",
        "FFize",
        "QP00",
        "siPe",
        "size",
        "sis77",
        "CiRbbe",
        "sizXX",
        "CCrtOOOO",
        "vrsuL",
        "verteX",
        "vertex",
        "verte",
        "qqrx",
        "verte22",
        "workgou0yzzizXX",
        "workgrop_VPize",
        "wokgroupnnsCze",
        "workgroup_size",
        "workgrouq_sizHA",
        "workgrup_size",
        "forroupKKsize",
    };
    for (auto _ : state) {
        for (auto* str : kStrings) {
            auto result = ParseAttribute(str);
            benchmark::DoNotOptimize(result);
        }
    }
}  // NOLINT(readability/fn_size)

BENCHMARK(AttributeParser);

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