• 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 "helpers/helpers_wrong_imm.h"
17 
18 #include "libabckit/include/c/abckit.h"
19 
20 #include <gtest/gtest.h>
21 
22 static auto g_impl = AbckitGetApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
23 static auto g_implI = AbckitGetInspectApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
24 
25 namespace libabckit::test::helpers_wrong_imm {
26 
27 // NOLINTBEGIN(cppcoreguidelines-pro-type-cstyle-cast)
28 static AbckitCoreModule *g_dummyModule = new AbckitCoreModule();
29 static AbckitCoreFunction *g_dummyMethod = new AbckitCoreFunction();
30 static AbckitInst *g_dummyInsT1 = new AbckitInst();
31 static AbckitInst *g_dummyInsT2 = new AbckitInst();
32 static AbckitLiteralArray *g_dummyLitarr = (AbckitLiteralArray *)(0x1);
33 // NOLINTEND(cppcoreguidelines-pro-type-cstyle-cast)
34 
OpenWrongImmFile()35 AbckitGraph *OpenWrongImmFile()
36 {
37     constexpr auto INPUT_PATH = ABCKIT_ABC_DIR "wrong_imm_tests/wrong_imm_test_dynamic.abc";
38     auto *file = g_impl->openAbc(INPUT_PATH, strlen(INPUT_PATH));
39     auto *foo = helpers::FindMethodByName(file, "foo");
40     auto *graph = g_implI->createGraphFromFunction(foo);
41     return graph;
42 }
43 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,uint64_t imm0),AbckitBitImmSize bitsize)44 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, uint64_t imm0), AbckitBitImmSize bitsize)
45 {
46     auto *graph = OpenWrongImmFile();
47     auto *instr = apiToCheck(graph, 1UL << bitsize);
48     ASSERT_EQ(instr, nullptr);
49     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
50     auto *file = graph->file;
51     g_impl->destroyGraph(graph);
52     g_impl->closeFile(file);
53 }
54 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,uint64_t imm0,uint64_t imm1),AbckitBitImmSize bitsize)55 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, uint64_t imm0, uint64_t imm1), AbckitBitImmSize bitsize)
56 {
57     auto *graph = OpenWrongImmFile();
58     auto *instr = apiToCheck(graph, 1UL << bitsize, 0x0);
59     ASSERT_EQ(instr, nullptr);
60     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
61 
62     instr = apiToCheck(graph, 0x0, 1UL << bitsize);
63     ASSERT_EQ(instr, nullptr);
64     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
65 
66     instr = apiToCheck(graph, 1UL << bitsize, 1UL << bitsize);
67     ASSERT_EQ(instr, nullptr);
68     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
69     auto *file = graph->file;
70     g_impl->destroyGraph(graph);
71     g_impl->closeFile(file);
72 }
73 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,uint64_t imm0),AbckitBitImmSize bitsize)74 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, uint64_t imm0),
75                   AbckitBitImmSize bitsize)
76 {
77     auto *graph = OpenWrongImmFile();
78     g_dummyInsT1->graph = graph;
79 
80     auto *instr = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize);
81     ASSERT_EQ(instr, nullptr);
82     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
83     auto *file = graph->file;
84     g_impl->destroyGraph(graph);
85     g_impl->closeFile(file);
86 }
87 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,uint64_t imm0,...),AbckitBitImmSize bitsize)88 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, uint64_t imm0,
89                                             ...),
90                   AbckitBitImmSize bitsize)
91 {
92     auto *graph = OpenWrongImmFile();
93     g_dummyInsT1->graph = graph;
94     g_dummyInsT2->graph = graph;
95 
96     auto *instr = apiToCheck(graph, g_dummyInsT1, g_dummyInsT2, 1UL << bitsize);
97     ASSERT_EQ(instr, nullptr);
98     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
99     auto *file = graph->file;
100     g_impl->destroyGraph(graph);
101     g_impl->closeFile(file);
102 
103     // NOTE varargs processing
104 }
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,uint64_t imm0,AbckitInst * inst1),AbckitBitImmSize bitsize)105 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, uint64_t imm0, AbckitInst *inst1),
106                   AbckitBitImmSize bitsize)
107 {
108     auto *graph = OpenWrongImmFile();
109     g_dummyInsT1->graph = graph;
110     g_dummyInsT2->graph = graph;
111 
112     auto *instr = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize, g_dummyInsT2);
113     ASSERT_EQ(instr, nullptr);
114     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
115     auto *file = graph->file;
116     g_impl->destroyGraph(graph);
117     g_impl->closeFile(file);
118 }
119 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,uint64_t imm0,uint64_t imm1,AbckitInst * inst1),AbckitBitImmSize bitsize)120 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, uint64_t imm0, uint64_t imm1,
121                                             AbckitInst *inst1),
122                   AbckitBitImmSize bitsize)
123 {
124     auto *graph = OpenWrongImmFile();
125     g_dummyInsT1->graph = graph;
126     g_dummyInsT2->graph = graph;
127 
128     auto *instr = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize, 0x0, g_dummyInsT2);
129     ASSERT_EQ(instr, nullptr);
130     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
131 
132     instr = apiToCheck(graph, g_dummyInsT1, 0x0, 1UL << bitsize, g_dummyInsT2);
133     ASSERT_EQ(instr, nullptr);
134     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
135 
136     instr = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize, 1UL << bitsize, g_dummyInsT2);
137     ASSERT_EQ(instr, nullptr);
138     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
139     auto *file = graph->file;
140     g_impl->destroyGraph(graph);
141     g_impl->closeFile(file);
142 }
143 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * inst,uint64_t imm0,uint64_t imm1),AbckitBitImmSize bitsize)144 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *inst, uint64_t imm0, uint64_t imm1),
145                   AbckitBitImmSize bitsize)
146 {
147     auto *graph = OpenWrongImmFile();
148     g_dummyInsT1->graph = graph;
149 
150     auto *instr = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize, 0x0);
151     ASSERT_EQ(instr, nullptr);
152     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
153 
154     instr = apiToCheck(graph, g_dummyInsT1, 0x0, 1UL << bitsize);
155     ASSERT_EQ(instr, nullptr);
156     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
157 
158     instr = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize, 1UL << bitsize);
159     ASSERT_EQ(instr, nullptr);
160     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
161     auto *file = graph->file;
162     g_impl->destroyGraph(graph);
163     g_impl->closeFile(file);
164 }
165 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,uint64_t imm0,AbckitInst * inst0,AbckitInst * inst1),AbckitBitImmSize bitsize)166 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, uint64_t imm0, AbckitInst *inst0, AbckitInst *inst1),
167                   AbckitBitImmSize bitsize)
168 {
169     auto *graph = OpenWrongImmFile();
170     g_dummyInsT1->graph = graph;
171     g_dummyInsT2->graph = graph;
172 
173     auto *instr = apiToCheck(graph, 1UL << bitsize, g_dummyInsT1, g_dummyInsT2);
174     ASSERT_EQ(instr, nullptr);
175     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
176     auto *file = graph->file;
177     g_impl->destroyGraph(graph);
178     g_impl->closeFile(file);
179 }
180 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreFunction * method,uint64_t imm),AbckitBitImmSize bitsize)181 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreFunction *method, uint64_t imm),
182                   AbckitBitImmSize bitsize)
183 {
184     auto *graph = OpenWrongImmFile();
185     g_dummyModule->file = graph->file;
186     g_dummyMethod->owningModule = g_dummyModule;
187 
188     auto *instr = apiToCheck(graph, g_dummyMethod, 1UL << bitsize);
189     ASSERT_EQ(instr, nullptr);
190     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
191     auto *file = graph->file;
192     g_impl->destroyGraph(graph);
193     g_impl->closeFile(file);
194 }
195 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * acc,AbckitCoreFunction * method,uint64_t imm0),AbckitBitImmSize bitsize)196 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *acc, AbckitCoreFunction *method,
197                                             uint64_t imm0),
198                   AbckitBitImmSize bitsize)
199 {
200     auto *graph = OpenWrongImmFile();
201     g_dummyModule->file = graph->file;
202     g_dummyMethod->owningModule = g_dummyModule;
203     g_dummyInsT1->graph = graph;
204     auto *instr = apiToCheck(graph, g_dummyInsT1, g_dummyMethod, 1UL << bitsize);
205     ASSERT_EQ(instr, nullptr);
206     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
207     auto *file = graph->file;
208     g_impl->destroyGraph(graph);
209     g_impl->closeFile(file);
210 }
211 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,uint64_t imm0),AbckitBitImmSize bitsize)212 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, uint64_t imm0),
213                   AbckitBitImmSize bitsize)
214 {
215     auto *graph = OpenWrongImmFile();
216     g_dummyInsT1->graph = graph;
217     g_dummyInsT2->graph = graph;
218 
219     auto *instr = apiToCheck(graph, g_dummyInsT1, g_dummyInsT2, 1UL << bitsize);
220     ASSERT_EQ(instr, nullptr);
221     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
222     auto *file = graph->file;
223     g_impl->destroyGraph(graph);
224     g_impl->closeFile(file);
225 }
226 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,uint64_t imm0,AbckitLiteralArray * litarr),AbckitBitImmSize bitsize)227 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *litarr),
228                   AbckitBitImmSize bitsize)
229 {
230     auto *graph = OpenWrongImmFile();
231     AbckitInst *inst = apiToCheck(graph, 1UL << bitsize, g_dummyLitarr);
232     ASSERT_EQ(inst, nullptr);
233     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
234     auto *file = graph->file;
235     g_impl->destroyGraph(graph);
236     g_impl->closeFile(file);
237 }
238 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitCoreFunction * m,AbckitLiteralArray * litarr,uint64_t imm0,AbckitInst * inst),AbckitBitImmSize bitsize)239 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitCoreFunction *m, AbckitLiteralArray *litarr,
240                                             uint64_t imm0, AbckitInst *inst),
241                   AbckitBitImmSize bitsize)
242 {
243     auto *graph = OpenWrongImmFile();
244     g_dummyModule->file = graph->file;
245     g_dummyMethod->owningModule = g_dummyModule;
246     g_dummyInsT1->graph = graph;
247 
248     auto *instr = apiToCheck(graph, g_dummyMethod, g_dummyLitarr, 1UL << bitsize, g_dummyInsT1);
249     ASSERT_EQ(instr, nullptr);
250     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
251     auto *file = graph->file;
252     g_impl->destroyGraph(graph);
253     g_impl->closeFile(file);
254 }
255 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,size_t argCount,...),AbckitBitImmSize bitsize)256 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, size_t argCount, ...), AbckitBitImmSize bitsize)
257 {
258     auto *graph = OpenWrongImmFile();
259     auto *inst = apiToCheck(graph, 1UL << bitsize);
260     ASSERT_EQ(inst, nullptr);
261     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
262     auto *file = graph->file;
263     g_impl->destroyGraph(graph);
264     g_impl->closeFile(file);
265 }
266 
TestWrongImm(AbckitInst * (* apiToCheck)(AbckitGraph * graph,AbckitInst * input,size_t argCount,...),AbckitBitImmSize bitsize)267 void TestWrongImm(AbckitInst *(*apiToCheck)(AbckitGraph *graph, AbckitInst *input, size_t argCount, ...),
268                   AbckitBitImmSize bitsize)
269 {
270     auto *graph = OpenWrongImmFile();
271     g_dummyInsT1->graph = graph;
272     auto *inst = apiToCheck(graph, g_dummyInsT1, 1UL << bitsize);
273     ASSERT_EQ(inst, nullptr);
274     ASSERT_EQ(g_impl->getLastError(), ABCKIT_STATUS_BAD_ARGUMENT);
275     auto *file = graph->file;
276     g_impl->destroyGraph(graph);
277     g_impl->closeFile(file);
278 }
279 
280 }  // namespace libabckit::test::helpers_wrong_imm
281