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