1// Copyright (c) 2016 Google Inc. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15#include <string> 16#include <vector> 17 18#include "gtest/gtest.h" 19#include "test/opt/pass_utils.h" 20 21namespace spvtools { 22namespace opt { 23namespace { 24 25TEST(JoinAllInsts, Cases) { 26 EXPECT_EQ("", JoinAllInsts({})); 27 EXPECT_EQ("a\n", JoinAllInsts({"a"})); 28 EXPECT_EQ("a\nb\n", JoinAllInsts({"a", "b"})); 29 EXPECT_EQ("a\nb\nc\n", JoinAllInsts({"a", "b", "c"})); 30 EXPECT_EQ("hello,\nworld!\n\n\n", JoinAllInsts({"hello,", "world!", "\n"})); 31} 32 33TEST(JoinNonDebugInsts, Cases) { 34 EXPECT_EQ("", JoinNonDebugInsts({})); 35 EXPECT_EQ("a\n", JoinNonDebugInsts({"a"})); 36 EXPECT_EQ("", JoinNonDebugInsts({"OpName"})); 37 EXPECT_EQ("a\nb\n", JoinNonDebugInsts({"a", "b"})); 38 EXPECT_EQ("", JoinNonDebugInsts({"OpName", "%1 = OpString \"42\""})); 39 EXPECT_EQ("Opstring\n", JoinNonDebugInsts({"OpName", "Opstring"})); 40 EXPECT_EQ("the only remaining string\n", 41 JoinNonDebugInsts( 42 {"OpSourceContinued", "OpSource", "OpSourceExtension", 43 "lgtm OpName", "hello OpMemberName", "this is a OpString", 44 "lonely OpLine", "happy OpNoLine", "OpModuleProcessed", 45 "the only remaining string"})); 46} 47 48struct SubstringReplacementTestCase { 49 const char* orig_str; 50 const char* find_substr; 51 const char* replace_substr; 52 const char* expected_str; 53 bool replace_should_succeed; 54}; 55 56using FindAndReplaceTest = 57 ::testing::TestWithParam<SubstringReplacementTestCase>; 58 59TEST_P(FindAndReplaceTest, SubstringReplacement) { 60 auto process = std::string(GetParam().orig_str); 61 EXPECT_EQ(GetParam().replace_should_succeed, 62 FindAndReplace(&process, GetParam().find_substr, 63 GetParam().replace_substr)) 64 << "Original string: " << GetParam().orig_str 65 << " replace: " << GetParam().find_substr 66 << " to: " << GetParam().replace_substr 67 << " should returns: " << GetParam().replace_should_succeed; 68 EXPECT_STREQ(GetParam().expected_str, process.c_str()) 69 << "Original string: " << GetParam().orig_str 70 << " replace: " << GetParam().find_substr 71 << " to: " << GetParam().replace_substr 72 << " expected string: " << GetParam().expected_str; 73} 74 75INSTANTIATE_TEST_SUITE_P( 76 SubstringReplacement, FindAndReplaceTest, 77 ::testing::ValuesIn(std::vector<SubstringReplacementTestCase>({ 78 // orig string, find substring, replace substring, expected string, 79 // replacement happened 80 {"", "", "", "", false}, 81 {"", "b", "", "", false}, 82 {"", "", "c", "", false}, 83 {"", "a", "b", "", false}, 84 85 {"a", "", "c", "a", false}, 86 {"a", "b", "c", "a", false}, 87 {"a", "b", "", "a", false}, 88 {"a", "a", "", "", true}, 89 {"a", "a", "b", "b", true}, 90 91 {"ab", "a", "b", "bb", true}, 92 {"ab", "a", "", "b", true}, 93 {"ab", "b", "", "a", true}, 94 {"ab", "ab", "", "", true}, 95 {"ab", "ab", "cd", "cd", true}, 96 {"bc", "abc", "efg", "bc", false}, 97 98 {"abc", "ab", "bc", "bcc", true}, 99 {"abc", "ab", "", "c", true}, 100 {"abc", "bc", "", "a", true}, 101 {"abc", "bc", "d", "ad", true}, 102 {"abc", "a", "123", "123bc", true}, 103 {"abc", "ab", "a", "ac", true}, 104 {"abc", "a", "aab", "aabbc", true}, 105 {"abc", "abcd", "efg", "abc", false}, 106 }))); 107 108} // namespace 109} // namespace opt 110} // namespace spvtools 111