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