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