// Copyright (c) 2015-2016 The Khronos Group Inc. // // 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 <string> #include <vector> #include "test/test_fixture.h" #include "test/unit_spirv.h" namespace spvtools { namespace { using NamedIdTest = spvtest::TextToBinaryTest; TEST_F(NamedIdTest, Default) { const std::string input = R"( OpCapability Shader OpMemoryModel Logical Simple OpEntryPoint Vertex %main "foo" %void = OpTypeVoid %fnMain = OpTypeFunction %void %main = OpFunction %void None %fnMain %lbMain = OpLabel OpReturn OpFunctionEnd)"; const std::string output = "OpCapability Shader\n" "OpMemoryModel Logical Simple\n" "OpEntryPoint Vertex %1 \"foo\"\n" "%2 = OpTypeVoid\n" "%3 = OpTypeFunction %2\n" "%1 = OpFunction %2 None %3\n" "%4 = OpLabel\n" "OpReturn\n" "OpFunctionEnd\n"; EXPECT_EQ(output, EncodeAndDecodeSuccessfully(input)); } struct IdCheckCase { std::string id; bool valid; }; using IdValidityTest = spvtest::TextToBinaryTestBase<::testing::TestWithParam<IdCheckCase>>; TEST_P(IdValidityTest, IdTypes) { const std::string input = GetParam().id + " = OpTypeVoid"; SetText(input); if (GetParam().valid) { CompileSuccessfully(input); } else { CompileFailure(input); } } INSTANTIATE_TEST_CASE_P( ValidAndInvalidIds, IdValidityTest, ::testing::ValuesIn(std::vector<IdCheckCase>( {{"%1", true}, {"%2abc", true}, {"%3Def", true}, {"%4GHI", true}, {"%5_j_k", true}, {"%6J_M", true}, {"%n", true}, {"%O", true}, {"%p7", true}, {"%Q8", true}, {"%R_S", true}, {"%T_10_U", true}, {"%V_11", true}, {"%W_X_13", true}, {"%_A", true}, {"%_", true}, {"%__", true}, {"%A_", true}, {"%_A_", true}, {"%@", false}, {"%!", false}, {"%ABC!", false}, {"%__A__@", false}, {"%%", false}, {"%-", false}, {"%foo_@_bar", false}, {"%", false}, {"5", false}, {"32", false}, {"foo", false}, {"a%bar", false}})), ); } // namespace } // namespace spvtools