1 /**
2 * Copyright (c) 2024 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 "../../../include/cpp/abckit_cpp.h"
17 #include "../check_mock.h"
18 #include "../../../src/mock/mock_values.h"
19 #include "../cpp_helpers_mock.h"
20
21 #include <gtest/gtest.h>
22
23 namespace libabckit::test {
24
25 class LibAbcKitCppGraphMockTest : public ::testing::Test {};
26
27 // Test: test-kind=mock, api=Graph::GetIsa, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetIsa)28 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetIsa)
29 {
30 ASSERT_TRUE(CheckMockedStackEmpty());
31 {
32 abckit::File f(DEFAULT_PATH);
33 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
34 AbckitIsaType type = abckit::mock::helpers::GetMockGraph(f).GetIsa();
35 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
36 ASSERT_TRUE(CheckMockedApi("GgetIsa"));
37 ASSERT_TRUE(type == DEFAULT_ENUM_ISA_TYPE);
38 }
39 ASSERT_TRUE(CheckMockedApi("CloseFile"));
40 ASSERT_TRUE(CheckMockedStackEmpty());
41 }
42
43 // Test: test-kind=mock, api=Graph::GetStartBb, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetStartBb)44 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetStartBb)
45 {
46 ASSERT_TRUE(CheckMockedStackEmpty());
47 {
48 abckit::File f(DEFAULT_PATH);
49 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
50 abckit::BasicBlock bb = abckit::mock::helpers::GetMockGraph(f).GetStartBb();
51 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
52 ASSERT_TRUE(CheckMockedApi("GgetStartBasicBlock"));
53 ASSERT_TRUE(bb == abckit::mock::helpers::GetMockBasicBlock(f));
54 }
55 ASSERT_TRUE(CheckMockedApi("CloseFile"));
56 ASSERT_TRUE(CheckMockedStackEmpty());
57 }
58
59 // Test: test-kind=mock, api=Graph::GetEndBb, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetEndBb)60 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetEndBb)
61 {
62 ASSERT_TRUE(CheckMockedStackEmpty());
63 {
64 abckit::File f(DEFAULT_PATH);
65 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
66 abckit::BasicBlock bb = abckit::mock::helpers::GetMockGraph(f).GetEndBb();
67 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
68 ASSERT_TRUE(CheckMockedApi("GgetEndBasicBlock"));
69 ASSERT_TRUE(bb == abckit::mock::helpers::GetMockBasicBlock(f));
70 }
71 ASSERT_TRUE(CheckMockedApi("CloseFile"));
72 ASSERT_TRUE(CheckMockedStackEmpty());
73 }
74
75 // Test: test-kind=mock, api=Graph::GetNumBbs, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetNumBbs)76 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetNumBbs)
77 {
78 ASSERT_TRUE(CheckMockedStackEmpty());
79 {
80 abckit::File f(DEFAULT_PATH);
81 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
82 uint32_t numBbs = abckit::mock::helpers::GetMockGraph(f).GetNumBbs();
83 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
84 ASSERT_TRUE(CheckMockedApi("GgetNumberOfBasicBlocks"));
85 ASSERT_TRUE(numBbs == DEFAULT_U32);
86 }
87 ASSERT_TRUE(CheckMockedApi("CloseFile"));
88 ASSERT_TRUE(CheckMockedStackEmpty());
89 }
90
91 // Test: test-kind=mock, api=Graph::GetBlocksRPO, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetBlocksRPO)92 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetBlocksRPO)
93 {
94 ASSERT_TRUE(CheckMockedStackEmpty());
95 {
96 abckit::File f(DEFAULT_PATH);
97 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
98 auto blocks = abckit::mock::helpers::GetMockGraph(f).GetBlocksRPO();
99 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
100 ASSERT_TRUE(CheckMockedApi("GvisitBlocksRpo"));
101 ASSERT_TRUE(blocks[0] == abckit::mock::helpers::GetMockBasicBlock(f));
102 }
103 ASSERT_TRUE(CheckMockedApi("CloseFile"));
104 ASSERT_TRUE(CheckMockedStackEmpty());
105 }
106
107 // Test: test-kind=mock, api=Graph::EnumerateBasicBlocksRpo, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_EnumerateBasicBlocksRpo)108 TEST_F(LibAbcKitCppGraphMockTest, Graph_EnumerateBasicBlocksRpo)
109 {
110 ASSERT_TRUE(CheckMockedStackEmpty());
111 {
112 abckit::File f(DEFAULT_PATH);
113 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
114 abckit::mock::helpers::GetMockGraph(f).EnumerateBasicBlocksRpo(
115 []([[maybe_unused]] const abckit::BasicBlock &) { return false; });
116 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
117 ASSERT_TRUE(CheckMockedApi("GvisitBlocksRpo"));
118 }
119 ASSERT_TRUE(CheckMockedApi("CloseFile"));
120 ASSERT_TRUE(CheckMockedStackEmpty());
121 }
122
123 // Test: test-kind=mock, api=Graph::GetBasicBlock, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetBasicBlock)124 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetBasicBlock)
125 {
126 ASSERT_TRUE(CheckMockedStackEmpty());
127 {
128 abckit::File f(DEFAULT_PATH);
129 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
130 abckit::BasicBlock bb = abckit::mock::helpers::GetMockGraph(f).GetBasicBlock(DEFAULT_U32);
131 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
132 ASSERT_TRUE(CheckMockedApi("GgetBasicBlock"));
133 ASSERT_TRUE(bb == abckit::mock::helpers::GetMockBasicBlock(f));
134 }
135 ASSERT_TRUE(CheckMockedApi("CloseFile"));
136 ASSERT_TRUE(CheckMockedStackEmpty());
137 }
138
139 // Test: test-kind=mock, api=Graph::GetNumberOfParameters, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_GetNumberOfParameters)140 TEST_F(LibAbcKitCppGraphMockTest, Graph_GetNumberOfParameters)
141 {
142 ASSERT_TRUE(CheckMockedStackEmpty());
143 {
144 abckit::File f(DEFAULT_PATH);
145 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
146 uint32_t numBbs = abckit::mock::helpers::GetMockGraph(f).GetNumberOfParameters();
147 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
148 ASSERT_TRUE(CheckMockedApi("GgetNumberOfParameters"));
149 ASSERT_TRUE(numBbs == DEFAULT_U32);
150 }
151 ASSERT_TRUE(CheckMockedApi("CloseFile"));
152 ASSERT_TRUE(CheckMockedStackEmpty());
153 }
154
155 // Test: test-kind=mock, api=Graph::InsertTryCatch, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_InsertTryCatch)156 TEST_F(LibAbcKitCppGraphMockTest, Graph_InsertTryCatch)
157 {
158 ASSERT_TRUE(CheckMockedStackEmpty());
159 {
160 abckit::File f(DEFAULT_PATH);
161 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
162 abckit::BasicBlock bb = abckit::mock::helpers::GetMockBasicBlock(f);
163 abckit::mock::helpers::GetMockGraph(f).InsertTryCatch(bb, bb, bb, bb);
164 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
165 ASSERT_TRUE(CheckMockedApi("GinsertTryCatch"));
166 }
167 ASSERT_TRUE(CheckMockedApi("CloseFile"));
168 ASSERT_TRUE(CheckMockedStackEmpty());
169 }
170
171 // Test: test-kind=mock, api=Graph::Dump, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_Dump)172 TEST_F(LibAbcKitCppGraphMockTest, Graph_Dump)
173 {
174 ASSERT_TRUE(CheckMockedStackEmpty());
175 {
176 abckit::File f(DEFAULT_PATH);
177 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
178 abckit::mock::helpers::GetMockGraph(f).Dump(DEFAULT_I32);
179 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
180 ASSERT_TRUE(CheckMockedApi("Gdump"));
181 }
182 ASSERT_TRUE(CheckMockedApi("CloseFile"));
183 ASSERT_TRUE(CheckMockedStackEmpty());
184 }
185
186 // Test: test-kind=mock, api=Graph::FindOrCreateConstantI32, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_FindOrCreateConstantI32)187 TEST_F(LibAbcKitCppGraphMockTest, Graph_FindOrCreateConstantI32)
188 {
189 ASSERT_TRUE(CheckMockedStackEmpty());
190 {
191 abckit::File f(DEFAULT_PATH);
192 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
193 abckit::Instruction inst = abckit::mock::helpers::GetMockGraph(f).FindOrCreateConstantI32(DEFAULT_I32);
194 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
195 ASSERT_TRUE(CheckMockedApi("GfindOrCreateConstantI32"));
196 ASSERT_TRUE(inst == abckit::mock::helpers::GetMockInstruction(f));
197 }
198 ASSERT_TRUE(CheckMockedApi("CloseFile"));
199 ASSERT_TRUE(CheckMockedStackEmpty());
200 }
201
202 // Test: test-kind=mock, api=Graph::FindOrCreateConstantI64, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_FindOrCreateConstantI64)203 TEST_F(LibAbcKitCppGraphMockTest, Graph_FindOrCreateConstantI64)
204 {
205 ASSERT_TRUE(CheckMockedStackEmpty());
206 {
207 abckit::File f(DEFAULT_PATH);
208 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
209 abckit::Instruction inst = abckit::mock::helpers::GetMockGraph(f).FindOrCreateConstantI64(DEFAULT_I64);
210 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
211 ASSERT_TRUE(CheckMockedApi("GfindOrCreateConstantI64"));
212 ASSERT_TRUE(inst == abckit::mock::helpers::GetMockInstruction(f));
213 }
214 ASSERT_TRUE(CheckMockedApi("CloseFile"));
215 ASSERT_TRUE(CheckMockedStackEmpty());
216 }
217
218 // Test: test-kind=mock, api=Graph::FindOrCreateConstantU64, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_FindOrCreateConstantU64)219 TEST_F(LibAbcKitCppGraphMockTest, Graph_FindOrCreateConstantU64)
220 {
221 ASSERT_TRUE(CheckMockedStackEmpty());
222 {
223 abckit::File f(DEFAULT_PATH);
224 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
225 abckit::Instruction inst = abckit::mock::helpers::GetMockGraph(f).FindOrCreateConstantU64(DEFAULT_U64);
226 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
227 ASSERT_TRUE(CheckMockedApi("GfindOrCreateConstantU64"));
228 ASSERT_TRUE(inst == abckit::mock::helpers::GetMockInstruction(f));
229 }
230 ASSERT_TRUE(CheckMockedApi("CloseFile"));
231 ASSERT_TRUE(CheckMockedStackEmpty());
232 }
233
234 // Test: test-kind=mock, api=Graph::FindOrCreateConstantF64, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_FindOrCreateConstantF64)235 TEST_F(LibAbcKitCppGraphMockTest, Graph_FindOrCreateConstantF64)
236 {
237 ASSERT_TRUE(CheckMockedStackEmpty());
238 {
239 abckit::File f(DEFAULT_PATH);
240 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
241 abckit::Instruction inst = abckit::mock::helpers::GetMockGraph(f).FindOrCreateConstantF64(DEFAULT_DOUBLE);
242 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
243 ASSERT_TRUE(CheckMockedApi("GfindOrCreateConstantF64"));
244 ASSERT_TRUE(inst == abckit::mock::helpers::GetMockInstruction(f));
245 }
246 ASSERT_TRUE(CheckMockedApi("CloseFile"));
247 ASSERT_TRUE(CheckMockedStackEmpty());
248 }
249
250 // Test: test-kind=mock, api=Graph::CreateEmptyBb, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_CreateEmptyBb)251 TEST_F(LibAbcKitCppGraphMockTest, Graph_CreateEmptyBb)
252 {
253 ASSERT_TRUE(CheckMockedStackEmpty());
254 {
255 abckit::File f(DEFAULT_PATH);
256 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
257 abckit::BasicBlock bb = abckit::mock::helpers::GetMockGraph(f).CreateEmptyBb();
258 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
259 ASSERT_TRUE(CheckMockedApi("BBCreateEmpty"));
260 ASSERT_TRUE(bb == abckit::mock::helpers::GetMockBasicBlock(f));
261 }
262 ASSERT_TRUE(CheckMockedApi("CloseFile"));
263 ASSERT_TRUE(CheckMockedStackEmpty());
264 }
265
266 // Test: test-kind=mock, api=Graph::RunPassRemoveUnreachableBlocks, abc-kind=ArkTS1, category=internal, extension=cpp
TEST_F(LibAbcKitCppGraphMockTest,Graph_RunPassRemoveUnreachableBlocks)267 TEST_F(LibAbcKitCppGraphMockTest, Graph_RunPassRemoveUnreachableBlocks)
268 {
269 ASSERT_TRUE(CheckMockedStackEmpty());
270 {
271 abckit::File f(DEFAULT_PATH);
272 ASSERT_TRUE(CheckMockedApi("OpenAbc"));
273 abckit::mock::helpers::GetMockGraph(f).RunPassRemoveUnreachableBlocks();
274 ASSERT_TRUE(CheckMockedApi("DestroyGraph"));
275 ASSERT_TRUE(CheckMockedApi("GrunPassRemoveUnreachableBlocks"));
276 }
277 ASSERT_TRUE(CheckMockedApi("CloseFile"));
278 ASSERT_TRUE(CheckMockedStackEmpty());
279 }
280
281 } // namespace libabckit::test
282