• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2022-2025 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14add_custom_target(ets_test_suite_coroutines)
15
16# Add ets coroutine tests targets
17#
18# Example usage:
19#
20# add_ets_coroutines_test(FILE ets_file
21#                         [SKIP_ARM32_COMPILER]
22#                         [LIST_UNHANDLED]
23#                         [OPTIONS "--gc-type=epsilon"]
24#                         IMPL "THREADED" "STACKFUL"
25#                         OPTION_SETS_THREADED "DEFAULT"
26#                         OPTION_SETS_STACKFUL "DEFAULT" "POOL" "MIGRATION_AWAIT"
27#                         WORKERS "AUTO" "ONE"
28#                         MODE "INT" "JIT" "AOT" "LLVMAOT" "JITOSR"
29# )
30# This funciont will create a number of tests as a cartesian product of IMPL, OPTION_SETS_${IMPL}, WORKERS, and MODES, e.g.
31#                         THREADED DEFAULT AUTO INT
32#                         THREADED DEFAULT AUTO JIT
33#                         ...
34#                         STACKFUL ONE JITOSR
35#
36# SKIP_ARM32_COMPILER and OPTIONS will apply to all tests
37function(add_ets_coroutines_test)
38    set(prefix ARG)
39    set(noValues SKIP_ARM32_COMPILER LIST_UNHANDLED)
40    set(singleValues FILE)
41    set(multiValues OPTIONS IMPL OPTION_SETS_THREADED OPTION_SETS_STACKFUL WORKERS MODE)
42    cmake_parse_arguments(${prefix} "${noValues}" "${singleValues}" "${multiValues}" ${ARGN})
43
44    if (ARG_SKIP_ARM32_COMPILER)
45        set(SKIP_ARM32_COMPILER "SKIP_ARM32_COMPILER")
46    endif()
47
48    get_filename_component(test_name "${ARG_FILE}" NAME_WE)
49
50    if (ARG_LIST_UNHANDLED)
51        set(list_unhandled_option "--list-unhandled-on-exit:jobs,promises")
52    endif()
53
54    foreach(impl ${ARG_IMPL})
55        string(TOLOWER "${impl}" impl_name)
56        set(impl_option "--coroutine-impl=${impl_name}")
57        if(impl STREQUAL "STACKFUL" AND
58           (CMAKE_BUILD_TYPE STREQUAL "Debug" OR PANDA_ENABLE_ADDRESS_SANITIZER OR PANDA_ENABLE_THREAD_SANITIZER))
59            list(APPEND impl_option "--coroutine-stack-size-pages=128")
60        endif()
61
62        foreach(workers_count ${ARG_WORKERS})
63            set(workers_option "--coroutine-workers-count=0")
64            if (workers_count STREQUAL "ONE")
65                set(workers_option "--coroutine-workers-count=1")
66            endif()
67            string(TOLOWER "${workers_count}" workers_count)
68
69            foreach(option_set ${ARG_OPTION_SETS_${impl}})
70                set(additional_options "")
71                if(option_set STREQUAL "POOL")
72                    set(additional_options "--use-coroutine-pool=true")
73                elseif(option_set STREQUAL "STATS")
74                    set(additional_options "--coroutine-dump-stats=true")
75                elseif(option_set STREQUAL "MIGRATION_AWAIT")
76                    set(additional_options "--coroutine-enable-features:migration,migrate-await")
77                endif()
78                string(TOLOWER "${option_set}" options_name)
79
80                add_ets_test(ets_test_suite_coroutines
81                             FILE ${ARG_FILE}
82                             ${SKIP_ARM32_COMPILER}
83                             TEST_NAME "${test_name}_${impl_name}_${options_name}_workers_${workers_count}"
84                             OPTIONS ${ARG_OPTIONS} ${impl_option} ${additional_options} ${workers_option} ${list_unhandled_option}
85                             MODE ${ARG_MODE}
86                )
87            endforeach()
88        endforeach()
89    endforeach()
90endfunction()
91
92add_ets_coroutines_test(FILE allhandled_rejection.ets
93                        SKIP_ARM32_COMPILER
94                        LIST_UNHANDLED
95                        IMPL "STACKFUL"
96                        OPTION_SETS_STACKFUL "DEFAULT"
97                        WORKERS "AUTO" "ONE"
98                        MODE "INT" "JIT" "AOT"
99)
100
101add_ets_coroutines_test(FILE unhandled_rejection.ets
102                        SKIP_ARM32_COMPILER
103                        LIST_UNHANDLED
104                        IMPL "STACKFUL"
105                        OPTION_SETS_STACKFUL "DEFAULT"
106                        WORKERS "AUTO" "ONE"
107                        MODE "INT" "JIT" "AOT"
108)
109
110add_ets_coroutines_test(FILE async_call.ets
111                        SKIP_ARM32_COMPILER
112                        IMPL "STACKFUL"
113                        OPTION_SETS_STACKFUL "DEFAULT"
114                        WORKERS "ONE"
115                        MODE "INT" "JIT" "AOT"
116)
117
118add_ets_coroutines_test(FILE launch_instruction.ets
119                        SKIP_ARM32_COMPILER
120                        IMPL "STACKFUL"
121                        OPTION_SETS_STACKFUL "POOL"
122                        WORKERS "ONE"
123                        MODE "INT" "JIT" "AOT"
124)
125
126add_ets_coroutines_test(FILE launch_instruction.ets
127                        SKIP_ARM32_COMPILER
128                        IMPL "THREADED" "STACKFUL"
129                        OPTION_SETS_THREADED "DEFAULT"
130                        OPTION_SETS_STACKFUL "DEFAULT"
131                        WORKERS "ONE"
132                        MODE "INT" "JIT"
133)
134
135add_ets_coroutines_test(FILE await.ets
136                        SKIP_ARM32_COMPILER
137                        IMPL "THREADED"
138                        OPTION_SETS_THREADED "DEFAULT"
139                        WORKERS "AUTO" "ONE"
140                        MODE "INT" "JIT"
141)
142
143add_ets_coroutines_test(FILE launch_launch.ets
144                        SKIP_ARM32_COMPILER
145                        IMPL "STACKFUL" # Issue 24058
146                        OPTION_SETS_STACKFUL "DEFAULT"
147                        WORKERS "AUTO" "ONE"
148                        MODE "INT" "JIT"
149)
150
151if (NOT PANDA_TARGET_ARM32)
152    add_ets_coroutines_test(FILE await.ets
153                            SKIP_ARM32_COMPILER
154                            IMPL "STACKFUL"
155                            OPTION_SETS_STACKFUL "POOL"
156                            WORKERS "AUTO"
157                            MODE "INT" "JIT" "AOT"
158    )
159
160    add_ets_coroutines_test(FILE await.ets
161                            SKIP_ARM32_COMPILER
162                            IMPL "STACKFUL"
163                            OPTION_SETS_STACKFUL "DEFAULT" "POOL"
164                            WORKERS "ONE"
165                            MODE "INT" "JIT"
166    )
167
168    add_ets_coroutines_test(FILE launch_exception.ets
169                            SKIP_ARM32_COMPILER
170                            IMPL "THREADED" "STACKFUL"
171                            OPTION_SETS_THREADED "DEFAULT"
172                            OPTION_SETS_STACKFUL "DEFAULT" "POOL"
173                            WORKERS "AUTO" "ONE"
174                            MODE "INT" "JIT"
175    )
176
177    add_ets_coroutines_test(FILE launch_instr_array.ets
178                            SKIP_ARM32_COMPILER
179                            IMPL "STACKFUL" "THREADED"
180                            OPTION_SETS_THREADED "DEFAULT"
181                            OPTION_SETS_STACKFUL "DEFAULT" "POOL"
182                            WORKERS "AUTO" "ONE"
183                            MODE "INT" "JIT"
184    )
185
186    add_ets_coroutines_test(FILE launch_instr_array.ets
187                            SKIP_ARM32_COMPILER
188                            IMPL "STACKFUL"
189                            OPTION_SETS_STACKFUL "POOL"
190                            WORKERS "ONE"
191                            MODE "AOT"
192    )
193
194    # NOTE(26403) Profilesaver is turned off because of data race
195    add_ets_coroutines_test(FILE class_load_race.ets
196                            SKIP_ARM32_COMPILER
197                            OPTIONS "--profilesaver-enabled=false"
198                            IMPL "THREADED" "STACKFUL"
199                            OPTION_SETS_THREADED "DEFAULT"
200                            OPTION_SETS_STACKFUL "DEFAULT" "POOL"
201                            WORKERS "AUTO" "ONE"
202                            MODE "INT" "JIT"
203    )
204
205    # NOTE(26403) Profilesaver is turned off because of data race
206    add_ets_coroutines_test(FILE launch_n_workers.ets
207                            SKIP_ARM32_COMPILER
208                            OPTIONS "--profilesaver-enabled=false"
209                            IMPL "STACKFUL"
210                            OPTION_SETS_STACKFUL "DEFAULT"
211                            WORKERS "AUTO"
212                            MODE "INT" "JIT" "AOT"
213    )
214
215    # NOTE(26403) Profilesaver is turned off because of data race
216    add_ets_coroutines_test(FILE launch_n_workers.ets
217                            SKIP_ARM32_COMPILER
218                            OPTIONS "--profilesaver-enabled=false"
219                            IMPL "STACKFUL"
220                            OPTION_SETS_STACKFUL "POOL"
221                            WORKERS "AUTO"
222                            MODE "INT" "JIT"
223    )
224
225    # NOTE(26403) Profilesaver is turned off because of data race
226    add_ets_coroutines_test(FILE launch_oom.ets
227                            SKIP_ARM32_COMPILER
228                            OPTIONS "--gc-type=epsilon" "--profilesaver-enabled=false"
229                            IMPL "STACKFUL"
230                            OPTION_SETS_STACKFUL "POOL"
231                            WORKERS "ONE"
232                            MODE "INT" "JIT" "AOT"
233    )
234
235    # NOTE(26403) Profilesaver is turned off because of data race
236    add_ets_coroutines_test(FILE launch_oom.ets
237                            SKIP_ARM32_COMPILER
238                            OPTIONS "--gc-type=epsilon" "--profilesaver-enabled=false"
239                            IMPL "STACKFUL"
240                            OPTION_SETS_STACKFUL "DEFAULT"
241                            WORKERS "ONE"
242                            MODE "INT" "JIT"
243    )
244
245    # Depends on issue 12886
246    add_ets_coroutines_test(FILE multiple_launch.ets
247                            SKIP_ARM32_COMPILER
248                            IMPL "THREADED" "STACKFUL"
249                            OPTION_SETS_THREADED "DEFAULT"
250                            OPTION_SETS_STACKFUL "DEFAULT" "POOL"
251                            WORKERS "AUTO" "ONE"
252                            MODE "INT" "JIT"
253    )
254
255    add_ets_coroutines_test(FILE multiple_launch.ets
256                            SKIP_ARM32_COMPILER
257                            IMPL "STACKFUL"
258                            OPTION_SETS_STACKFUL "POOL"
259                            WORKERS "AUTO"
260                            MODE "AOT"
261    )
262
263    add_ets_coroutines_test(FILE multiple_launch.ets
264                            SKIP_ARM32_COMPILER
265                            IMPL "STACKFUL"
266                            OPTION_SETS_STACKFUL "DEFAULT" "POOL"
267                            WORKERS "ONE"
268                            MODE "AOT"
269    )
270
271    add_ets_coroutines_test(FILE concurrent_await.ets
272                        SKIP_ARM32_COMPILER
273                        IMPL "THREADED" "STACKFUL"
274                        OPTION_SETS_THREADED "DEFAULT"
275                        WORKERS "AUTO" "ONE"
276                        MODE "INT" "JIT"
277    )
278
279    add_ets_coroutines_test(FILE eworker_unlimited.ets
280                            SKIP_ARM32_COMPILER
281                            OPTIONS "--coroutine-e-workers-limit=100500"
282                            IMPL "STACKFUL"
283                            OPTION_SETS_STACKFUL "DEFAULT"
284                            WORKERS "ONE"
285                            MODE "INT"
286    )
287endif()
288
289add_ets_coroutines_test(FILE eworker_id.ets
290                        SKIP_ARM32_COMPILER
291                        IMPL "STACKFUL"
292                        OPTION_SETS_STACKFUL "DEFAULT"
293                        WORKERS "AUTO"
294                        MODE "INT"
295)
296
297# # Issue 12886
298add_ets_coroutines_test(FILE launch_return.ets
299                        SKIP_ARM32_COMPILER
300                        IMPL "STACKFUL" # Issue 24058
301                        OPTION_SETS_THREADED "DEFAULT"
302                        OPTION_SETS_STACKFUL "DEFAULT"
303                        WORKERS "ONE"
304                        MODE "INT"
305)
306
307add_ets_coroutines_test(FILE launch_yield.ets
308                        SKIP_ARM32_COMPILER
309                        IMPL "THREADED" "STACKFUL"
310                        OPTION_SETS_THREADED "DEFAULT"
311                        OPTION_SETS_STACKFUL "DEFAULT"
312                        WORKERS "ONE"
313                        MODE "INT" "JIT" "AOT"
314)
315
316add_ets_coroutines_test(FILE launch_yield.ets
317                        SKIP_ARM32_COMPILER
318                        IMPL "STACKFUL"
319                        OPTION_SETS_STACKFUL "POOL"
320                        WORKERS "ONE"
321                        MODE "INT" "JIT"
322)
323
324add_ets_coroutines_test(FILE affinity.ets
325                        SKIP_ARM32_COMPILER
326                        IMPL "STACKFUL"
327                        OPTION_SETS_STACKFUL "DEFAULT"
328                        WORKERS "AUTO"
329                        MODE "INT"
330)
331
332add_ets_coroutines_test(FILE wake_for_another_event.ets
333                        SKIP_ARM32_COMPILER
334                        IMPL "THREADED" "STACKFUL"
335                        OPTION_SETS_STACKFUL "DEFAULT"
336                        WORKERS "AUTO"
337                        MODE "INT" "JIT" "AOT"
338)
339
340add_ets_coroutines_test(FILE await_standalone_promise.ets
341                        SKIP_ARM32_COMPILER
342                        IMPL "THREADED" "STACKFUL"
343                        OPTION_SETS_STACKFUL "DEFAULT"
344                        WORKERS "AUTO"
345                        MODE "INT" "JIT" "AOT"
346)
347
348add_ets_coroutines_test(FILE stats.ets
349                        SKIP_ARM32_COMPILER
350                        IMPL "STACKFUL"
351                        OPTION_SETS_STACKFUL "STATS"
352                        WORKERS "AUTO"
353                        MODE "INT"
354)
355
356add_ets_coroutines_test(FILE eaworker_coroutines.ets
357                        SKIP_ARM32_COMPILER
358                        IMPL "STACKFUL"
359                        OPTION_SETS_STACKFUL "DEFAULT"
360                        WORKERS "AUTO"
361                        MODE "INT"
362)
363
364add_ets_coroutines_test(FILE eworkers_reached_limit.ets
365                        SKIP_ARM32_COMPILER
366                        IMPL "STACKFUL"
367                        OPTION_SETS_STACKFUL "DEFAULT"
368                        WORKERS "AUTO"
369                        MODE "INT"
370)
371
372add_ets_coroutines_test(FILE eworker_interop_exception.ets
373                        SKIP_ARM32_COMPILER
374                        IMPL "STACKFUL"
375                        OPTION_SETS_STACKFUL "DEFAULT"
376                        WORKERS "AUTO"
377                        MODE "INT"
378)
379
380add_ets_coroutines_test(FILE launch.ets
381                        SKIP_ARM32_COMPILER
382                        IMPL "THREADED" "STACKFUL"
383                        OPTION_SETS_STACKFUL "DEFAULT"
384                        WORKERS "AUTO"
385                        MODE "INT" "JIT" "AOT"
386)
387
388add_ets_coroutines_test(FILE setTimeout.ets
389                        SKIP_ARM32_COMPILER
390                        IMPL "STACKFUL"
391                        OPTION_SETS_STACKFUL "DEFAULT"
392                        WORKERS "AUTO"
393                        MODE "INT"
394)
395
396add_ets_coroutines_test(FILE scale_workers_pool.ets
397                        SKIP_ARM32_COMPILER
398                        IMPL "STACKFUL"
399                        OPTION_SETS_STACKFUL "DEFAULT"
400                        WORKERS "ONE"
401                        MODE "INT"
402)
403
404add_ets_coroutines_test(FILE await_migrate.ets
405                        SKIP_ARM32_COMPILER
406                        IMPL "STACKFUL"
407                        OPTION_SETS_STACKFUL "MIGRATION_AWAIT"
408                        WORKERS "AUTO"
409                        MODE "INT"
410)
411
412add_ets_coroutines_test(FILE job_test.ets
413                        SKIP_ARM32_COMPILER
414                        IMPL "STACKFUL"
415                        OPTION_SETS_STACKFUL "DEFAULT"
416                        WORKERS "AUTO"
417                        MODE "INT"
418)
419
420add_ets_coroutines_test(FILE execution_order.ets
421                        SKIP_ARM32_COMPILER
422                        IMPL "STACKFUL"
423                        OPTION_SETS_STACKFUL "DEFAULT"
424                        WORKERS "ONE"
425                        MODE "INT"
426)
427
428add_ets_coroutines_test(FILE eworker_parameter.ets
429                        SKIP_ARM32_COMPILER
430                        IMPL "STACKFUL"
431                        OPTION_SETS_STACKFUL "DEFAULT"
432                        WORKERS "AUTO"
433                        MODE "INT"
434)
435
436add_ets_coroutines_test(FILE await_async_return_reject_promise.ets
437                        SKIP_ARM32_COMPILER
438                        IMPL "THREADED" "STACKFUL"
439                        OPTION_SETS_STACKFUL "DEFAULT"
440                        WORKERS "AUTO"
441                        MODE "INT" "JIT" "AOT"
442)
443
444add_ets_coroutines_test(FILE eworker_post_to_main.ets
445                        SKIP_ARM32_COMPILER
446                        IMPL "STACKFUL"
447                        OPTION_SETS_STACKFUL "DEFAULT"
448                        WORKERS "AUTO"
449                        MODE "INT"
450)
451