// Copyright 2022 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

////////////////////////////////////////////////////////////////////////////////
// File generated by tools/src/cmd/gen
// using the template:
//   src/tint/type/builtin_test.cc.tmpl
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////

#include "src/tint/type/builtin.h"

#include <string>

#include "gtest/gtest.h"

#include "src/tint/utils/string.h"

namespace tint::type {
namespace {

namespace parse_print_tests {

struct Case {
    const char* string;
    Builtin value;
};

inline std::ostream& operator<<(std::ostream& out, Case c) {
    return out << "'" << std::string(c.string) << "'";
}

static constexpr Case kValidCases[] = {
    {"bool", Builtin::kBool},
    {"f16", Builtin::kF16},
    {"f32", Builtin::kF32},
    {"i32", Builtin::kI32},
    {"mat2x2f", Builtin::kMat2X2F},
    {"mat2x2h", Builtin::kMat2X2H},
    {"mat2x3f", Builtin::kMat2X3F},
    {"mat2x3h", Builtin::kMat2X3H},
    {"mat2x4f", Builtin::kMat2X4F},
    {"mat2x4h", Builtin::kMat2X4H},
    {"mat3x2f", Builtin::kMat3X2F},
    {"mat3x2h", Builtin::kMat3X2H},
    {"mat3x3f", Builtin::kMat3X3F},
    {"mat3x3h", Builtin::kMat3X3H},
    {"mat3x4f", Builtin::kMat3X4F},
    {"mat3x4h", Builtin::kMat3X4H},
    {"mat4x2f", Builtin::kMat4X2F},
    {"mat4x2h", Builtin::kMat4X2H},
    {"mat4x3f", Builtin::kMat4X3F},
    {"mat4x3h", Builtin::kMat4X3H},
    {"mat4x4f", Builtin::kMat4X4F},
    {"mat4x4h", Builtin::kMat4X4H},
    {"sampler", Builtin::kSampler},
    {"sampler_comparison", Builtin::kSamplerComparison},
    {"texture_depth_2d", Builtin::kTextureDepth2D},
    {"texture_depth_2d_array", Builtin::kTextureDepth2DArray},
    {"texture_depth_cube", Builtin::kTextureDepthCube},
    {"texture_depth_cube_array", Builtin::kTextureDepthCubeArray},
    {"texture_depth_multisampled_2d", Builtin::kTextureDepthMultisampled2D},
    {"texture_external", Builtin::kTextureExternal},
    {"texture_storage_1d", Builtin::kTextureStorage1D},
    {"texture_storage_2d", Builtin::kTextureStorage2D},
    {"texture_storage_2d_array", Builtin::kTextureStorage2DArray},
    {"texture_storage_3d", Builtin::kTextureStorage3D},
    {"u32", Builtin::kU32},
    {"vec2f", Builtin::kVec2F},
    {"vec2h", Builtin::kVec2H},
    {"vec2i", Builtin::kVec2I},
    {"vec2u", Builtin::kVec2U},
    {"vec3f", Builtin::kVec3F},
    {"vec3h", Builtin::kVec3H},
    {"vec3i", Builtin::kVec3I},
    {"vec3u", Builtin::kVec3U},
    {"vec4f", Builtin::kVec4F},
    {"vec4h", Builtin::kVec4H},
    {"vec4i", Builtin::kVec4I},
    {"vec4u", Builtin::kVec4U},
};

static constexpr Case kInvalidCases[] = {
    {"ccol", Builtin::kUndefined},
    {"3", Builtin::kUndefined},
    {"bVol", Builtin::kUndefined},
    {"116", Builtin::kUndefined},
    {"qJ6", Builtin::kUndefined},
    {"f17ll", Builtin::kUndefined},
    {"fppqH", Builtin::kUndefined},
    {"", Builtin::kUndefined},
    {"Gb", Builtin::kUndefined},
    {"i3vi", Builtin::kUndefined},
    {"i8WW", Builtin::kUndefined},
    {"ixx", Builtin::kUndefined},
    {"mX2x2gg", Builtin::kUndefined},
    {"a2xXf", Builtin::kUndefined},
    {"mat232f", Builtin::kUndefined},
    {"Eat2x2h", Builtin::kUndefined},
    {"mPTT2x2h", Builtin::kUndefined},
    {"mat2xdxx", Builtin::kUndefined},
    {"m44t2x3f", Builtin::kUndefined},
    {"maSS2xVVf", Builtin::kUndefined},
    {"RatR22f", Builtin::kUndefined},
    {"mF2x9h", Builtin::kUndefined},
    {"matx3h", Builtin::kUndefined},
    {"VOORRH3h", Builtin::kUndefined},
    {"ma2xyf", Builtin::kUndefined},
    {"llnarr2774f", Builtin::kUndefined},
    {"mat24400", Builtin::kUndefined},
    {"a2ooh", Builtin::kUndefined},
    {"zz2x4h", Builtin::kUndefined},
    {"miitppx1", Builtin::kUndefined},
    {"mat3xXXf", Builtin::kUndefined},
    {"9II5ann3x2f", Builtin::kUndefined},
    {"mataSSrHHYf", Builtin::kUndefined},
    {"makkh", Builtin::kUndefined},
    {"jatgRx", Builtin::kUndefined},
    {"mb3x2", Builtin::kUndefined},
    {"mat3xjf", Builtin::kUndefined},
    {"at3x3f", Builtin::kUndefined},
    {"q3x3f", Builtin::kUndefined},
    {"matNN3h", Builtin::kUndefined},
    {"at33vv", Builtin::kUndefined},
    {"QQt3x3h", Builtin::kUndefined},
    {"maffxr", Builtin::kUndefined},
    {"mat3xjf", Builtin::kUndefined},
    {"mNNw3x48", Builtin::kUndefined},
    {"matx4h", Builtin::kUndefined},
    {"mrrt3x4h", Builtin::kUndefined},
    {"Gat3x4h", Builtin::kUndefined},
    {"mat4x2FF", Builtin::kUndefined},
    {"at4f", Builtin::kUndefined},
    {"marrx2f", Builtin::kUndefined},
    {"t4x2h", Builtin::kUndefined},
    {"Da4xJJh", Builtin::kUndefined},
    {"ma82", Builtin::kUndefined},
    {"m11k3", Builtin::kUndefined},
    {"matx3f", Builtin::kUndefined},
    {"maJx3f", Builtin::kUndefined},
    {"mat4c3h", Builtin::kUndefined},
    {"mat4x3O", Builtin::kUndefined},
    {"KK_atvvtt3h", Builtin::kUndefined},
    {"xx84x4f", Builtin::kUndefined},
    {"__qatF4", Builtin::kUndefined},
    {"matqx4f", Builtin::kUndefined},
    {"33atOx4h", Builtin::kUndefined},
    {"mtt64x9oQQ", Builtin::kUndefined},
    {"ma4x66h", Builtin::kUndefined},
    {"smOlzz66", Builtin::kUndefined},
    {"sampyyer", Builtin::kUndefined},
    {"ZaHHeZ", Builtin::kUndefined},
    {"sWWpleq_compari44on", Builtin::kUndefined},
    {"sampler_compaisoOO", Builtin::kUndefined},
    {"smpeoo_coYparison", Builtin::kUndefined},
    {"eture_dpth_2d", Builtin::kUndefined},
    {"texture_detF_2d", Builtin::kUndefined},
    {"texturedwpth_2d", Builtin::kUndefined},
    {"teKuffe_Gepth_2d_arry", Builtin::kUndefined},
    {"texture_dKKptq_2d_array", Builtin::kUndefined},
    {"texture_depmmh32d_arraF", Builtin::kUndefined},
    {"textur_depth_cube", Builtin::kUndefined},
    {"texure_depqh_cube", Builtin::kUndefined},
    {"texture_debth_cube", Builtin::kUndefined},
    {"txture_deptii_cube_arry", Builtin::kUndefined},
    {"textureqdepth_OOube_arry", Builtin::kUndefined},
    {"texture_deTvvth_cube_array", Builtin::kUndefined},
    {"texture_depth_multiFFampled_2d", Builtin::kUndefined},
    {"textue_depthPmfl00isampled_Qd", Builtin::kUndefined},
    {"textuPe_depth_multisampled_2d", Builtin::kUndefined},
    {"texture_exernss77", Builtin::kUndefined},
    {"texture_bbxternRRl", Builtin::kUndefined},
    {"textureXXexternal", Builtin::kUndefined},
    {"CCextOOre_stoage_qOd", Builtin::kUndefined},
    {"txtsre_sturage_1L", Builtin::kUndefined},
    {"texture_stoXage_1d", Builtin::kUndefined},
    {"textue_storage_2d", Builtin::kUndefined},
    {"teuresOorageqq2d", Builtin::kUndefined},
    {"texture_sto22age_2d", Builtin::kUndefined},
    {"exture_syora0e_2d_Xzzrray", Builtin::kUndefined},
    {"texiVVr_storageP2d_array", Builtin::kUndefined},
    {"texturestorage_2nn_arCay", Builtin::kUndefined},
    {"texturHHstorAAe_qqd", Builtin::kUndefined},
    {"textur_storage_3d", Builtin::kUndefined},
    {"texure_sfKorage3d", Builtin::kUndefined},
    {"gg", Builtin::kUndefined},
    {"u3", Builtin::kUndefined},
    {"NT42", Builtin::kUndefined},
    {"ppec7l", Builtin::kUndefined},
    {"zNe2f", Builtin::kUndefined},
    {"uXXb2f", Builtin::kUndefined},
    {"vec2", Builtin::kUndefined},
    {"882K", Builtin::kUndefined},
    {"vq9h", Builtin::kUndefined},
    {"vec211", Builtin::kUndefined},
    {"22ciii", Builtin::kUndefined},
    {"ec77i", Builtin::kUndefined},
    {"NN22u", Builtin::kUndefined},
    {"vVVc2u", Builtin::kUndefined},
    {"WW11w2u", Builtin::kUndefined},
    {"vcwwf", Builtin::kUndefined},
    {"vDc3f", Builtin::kUndefined},
    {"vecK", Builtin::kUndefined},
    {"f11r3PP", Builtin::kUndefined},
    {"ve3h", Builtin::kUndefined},
    {"vec3YY", Builtin::kUndefined},
    {"vkktHH", Builtin::kUndefined},
    {"rrec3i", Builtin::kUndefined},
    {"vWWssi", Builtin::kUndefined},
    {"veYu", Builtin::kUndefined},
    {"eq3f", Builtin::kUndefined},
    {"u22ec3u", Builtin::kUndefined},
    {"c4f", Builtin::kUndefined},
    {"vec4", Builtin::kUndefined},
    {"vYyc47E", Builtin::kUndefined},
    {"veMoh", Builtin::kUndefined},
    {"ve4MM", Builtin::kUndefined},
    {"55ec4h", Builtin::kUndefined},
    {"N4i", Builtin::kUndefined},
    {"ve33i", Builtin::kUndefined},
    {"3ec4i", Builtin::kUndefined},
    {"mecI", Builtin::kUndefined},
    {"vrnK4u", Builtin::kUndefined},
    {"v4", Builtin::kUndefined},
};

using BuiltinParseTest = testing::TestWithParam<Case>;

TEST_P(BuiltinParseTest, Parse) {
    const char* string = GetParam().string;
    Builtin expect = GetParam().value;
    EXPECT_EQ(expect, ParseBuiltin(string));
}

INSTANTIATE_TEST_SUITE_P(ValidCases, BuiltinParseTest, testing::ValuesIn(kValidCases));
INSTANTIATE_TEST_SUITE_P(InvalidCases, BuiltinParseTest, testing::ValuesIn(kInvalidCases));

using BuiltinPrintTest = testing::TestWithParam<Case>;

TEST_P(BuiltinPrintTest, Print) {
    Builtin value = GetParam().value;
    const char* expect = GetParam().string;
    EXPECT_EQ(expect, utils::ToString(value));
}

INSTANTIATE_TEST_SUITE_P(ValidCases, BuiltinPrintTest, testing::ValuesIn(kValidCases));

}  // namespace parse_print_tests

}  // namespace
}  // namespace tint::type
