• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024-2025 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 "libabckit/include/c/isa/isa_static.h"
17 #include "libabckit/include/c/metadata_core.h"
18 #include "libabckit/include/c/ir_core.h"
19 #include "libabckit/include/c/isa/isa_dynamic.h"
20 #include "libabckit/include/c/abckit.h"
21 
22 #include "helpers/helpers.h"
23 #include "helpers/helpers_runtime.h"
24 #include "libabckit/include/c/statuses.h"
25 
26 #include <gtest/gtest.h>
27 
28 // NOLINTBEGIN(readability-magic-numbers)
29 namespace libabckit::test {
30 
31 static auto g_impl = AbckitGetApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
32 static auto g_implI = AbckitGetInspectApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
33 static auto g_implM = AbckitGetModifyApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
34 static auto g_implG = AbckitGetGraphApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
35 static auto g_dynG = AbckitGetIsaApiDynamicImpl(ABCKIT_VERSION_RELEASE_1_0_0);
36 
37 class LibAbcKitCreateDynDefineFieldRuntime : public ::testing::Test {};
38 
39 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateCallruntimeDefinefieldbyvalue, abc-kind=ArkTS1, category=positive,
40 // extension=c
TEST_F(LibAbcKitCreateDynDefineFieldRuntime,IcreateCallruntimeDefinefieldbyvalue_1)41 TEST_F(LibAbcKitCreateDynDefineFieldRuntime, IcreateCallruntimeDefinefieldbyvalue_1)
42 {
43     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
44                                              "definefieldruntime_dynamic");
45     EXPECT_TRUE(helpers::Match(output, "undefined\nundefined\nundefined\nundefined\n"));
46 
47     auto cb = [](AbckitFile *file, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
48         auto *obj = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CREATEOBJECTWITHBUFFER);
49 
50         // CC-OFFNXT(G.FMT.02)
51         auto *keyStr = g_implM->createString(file, "key3", strlen("key3"));
52         auto *key = g_dynG->iCreateLoadString(graph, keyStr);
53 
54         auto *valStr = g_implM->createString(file, "val3", strlen("val3"));
55         auto *val = g_dynG->iCreateLoadString(graph, valStr);
56 
57         auto *field = g_dynG->iCreateCallruntimeDefinefieldbyvalue(graph, val, key, obj);
58 
59         g_implG->iInsertAfter(field, obj);
60         g_implG->iInsertAfter(key, obj);
61         g_implG->iInsertAfter(val, obj);
62     };
63 
64     helpers::TransformMethod(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
65                              ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
66                              "func_main_0", cb);
67 
68     output =
69         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
70                                    "definefieldruntime_dynamic");
71     EXPECT_TRUE(helpers::Match(output, "val3\nundefined\nundefined\nundefined\n"));
72 }
73 
74 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateCallruntimeDefinefieldbyvalue, abc-kind=ArkTS1, category=positive,
75 // extension=c
TEST_F(LibAbcKitCreateDynDefineFieldRuntime,IcreateCallruntimeDefinefieldbyvalue_2)76 TEST_F(LibAbcKitCreateDynDefineFieldRuntime, IcreateCallruntimeDefinefieldbyvalue_2)
77 {
78     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
79                                              "definefieldruntime_dynamic");
80     EXPECT_TRUE(helpers::Match(output, "undefined\nundefined\nundefined\nundefined\n"));
81 
82     auto cb = [](AbckitFile *file, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
83         auto *obj = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CREATEARRAYWITHBUFFER);
84         // CC-OFFNXT(G.FMT.02)
85         auto *keyStr = g_implM->createString(file, "key3", strlen("key3"));
86         auto *key = g_dynG->iCreateLoadString(graph, keyStr);
87 
88         auto *valStr = g_implM->createString(file, "val3", strlen("val3"));
89         auto *val = g_dynG->iCreateLoadString(graph, valStr);
90 
91         auto *field = g_dynG->iCreateCallruntimeDefinefieldbyvalue(graph, val, key, obj);
92 
93         g_implG->iInsertAfter(field, obj);
94         g_implG->iInsertAfter(key, obj);
95         g_implG->iInsertAfter(val, obj);
96     };
97 
98     helpers::TransformMethod(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
99                              ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
100                              "func_main_0", cb);
101 
102     output =
103         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
104                                    "definefieldruntime_dynamic");
105     EXPECT_TRUE(helpers::Match(output, "undefined\nval3\nundefined\nundefined\n"));
106 }
107 
108 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateCallruntimeDefinefieldbyindex, abc-kind=ArkTS1, category=positive,
109 // extension=c
TEST_F(LibAbcKitCreateDynDefineFieldRuntime,IcreateCallruntimeDefinefieldbyindex_1)110 TEST_F(LibAbcKitCreateDynDefineFieldRuntime, IcreateCallruntimeDefinefieldbyindex_1)
111 {
112     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
113                                              "definefieldruntime_dynamic");
114     EXPECT_TRUE(helpers::Match(output, "undefined\nundefined\nundefined\nundefined\n"));
115 
116     auto cb = [](AbckitFile *file, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
117         auto *obj = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CREATEOBJECTWITHBUFFER);
118         // CC-OFFNXT(G.FMT.02)
119         auto *valStr = g_implM->createString(file, "val3", strlen("val3"));
120         auto *val = g_dynG->iCreateLoadString(graph, valStr);
121 
122         auto *field = g_dynG->iCreateCallruntimeDefinefieldbyindex(graph, val, 0x4, obj);
123 
124         g_implG->iInsertAfter(field, obj);
125         g_implG->iInsertAfter(val, obj);
126     };
127 
128     helpers::TransformMethod(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
129                              ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
130                              "func_main_0", cb);
131 
132     output =
133         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
134                                    "definefieldruntime_dynamic");
135     EXPECT_TRUE(helpers::Match(output, "undefined\nundefined\nval3\nundefined\n"));
136 }
137 
138 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateCallruntimeDefinefieldbyindex, abc-kind=ArkTS1, category=positive,
139 // extension=c
TEST_F(LibAbcKitCreateDynDefineFieldRuntime,IcreateCallruntimeDefinefieldbyindex_2)140 TEST_F(LibAbcKitCreateDynDefineFieldRuntime, IcreateCallruntimeDefinefieldbyindex_2)
141 {
142     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
143                                              "definefieldruntime_dynamic");
144     EXPECT_TRUE(helpers::Match(output, "undefined\nundefined\nundefined\nundefined\n"));
145 
146     auto cb = [](AbckitFile *file, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
147         auto *obj = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CREATEARRAYWITHBUFFER);
148 
149         auto *valStr = g_implM->createString(file, "val3", strlen("val3"));
150         auto *val = g_dynG->iCreateLoadString(graph, valStr);
151 
152         auto *field = g_dynG->iCreateCallruntimeDefinefieldbyindex(graph, val, 0x4, obj);
153 
154         g_implG->iInsertAfter(field, obj);
155         g_implG->iInsertAfter(val, obj);
156     };
157 
158     helpers::TransformMethod(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic.abc",
159                              ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
160                              "func_main_0", cb);
161 
162     output =
163         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/define/definefieldruntime_dynamic_modified.abc",
164                                    "definefieldruntime_dynamic");
165     EXPECT_TRUE(helpers::Match(output, "undefined\nundefined\nundefined\nval3\n"));
166 }
167 
168 }  // namespace libabckit::test
169 // NOLINTEND(readability-magic-numbers)
170