blob: 1051dfdda8f139b4b833f74d9f3008d560b93865 [file] [log] [blame]
// Copyright 2021 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.
#include "src/tint/lang/wgsl/sem/builtin.h"
#include "gtest/gtest.h"
namespace tint::sem {
namespace {
struct BuiltinData {
const char* name;
builtin::Function builtin;
};
inline std::ostream& operator<<(std::ostream& out, BuiltinData data) {
out << data.name;
return out;
}
using BuiltinFunctionTest = testing::TestWithParam<BuiltinData>;
TEST_P(BuiltinFunctionTest, Parse) {
auto param = GetParam();
EXPECT_EQ(builtin::ParseFunction(param.name), param.builtin);
}
INSTANTIATE_TEST_SUITE_P(
BuiltinFunctionTest,
BuiltinFunctionTest,
testing::Values(BuiltinData{"abs", builtin::Function::kAbs},
BuiltinData{"acos", builtin::Function::kAcos},
BuiltinData{"all", builtin::Function::kAll},
BuiltinData{"any", builtin::Function::kAny},
BuiltinData{"arrayLength", builtin::Function::kArrayLength},
BuiltinData{"asin", builtin::Function::kAsin},
BuiltinData{"atan", builtin::Function::kAtan},
BuiltinData{"atan2", builtin::Function::kAtan2},
BuiltinData{"ceil", builtin::Function::kCeil},
BuiltinData{"clamp", builtin::Function::kClamp},
BuiltinData{"cos", builtin::Function::kCos},
BuiltinData{"cosh", builtin::Function::kCosh},
BuiltinData{"countOneBits", builtin::Function::kCountOneBits},
BuiltinData{"cross", builtin::Function::kCross},
BuiltinData{"determinant", builtin::Function::kDeterminant},
BuiltinData{"distance", builtin::Function::kDistance},
BuiltinData{"dot", builtin::Function::kDot},
BuiltinData{"dot4I8Packed", builtin::Function::kDot4I8Packed},
BuiltinData{"dot4U8Packed", builtin::Function::kDot4U8Packed},
BuiltinData{"dpdx", builtin::Function::kDpdx},
BuiltinData{"dpdxCoarse", builtin::Function::kDpdxCoarse},
BuiltinData{"dpdxFine", builtin::Function::kDpdxFine},
BuiltinData{"dpdy", builtin::Function::kDpdy},
BuiltinData{"dpdyCoarse", builtin::Function::kDpdyCoarse},
BuiltinData{"dpdyFine", builtin::Function::kDpdyFine},
BuiltinData{"exp", builtin::Function::kExp},
BuiltinData{"exp2", builtin::Function::kExp2},
BuiltinData{"faceForward", builtin::Function::kFaceForward},
BuiltinData{"floor", builtin::Function::kFloor},
BuiltinData{"fma", builtin::Function::kFma},
BuiltinData{"fract", builtin::Function::kFract},
BuiltinData{"frexp", builtin::Function::kFrexp},
BuiltinData{"fwidth", builtin::Function::kFwidth},
BuiltinData{"fwidthCoarse", builtin::Function::kFwidthCoarse},
BuiltinData{"fwidthFine", builtin::Function::kFwidthFine},
BuiltinData{"inverseSqrt", builtin::Function::kInverseSqrt},
BuiltinData{"ldexp", builtin::Function::kLdexp},
BuiltinData{"length", builtin::Function::kLength},
BuiltinData{"log", builtin::Function::kLog},
BuiltinData{"log2", builtin::Function::kLog2},
BuiltinData{"max", builtin::Function::kMax},
BuiltinData{"min", builtin::Function::kMin},
BuiltinData{"mix", builtin::Function::kMix},
BuiltinData{"modf", builtin::Function::kModf},
BuiltinData{"normalize", builtin::Function::kNormalize},
BuiltinData{"pow", builtin::Function::kPow},
BuiltinData{"reflect", builtin::Function::kReflect},
BuiltinData{"reverseBits", builtin::Function::kReverseBits},
BuiltinData{"round", builtin::Function::kRound},
BuiltinData{"select", builtin::Function::kSelect},
BuiltinData{"sign", builtin::Function::kSign},
BuiltinData{"sin", builtin::Function::kSin},
BuiltinData{"sinh", builtin::Function::kSinh},
BuiltinData{"smoothstep", builtin::Function::kSmoothstep},
BuiltinData{"sqrt", builtin::Function::kSqrt},
BuiltinData{"step", builtin::Function::kStep},
BuiltinData{"storageBarrier", builtin::Function::kStorageBarrier},
BuiltinData{"tan", builtin::Function::kTan},
BuiltinData{"tanh", builtin::Function::kTanh},
BuiltinData{"textureDimensions", builtin::Function::kTextureDimensions},
BuiltinData{"textureLoad", builtin::Function::kTextureLoad},
BuiltinData{"textureNumLayers", builtin::Function::kTextureNumLayers},
BuiltinData{"textureNumLevels", builtin::Function::kTextureNumLevels},
BuiltinData{"textureNumSamples", builtin::Function::kTextureNumSamples},
BuiltinData{"textureSample", builtin::Function::kTextureSample},
BuiltinData{"textureSampleBias", builtin::Function::kTextureSampleBias},
BuiltinData{"textureSampleCompare", builtin::Function::kTextureSampleCompare},
BuiltinData{"textureSampleCompareLevel",
builtin::Function::kTextureSampleCompareLevel},
BuiltinData{"textureSampleGrad", builtin::Function::kTextureSampleGrad},
BuiltinData{"textureSampleLevel", builtin::Function::kTextureSampleLevel},
BuiltinData{"trunc", builtin::Function::kTrunc},
BuiltinData{"unpack2x16float", builtin::Function::kUnpack2X16Float},
BuiltinData{"unpack2x16snorm", builtin::Function::kUnpack2X16Snorm},
BuiltinData{"unpack2x16unorm", builtin::Function::kUnpack2X16Unorm},
BuiltinData{"unpack4x8snorm", builtin::Function::kUnpack4X8Snorm},
BuiltinData{"unpack4x8unorm", builtin::Function::kUnpack4X8Unorm},
BuiltinData{"workgroupBarrier", builtin::Function::kWorkgroupBarrier},
BuiltinData{"workgroupUniformLoad", builtin::Function::kWorkgroupUniformLoad}));
TEST_F(BuiltinFunctionTest, ParseNoMatch) {
EXPECT_EQ(builtin::ParseFunction("not_builtin"), builtin::Function::kNone);
}
} // namespace
} // namespace tint::sem