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