• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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