• 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 "libabckit/include/c/abckit.h"
17 #include "libabckit/include/c/statuses.h"
18 #include "libabckit/include/c/metadata_core.h"
19 #include "libabckit/include/c/ir_core.h"
20 #include "libabckit/include/c/isa/isa_dynamic.h"
21 #include "helpers/helpers_runtime.h"
22 #include "helpers/helpers.h"
23 
24 #include <gtest/gtest.h>
25 
26 // NOLINTBEGIN(readability-magic-numbers)
27 namespace libabckit::test {
28 
29 static auto g_impl = AbckitGetApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
30 static auto g_implI = AbckitGetInspectApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
31 static auto g_implM = AbckitGetModifyApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
32 static auto g_implG = AbckitGetGraphApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
33 static auto g_dynG = AbckitGetIsaApiDynamicImpl(ABCKIT_VERSION_RELEASE_1_0_0);
34 
35 class LibAbcKitAsyncTest : public ::testing::Test {};
36 
37 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateAsyncfunctionenter, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateAsyncfunctionenter)38 TEST_F(LibAbcKitAsyncTest, IcreateAsyncfunctionenter)
39 {
40     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic.abc",
41                                              "enter_resolve_reject_dynamic");
42     EXPECT_TRUE(helpers::Match(output, "42\n"));
43 
44     helpers::TransformMethod(
45         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic.abc",
46         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic_enter.abc", "foo",
47         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
48             auto *asyncEnterInst = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_ASYNCFUNCTIONENTER);
49             helpers::ReplaceInst(asyncEnterInst, g_dynG->iCreateAsyncfunctionenter(graph));
50         },
51         [&]([[maybe_unused]] AbckitGraph *graph) {});
52 
53     output =
54         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic_enter.abc",
55                                    "enter_resolve_reject_dynamic");
56     EXPECT_TRUE(helpers::Match(output, "42\n"));
57 }
58 
59 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateAsyncfunctionresolve, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateAsyncfunctionresolve)60 TEST_F(LibAbcKitAsyncTest, IcreateAsyncfunctionresolve)
61 {
62     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic.abc",
63                                              "enter_resolve_reject_dynamic");
64     EXPECT_TRUE(helpers::Match(output, "42\n"));
65 
66     helpers::TransformMethod(
67         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic.abc",
68         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic_resolve.abc", "foo",
69         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
70             auto *asyncResolveInst = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_ASYNCFUNCTIONRESOLVE);
71             auto *inputOne = g_implG->iGetInput(asyncResolveInst, 0);
72             auto *inputTwo = g_implG->iGetInput(asyncResolveInst, 1);
73             helpers::ReplaceInst(asyncResolveInst, g_dynG->iCreateAsyncfunctionresolve(graph, inputOne, inputTwo));
74         },
75         [&]([[maybe_unused]] AbckitGraph *graph) {});
76 
77     output =
78         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic_resolve.abc",
79                                    "enter_resolve_reject_dynamic");
80     EXPECT_TRUE(helpers::Match(output, "42\n"));
81 }
82 
83 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateAsyncfunctionreject, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateAsyncfunctionreject)84 TEST_F(LibAbcKitAsyncTest, IcreateAsyncfunctionreject)
85 {
86     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic.abc",
87                                              "enter_resolve_reject_dynamic");
88     EXPECT_TRUE(helpers::Match(output, "42\n"));
89 
90     helpers::TransformMethod(
91         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic.abc",
92         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic_reject.abc", "foo",
93         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
94             auto *asyncResolveInst = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_ASYNCFUNCTIONREJECT);
95             auto *inputOne = g_implG->iGetInput(asyncResolveInst, 0);
96             auto *inputTwo = g_implG->iGetInput(asyncResolveInst, 1);
97             helpers::ReplaceInst(asyncResolveInst, g_dynG->iCreateAsyncfunctionresolve(graph, inputOne, inputTwo));
98         },
99         [&]([[maybe_unused]] AbckitGraph *graph) {});
100 
101     output =
102         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/enter_resolve_reject_dynamic_reject.abc",
103                                    "enter_resolve_reject_dynamic");
104     EXPECT_TRUE(helpers::Match(output, "42\n"));
105 }
106 
107 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateAsyncfunctionawaituncaught, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateAsyncfunctionawaituncaught)108 TEST_F(LibAbcKitAsyncTest, IcreateAsyncfunctionawaituncaught)
109 {
110     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/awaituncaught_dynamic.abc",
111                                              "awaituncaught_dynamic");
112     EXPECT_TRUE(helpers::Match(output, "42\n"));
113 
114     helpers::TransformMethod(
115         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/awaituncaught_dynamic.abc",
116         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/awaituncaught_dynamic_modified.abc", "foo",
117         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
118             auto *asyncAwaitUncaughtInst =
119                 helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_ASYNCFUNCTIONAWAITUNCAUGHT);
120             auto *inputOne = g_implG->iGetInput(asyncAwaitUncaughtInst, 0);
121             auto *inputTwo = g_implG->iGetInput(asyncAwaitUncaughtInst, 1);
122             helpers::ReplaceInst(asyncAwaitUncaughtInst,
123                                  g_dynG->iCreateAsyncfunctionresolve(graph, inputOne, inputTwo));
124         },
125         [&]([[maybe_unused]] AbckitGraph *graph) {});
126 
127     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/awaituncaught_dynamic_modified.abc",
128                                         "awaituncaught_dynamic");
129     EXPECT_TRUE(helpers::Match(output, "42\n"));
130 }
131 
132 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateCreateasyncgeneratorobj, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateCreateasyncgeneratorobj)133 TEST_F(LibAbcKitAsyncTest, IcreateCreateasyncgeneratorobj)
134 {
135     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
136                                              "asyncgenerator_dynamic");
137     EXPECT_TRUE(helpers::Match(output, "42\n"));
138 
139     helpers::TransformMethod(
140         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
141         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_modified.abc", "foo",
142         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
143             auto *asyncCreateAsyncGenObj =
144                 helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CREATEASYNCGENERATOROBJ);
145             auto *input = g_implG->iGetInput(asyncCreateAsyncGenObj, 0);
146             helpers::ReplaceInst(asyncCreateAsyncGenObj, g_dynG->iCreateCreateasyncgeneratorobj(graph, input));
147         },
148         [&]([[maybe_unused]] AbckitGraph *graph) {});
149 
150     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_modified.abc",
151                                         "asyncgenerator_dynamic");
152     EXPECT_TRUE(helpers::Match(output, "42\n"));
153 }
154 
155 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateAsyncgeneratorreject, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateAsyncgeneratorreject)156 TEST_F(LibAbcKitAsyncTest, IcreateAsyncgeneratorreject)
157 {
158     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
159                                              "asyncgenerator_dynamic");
160     EXPECT_TRUE(helpers::Match(output, "42\n"));
161 
162     helpers::TransformMethod(
163         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
164         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_reject.abc", "foo",
165         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
166             auto *asyncCreateAsyncGen =
167                 helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_ASYNCGENERATORREJECT);
168             auto *input0 = g_implG->iGetInput(asyncCreateAsyncGen, 0);
169             auto *input1 = g_implG->iGetInput(asyncCreateAsyncGen, 1);
170             helpers::ReplaceInst(asyncCreateAsyncGen, g_dynG->iCreateAsyncgeneratorreject(graph, input0, input1));
171         },
172         [&]([[maybe_unused]] AbckitGraph *graph) {});
173 
174     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_reject.abc",
175                                         "asyncgenerator_dynamic");
176     EXPECT_TRUE(helpers::Match(output, "42\n"));
177 }
178 
179 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateAsyncgeneratorresolve, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateAsyncgeneratorresolve)180 TEST_F(LibAbcKitAsyncTest, IcreateAsyncgeneratorresolve)
181 {
182     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
183                                              "asyncgenerator_dynamic");
184     EXPECT_TRUE(helpers::Match(output, "42\n"));
185 
186     helpers::TransformMethod(
187         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
188         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_resolve.abc", "foo",
189         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
190             auto *asyncCreateAsyncGen =
191                 helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_ASYNCGENERATORRESOLVE);
192             auto *input0 = g_implG->iGetInput(asyncCreateAsyncGen, 0);
193             auto *input1 = g_implG->iGetInput(asyncCreateAsyncGen, 1);
194             auto *input2 = g_implG->iGetInput(asyncCreateAsyncGen, 2);
195             helpers::ReplaceInst(asyncCreateAsyncGen,
196                                  g_dynG->iCreateAsyncgeneratorresolve(graph, input0, input1, input2));
197         },
198         [&]([[maybe_unused]] AbckitGraph *graph) {});
199 
200     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_resolve.abc",
201                                         "asyncgenerator_dynamic");
202     EXPECT_TRUE(helpers::Match(output, "42\n"));
203 }
204 
205 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateResumegenerator, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateResumegenerator)206 TEST_F(LibAbcKitAsyncTest, IcreateResumegenerator)
207 {
208     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
209                                              "asyncgenerator_dynamic");
210     EXPECT_TRUE(helpers::Match(output, "42\n"));
211 
212     helpers::TransformMethod(
213         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
214         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_resume.abc", "foo",
215         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
216             auto *asyncCreateAsyncGen = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_RESUMEGENERATOR);
217             auto *input0 = g_implG->iGetInput(asyncCreateAsyncGen, 0);
218             helpers::ReplaceInst(asyncCreateAsyncGen, g_dynG->iCreateResumegenerator(graph, input0));
219         },
220         [&]([[maybe_unused]] AbckitGraph *graph) {});
221 
222     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_resume.abc",
223                                         "asyncgenerator_dynamic");
224     EXPECT_TRUE(helpers::Match(output, "42\n"));
225 }
226 
227 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateSetgeneratorstate, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateSetgeneratorstate)228 TEST_F(LibAbcKitAsyncTest, IcreateSetgeneratorstate)
229 {
230     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
231                                              "asyncgenerator_dynamic");
232     EXPECT_TRUE(helpers::Match(output, "42\n"));
233 
234     helpers::TransformMethod(
235         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
236         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_state.abc", "foo",
237         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
238             auto *asyncCreateAsyncGen = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_SETGENERATORSTATE);
239             auto *input0 = g_implG->iGetInput(asyncCreateAsyncGen, 0);
240             uint64_t imm0 = g_implG->iGetImmediate(asyncCreateAsyncGen, 0);
241             helpers::ReplaceInst(asyncCreateAsyncGen, g_dynG->iCreateSetgeneratorstate(graph, input0, imm0));
242         },
243         [&]([[maybe_unused]] AbckitGraph *graph) {});
244 
245     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_state.abc",
246                                         "asyncgenerator_dynamic");
247     EXPECT_TRUE(helpers::Match(output, "42\n"));
248 }
249 
250 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateSuspendgenerator, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateSuspendgenerator)251 TEST_F(LibAbcKitAsyncTest, IcreateSuspendgenerator)
252 {
253     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
254                                              "asyncgenerator_dynamic");
255     EXPECT_TRUE(helpers::Match(output, "42\n"));
256 
257     helpers::TransformMethod(
258         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic.abc",
259         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_suspend.abc", "foo",
260         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
261             auto *asyncCreateAsyncGen = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_SUSPENDGENERATOR);
262             auto *input0 = g_implG->iGetInput(asyncCreateAsyncGen, 0);
263             auto *input1 = g_implG->iGetInput(asyncCreateAsyncGen, 1);
264             helpers::ReplaceInst(asyncCreateAsyncGen, g_dynG->iCreateSuspendgenerator(graph, input0, input1));
265         },
266         [&]([[maybe_unused]] AbckitGraph *graph) {});
267 
268     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncgenerator_dynamic_suspend.abc",
269                                         "asyncgenerator_dynamic");
270     EXPECT_TRUE(helpers::Match(output, "42\n"));
271 }
272 
273 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateGetasynciterator, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateGetasynciterator)274 TEST_F(LibAbcKitAsyncTest, IcreateGetasynciterator)
275 {
276     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asynciterator_dynamic.abc",
277                                              "asynciterator_dynamic");
278     EXPECT_TRUE(helpers::Match(output, "42\n"));
279 
280     helpers::TransformMethod(
281         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asynciterator_dynamic.abc",
282         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asynciterator_dynamic_modified.abc", "foo",
283         [](AbckitFile * /*file*/, AbckitCoreFunction * /*method*/, AbckitGraph *graph) {
284             auto *asyncCreateAsyncIter = helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_GETASYNCITERATOR);
285             auto *input = g_implG->iGetInput(asyncCreateAsyncIter, 0);
286             helpers::ReplaceInst(asyncCreateAsyncIter, g_dynG->iCreateGetasynciterator(graph, input));
287         },
288         [&]([[maybe_unused]] AbckitGraph *graph) {});
289 
290     output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asynciterator_dynamic_modified.abc",
291                                         "asynciterator_dynamic");
292     EXPECT_TRUE(helpers::Match(output, "42\n"));
293 }
294 
295 // Test: test-kind=api, api=IsaApiDynamicImpl::iCreateCallruntimeNotifyconcurrentresult, abc-kind=JS, category=positive
TEST_F(LibAbcKitAsyncTest,IcreateCallruntimeNotifyconcurrentresult)296 TEST_F(LibAbcKitAsyncTest, IcreateCallruntimeNotifyconcurrentresult)
297 {
298     auto output = helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncuseconcurrent_dynamic.abc",
299                                              "asyncuseconcurrent_dynamic");
300     EXPECT_TRUE(helpers::Match(output, "42\n"));
301 
302     helpers::TransformMethod(
303         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncuseconcurrent_dynamic.abc",
304         ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncuseconcurrent_dynamic_modified.abc", "a",
305         [](AbckitFile *, AbckitCoreFunction *, AbckitGraph *graph) {
306             auto *notifyconcurrentresult =
307                 helpers::FindFirstInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CALLRUNTIME_NOTIFYCONCURRENTRESULT);
308             auto *input = g_implG->iGetInput(notifyconcurrentresult, 0);
309             helpers::ReplaceInst(notifyconcurrentresult,
310                                  g_dynG->iCreateCallruntimeNotifyconcurrentresult(graph, input));
311             notifyconcurrentresult =
312                 helpers::FindLastInst(graph, ABCKIT_ISA_API_DYNAMIC_OPCODE_CALLRUNTIME_NOTIFYCONCURRENTRESULT);
313             input = g_implG->iGetInput(notifyconcurrentresult, 0);
314             helpers::ReplaceInst(notifyconcurrentresult,
315                                  g_dynG->iCreateCallruntimeNotifyconcurrentresult(graph, input));
316         },
317         [&]([[maybe_unused]] AbckitGraph *graph) {});
318 
319     output =
320         helpers::ExecuteDynamicAbc(ABCKIT_ABC_DIR "ut/isa/isa_dynamic/async/asyncuseconcurrent_dynamic_modified.abc",
321                                    "asyncuseconcurrent_dynamic");
322     EXPECT_TRUE(helpers::Match(output, "42\n"));
323 }
324 
325 }  // namespace libabckit::test
326