1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
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
16 #include "gtest/gtest.h"
17 #include <iostream>
18 #include "maple_string.h"
19 #include "securec.h"
20
21 using namespace maple;
22 using namespace std;
23 namespace {
TEST(find_FUNC,t01)24 TEST(find_FUNC, t01)
25 {
26 MemPoolCtrler memPoolCtrler1, memPoolCtrler2;
27 MemPool memPool1(memPoolCtrler1, "pn1"), memPool2(memPoolCtrler2, "pn2");
28 const char *testStr = "ms_obj";
29 const char *findCase1 = "ob";
30 MapleString ms_obj(testStr, &memPool1), findCase2("ob", &memPool2);
31 size_t ans;
32
33 ans = ms_obj.find(findCase1, 0); // 3
34 EXPECT_EQ(ans, 3);
35 ans = ms_obj.find(nullptr, 0); // inf
36 EXPECT_EQ(std::string::npos, ans);
37 ans = ms_obj.find(findCase1, 8000); // inf
38 EXPECT_EQ(std::string::npos, ans);
39 ans = ms_obj.find(findCase1, 4); // inf
40 EXPECT_EQ(std::string::npos, ans);
41 ans = ms_obj.find(findCase2, 0); // 3
42 EXPECT_EQ(ans, 3);
43 ans = ms_obj.find(findCase2, 8000); // inf
44 EXPECT_EQ(std::string::npos, ans);
45 ans = ms_obj.find(findCase2, 4); // inf
46 EXPECT_EQ(std::string::npos, ans);
47 }
48
TEST(find_last_of_FUNC,t02)49 TEST(find_last_of_FUNC, t02)
50 {
51 // Search for the last occurrence of the target string
52 MemPoolCtrler memPoolCtrler1;
53 MemPool memPool1(memPoolCtrler1, "pn1");
54 const char *testStr = "ms_obj_ABCDDABC";
55 const char *findCase1 = "ABC";
56 const char *findCase2 = "ABCD";
57 MapleString ms_obj(testStr, &memPool1);
58 size_t ans;
59
60 ans = ms_obj.find_last_of(findCase1, 0);
61 EXPECT_EQ(ans, 12);
62 ans = ms_obj.find_last_of(nullptr, 0);
63 EXPECT_EQ(std::string::npos, ans);
64 ans = ms_obj.find_last_of(findCase1, 13);
65 EXPECT_EQ(std::string::npos, ans);
66 ans = ms_obj.find_last_of(findCase2, 0);
67 EXPECT_EQ(ans, 7);
68 ans = ms_obj.find_last_of("XY", 0);
69 EXPECT_EQ(std::string::npos, ans);
70 }
71
TEST(find_FUNC,t03)72 TEST(find_FUNC, t03)
73 {
74 MemPoolCtrler memPoolCtrler1;
75 MemPool memPool1(memPoolCtrler1, "pn1");
76 const char *testStr = "ms_ob_obj";
77 const char *findCase1 = "obj";
78 MapleString ms_obj(testStr, &memPool1);
79 size_t ans;
80 ans = ms_obj.find(findCase1, 0, 2); // 3
81 EXPECT_EQ(ans, 3);
82 ans = ms_obj.find(findCase1, 0, 3); // 6
83 EXPECT_EQ(ans, 6);
84 ans = ms_obj.find(findCase1, 0, 8000); // inf
85 EXPECT_EQ(ans, std::string::npos);
86 ans = ms_obj.find(nullptr, 0, 1); // inf
87 EXPECT_EQ(ans, std::string::npos);
88 }
89
TEST(find_FUNC,t04)90 TEST(find_FUNC, t04)
91 { // test method:find(char c, size_t pos)
92 MemPoolCtrler memPoolCtrler1;
93 MemPool memPool1(memPoolCtrler1, "pn1");
94 const char *testStr = "ms_obj";
95 char ch = 'o';
96 MapleString ms_obj(testStr, &memPool1);
97 size_t ans;
98 ans = ms_obj.find(ch, 0); // 3
99 EXPECT_EQ(ans, 3);
100 ans = ms_obj.find(ch, 900);
101 EXPECT_EQ(ans, std::string::npos);
102 ans = ms_obj.find('x', 0);
103 EXPECT_EQ(ans, std::string::npos);
104 }
105
TEST(substr_FUNC,t05)106 TEST(substr_FUNC, t05)
107 {
108 MemPoolCtrler memPoolCtrler1, memPoolCtrler2;
109 MemPool memPool1(memPoolCtrler1, "pn1"), memPool2(memPoolCtrler2, "pn2");
110 const char *testStr = "ms_obj";
111 MapleString ms_obj(testStr, &memPool1), ans(testStr, &memPool2);
112 ans = ms_obj.substr(0, 2);
113 ASSERT_STREQ(ans.c_str(), "ms");
114 }
115
TEST(Operator_Check_MergeFUNC,t06)116 TEST(Operator_Check_MergeFUNC, t06)
117 { // operator==
118 MemPoolCtrler memPoolCtrler1, memPoolCtrler2, memPoolCtrler3;
119 MemPool memPool1(memPoolCtrler1, "pn1"), memPool2(memPoolCtrler2, "pn2"), memPool3(memPoolCtrler3, "pn3");
120 const char *testStr1 = "ms_obj1";
121 const char *testStr2 = "ms_obj2";
122 const char *testStr3 = "ms_obj";
123 MapleString ms_obj1(testStr1, &memPool1), ms_obj2(testStr2, &memPool2), ms_obj3(testStr3, &memPool3);
124 EXPECT_EQ((ms_obj1 == ms_obj2), false);
125 EXPECT_EQ((ms_obj1 == ms_obj3), false);
126 EXPECT_EQ((testStr1 == ms_obj1), true);
127 EXPECT_EQ((testStr3 == ms_obj1), false);
128 EXPECT_EQ((ms_obj1 == testStr1), true);
129 EXPECT_EQ((ms_obj1 == testStr3), false);
130 }
131
TEST(insert_FUNC,t07)132 TEST(insert_FUNC, t07)
133 { // test method:insert(size_t pos, size_t n, char c)
134 MemPoolCtrler memPoolCtrler1;
135 MemPool memPool1(memPoolCtrler1, "pn1");
136 const char *testStr1 = "ms_obj1";
137 MapleString ms_obj1(testStr1, &memPool1);
138
139 ASSERT_STREQ((ms_obj1.insert(9000, 2, 'a')).c_str(), "ms_obj1");
140 ASSERT_STREQ((ms_obj1.insert(3, 2, 'a')).c_str(), "ms_aaobj1");
141 }
142
TEST(insert_FUNC,t08)143 TEST(insert_FUNC, t08)
144 {
145 MemPoolCtrler memPoolCtrler1, memPoolCtrler2;
146 MemPool memPool1(memPoolCtrler1, "pn1"), memPool2(memPoolCtrler2, "pn2");
147 const char *testStr1 = "ms_obj1";
148 const char *testStr2 = "MS_OBJ2";
149 MapleString ms_obj1(testStr1, &memPool1), ms_obj2(testStr2, &memPool2);
150
151 // test method: insert(size_t pos, const char *s, size_t n)
152 ASSERT_STREQ((ms_obj1.insert(1, nullptr, 2)).c_str(), "ms_obj1");
153 ASSERT_STREQ((ms_obj1.insert(9000, "ABC", 2)).c_str(), "ms_obj1");
154 ASSERT_STREQ((ms_obj1.insert(1, "ABC", 2)).c_str(), "mABs_obj1");
155
156 // test method: insert(size_t pos, const char *s)
157 ASSERT_STREQ((ms_obj1.insert(1, nullptr)).c_str(), "mABs_obj1");
158 ASSERT_STREQ((ms_obj1.insert(9000, "ABC")).c_str(), "mABs_obj1");
159 ASSERT_STREQ((ms_obj1.insert(1, "xyz")).c_str(), "mxyzABs_obj1");
160
161 // test method: insert(size_t pos, const MapleString &str)
162 ASSERT_STREQ((ms_obj1.insert(9000, ms_obj2)).c_str(), "mxyzABs_obj1");
163 ASSERT_STREQ((ms_obj1.insert(2, ms_obj2)).c_str(), "mxMS_OBJ2yzABs_obj1");
164 ASSERT_STREQ((ms_obj1.insert(20, ms_obj2)).c_str(), "mxMS_OBJ2yzABs_obj1");
165 }
166
TEST(append_FUNC,t01)167 TEST(append_FUNC, t01)
168 {
169 MemPoolCtrler memPoolCtrler1, memPoolCtrler2, memPoolCtrler3;
170 MemPool memPool1(memPoolCtrler1, "pn1"), memPool2(memPoolCtrler2, "pn2"), memPool3(memPoolCtrler3, "pn3");
171 const char *testStr1 = "ms_obj1";
172 const char *testStr2 = "";
173 const char *testStr3 = "MS_OBJ3";
174 const std::string testStr4 = "";
175 const std::string testStr5 = "STR5";
176 MapleString ms_obj1(testStr1, &memPool1), ms_obj2(testStr2, &memPool2), ms_obj3(testStr3, &memPool3);
177
178 // test method:append(const MapleString &str)
179 ASSERT_STREQ((ms_obj1.append(ms_obj2)).c_str(), "ms_obj1");
180 ASSERT_STREQ((ms_obj1.append(ms_obj3)).c_str(), "ms_obj1MS_OBJ3");
181 // test method:append(const std::string &str)
182 ASSERT_STREQ((ms_obj1.append(testStr4)).c_str(), "ms_obj1MS_OBJ3");
183 ASSERT_STREQ((ms_obj1.append(testStr5)).c_str(), "ms_obj1MS_OBJ3STR5");
184 // test method:append(const char *s)
185 ASSERT_STREQ((ms_obj1.append(nullptr)).c_str(), "ms_obj1MS_OBJ3STR5");
186 ASSERT_STREQ((ms_obj1.append(testStr3)).c_str(), "ms_obj1MS_OBJ3STR5MS_OBJ3");
187 // test method:append(const char *s, size_t n)
188 ASSERT_STREQ((ms_obj1.append(nullptr, 2)).c_str(), "ms_obj1MS_OBJ3STR5MS_OBJ3");
189 ASSERT_STREQ((ms_obj1.append(testStr3, 3)).c_str(), "ms_obj1MS_OBJ3STR5MS_OBJ3MS_");
190 }
191
192 } // namespace
193