| // 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_SUITE_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 |