• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2022-2024 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#                         [OPTIONS "--gc-type=epsilon"]
23#                         IMPL "THREADED" "STACKFUL"
24#                         OPTION_SETS_THREADED "DEFAULT"
25#                         OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL" "JS_POOL"
26#                         WORKERS "AUTO" "ONE"
27#                         MODE "INT" "JIT" "AOT" "LLVMAOT" "JITOSR"
28# )
29# This funciont will create a number of tests as a cartesian product of IMPL, OPTION_SETS_${IMPL}, WORKERS, and MODES, e.g.
30#                         THREADED DEFAULT AUTO INT
31#                         THREADED DEFAULT AUTO JIT
32#                         ...
33#                         STACKFUL JS_POOL ONE JITOSR
34#
35# SKIP_ARM32_COMPILER and OPTIONS will apply to all tests
36function(add_ets_coroutines_test)
37    set(prefix ARG)
38    set(noValues SKIP_ARM32_COMPILER)
39    set(singleValues FILE)
40    set(multiValues OPTIONS IMPL OPTION_SETS_THREADED OPTION_SETS_STACKFUL WORKERS MODE)
41    cmake_parse_arguments(${prefix} "${noValues}" "${singleValues}" "${multiValues}" ${ARGN})
42
43    if (ARG_SKIP_ARM32_COMPILER)
44        set(SKIP_ARM32_COMPILER "SKIP_ARM32_COMPILER")
45    endif()
46
47    get_filename_component(test_name "${ARG_FILE}" NAME_WE)
48
49    foreach(impl ${ARG_IMPL})
50        string(TOLOWER "${impl}" impl_name)
51        set(impl_option "--coroutine-impl=${impl_name}")
52        if(impl STREQUAL "STACKFUL" AND
53           (CMAKE_BUILD_TYPE STREQUAL "Debug" OR PANDA_ENABLE_ADDRESS_SANITIZER OR PANDA_ENABLE_THREAD_SANITIZER))
54            list(APPEND impl_option "--coroutine-stack-size-pages=128")
55        endif()
56
57        foreach(workers_count ${ARG_WORKERS})
58            set(workers_option "--coroutine-workers-count=0")
59            if (workers_count STREQUAL "ONE")
60                set(workers_option "--coroutine-workers-count=1")
61            endif()
62            string(TOLOWER "${workers_count}" workers_count)
63
64            foreach(option_set ${ARG_OPTION_SETS_${impl}})
65                set(additional_options "")
66                if(option_set STREQUAL "JS")
67                    set(additional_options "--coroutine-js-mode=true")
68                elseif(option_set STREQUAL "POOL")
69                    set(additional_options "--use-coroutine-pool=true")
70                elseif(option_set STREQUAL "JS_POOL")
71                    set(additional_options "--coroutine-js-mode=true" "--use-coroutine-pool=true")
72                elseif(option_set STREQUAL "STATS")
73                    set(additional_options "--coroutine-dump-stats=true")
74                endif()
75                string(TOLOWER "${option_set}" options_name)
76
77                add_ets_test(ets_test_suite_coroutines
78                             FILE ${ARG_FILE}
79                             ${SKIP_ARM32_COMPILER}
80                             TEST_NAME "${test_name}_${impl_name}_${options_name}_workers_${workers_count}"
81                             OPTIONS ${ARG_OPTIONS} ${impl_option} ${additional_options} ${workers_option}
82                             MODE ${ARG_MODE}
83                )
84            endforeach()
85        endforeach()
86    endforeach()
87endfunction()
88
89add_ets_coroutines_test(FILE async_call.sts
90                        SKIP_ARM32_COMPILER
91                        IMPL "STACKFUL"
92                        OPTION_SETS_STACKFUL "JS"
93                        WORKERS "ONE"
94                        MODE "INT" "JIT" "AOT"
95)
96
97add_ets_coroutines_test(FILE async_call.sts
98                        SKIP_ARM32_COMPILER
99                        IMPL "THREADED" "STACKFUL"
100                        OPTION_SETS_THREADED "DEFAULT"
101                        OPTION_SETS_STACKFUL "DEFAULT"
102                        WORKERS "ONE"
103                        MODE "INT" "JIT"
104)
105
106add_ets_coroutines_test(FILE launch_instruction.sts
107                        SKIP_ARM32_COMPILER
108                        IMPL "STACKFUL"
109                        OPTION_SETS_STACKFUL "JS_POOL"
110                        WORKERS "ONE"
111                        MODE "INT" "JIT" "AOT"
112)
113
114add_ets_coroutines_test(FILE launch_instruction.sts
115                        SKIP_ARM32_COMPILER
116                        IMPL "THREADED" "STACKFUL"
117                        OPTION_SETS_THREADED "DEFAULT"
118                        OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL"
119                        WORKERS "ONE"
120                        MODE "INT" "JIT"
121)
122
123add_ets_coroutines_test(FILE await.sts
124                        SKIP_ARM32_COMPILER
125                        IMPL "THREADED"
126                        OPTION_SETS_THREADED "DEFAULT"
127                        WORKERS "AUTO" "ONE"
128                        MODE "INT" "JIT"
129)
130
131add_ets_coroutines_test(FILE launch_launch.sts
132                        SKIP_ARM32_COMPILER
133                        IMPL "THREADED"
134                        OPTION_SETS_THREADED "DEFAULT"
135                        WORKERS "AUTO" "ONE"
136                        MODE "INT" "JIT"
137)
138
139if (NOT PANDA_TARGET_ARM32)
140    add_ets_coroutines_test(FILE await.sts
141                            SKIP_ARM32_COMPILER
142                            IMPL "STACKFUL"
143                            OPTION_SETS_STACKFUL "JS_POOL"
144                            WORKERS "AUTO"
145                            MODE "INT" "JIT" "AOT"
146    )
147
148    add_ets_coroutines_test(FILE await.sts
149                            SKIP_ARM32_COMPILER
150                            IMPL "STACKFUL"
151                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL" "JS_POOL"
152                            WORKERS "ONE"
153                            MODE "INT" "JIT"
154    )
155
156    add_ets_coroutines_test(FILE launch_exception.sts
157                            SKIP_ARM32_COMPILER
158                            IMPL "THREADED" "STACKFUL"
159                            OPTION_SETS_THREADED "DEFAULT"
160                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL" "JS_POOL"
161                            WORKERS "AUTO" "ONE"
162                            MODE "INT" "JIT"
163    )
164
165    add_ets_coroutines_test(FILE launch_instr_array.sts
166                            SKIP_ARM32_COMPILER
167                            IMPL "THREADED" "STACKFUL"
168                            OPTION_SETS_THREADED "DEFAULT"
169                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL" "JS_POOL"
170                            WORKERS "AUTO"
171                            MODE "INT" "JIT"
172    )
173
174    add_ets_coroutines_test(FILE launch_instr_array.sts
175                            SKIP_ARM32_COMPILER
176                            IMPL "THREADED" "STACKFUL"
177                            OPTION_SETS_THREADED "DEFAULT"
178                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "JS_POOL"
179                            WORKERS "ONE"
180                            MODE "INT" "JIT"
181    )
182
183    add_ets_coroutines_test(FILE launch_instr_array.sts
184                            SKIP_ARM32_COMPILER
185                            IMPL "STACKFUL"
186                            OPTION_SETS_STACKFUL "POOL"
187                            WORKERS "ONE"
188                            MODE "INT" "JIT" "AOT"
189    )
190
191    add_ets_coroutines_test(FILE class_load_race.sts
192                            SKIP_ARM32_COMPILER
193                            IMPL "THREADED" "STACKFUL"
194                            OPTION_SETS_THREADED "DEFAULT"
195                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL" "JS_POOL"
196                            WORKERS "AUTO" "ONE"
197                            MODE "INT" "JIT"
198    )
199
200    add_ets_coroutines_test(FILE launch_n_workers.sts
201                            SKIP_ARM32_COMPILER
202                            IMPL "STACKFUL"
203                            OPTION_SETS_STACKFUL "DEFAULT"
204                            WORKERS "AUTO"
205                            MODE "INT" "JIT" "AOT"
206    )
207
208    add_ets_coroutines_test(FILE launch_n_workers.sts
209                            SKIP_ARM32_COMPILER
210                            IMPL "STACKFUL"
211                            OPTION_SETS_STACKFUL "JS" "POOL" "JS_POOL"
212                            WORKERS "AUTO"
213                            MODE "INT" "JIT"
214    )
215
216    add_ets_coroutines_test(FILE launch_oom.sts
217                            SKIP_ARM32_COMPILER
218                            OPTIONS "--gc-type=epsilon"
219                            IMPL "STACKFUL"
220                            OPTION_SETS_STACKFUL "JS_POOL"
221                            WORKERS "ONE"
222                            MODE "INT" "JIT" "AOT"
223    )
224
225    add_ets_coroutines_test(FILE launch_oom.sts
226                            SKIP_ARM32_COMPILER
227                            OPTIONS "--gc-type=epsilon"
228                            IMPL "STACKFUL"
229                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "POOL"
230                            WORKERS "ONE"
231                            MODE "INT" "JIT"
232    )
233
234    # Depends on issue 12886
235    add_ets_coroutines_test(FILE multiple_launch.sts
236                            SKIP_ARM32_COMPILER
237                            IMPL "THREADED" "STACKFUL"
238                            OPTION_SETS_THREADED "DEFAULT"
239                            OPTION_SETS_STACKFUL "DEFAULT" "JS" "JS_POOL"
240                            WORKERS "AUTO"
241                            MODE "INT" "JIT"
242    )
243
244    add_ets_coroutines_test(FILE multiple_launch.sts
245                            SKIP_ARM32_COMPILER
246                            IMPL "THREADED" "STACKFUL"
247                            OPTION_SETS_THREADED "DEFAULT"
248                            OPTION_SETS_STACKFUL "JS" "POOL"
249                            WORKERS "ONE"
250                            MODE "INT" "JIT"
251    )
252
253    add_ets_coroutines_test(FILE multiple_launch.sts
254                            SKIP_ARM32_COMPILER
255                            IMPL "STACKFUL"
256                            OPTION_SETS_STACKFUL "POOL"
257                            WORKERS "AUTO"
258                            MODE "INT" "JIT" "AOT"
259    )
260
261    add_ets_coroutines_test(FILE multiple_launch.sts
262                            SKIP_ARM32_COMPILER
263                            IMPL "STACKFUL"
264                            OPTION_SETS_STACKFUL "DEFAULT" "JS_POOL"
265                            WORKERS "ONE"
266                            MODE "INT" "JIT" "AOT"
267    )
268
269    add_ets_coroutines_test(FILE concurrent_await.sts
270                        SKIP_ARM32_COMPILER
271                        IMPL "THREADED" "STACKFUL"
272                        OPTION_SETS_THREADED "DEFAULT"
273                        WORKERS "AUTO" "ONE"
274                        MODE "INT" "JIT"
275    )
276endif()
277# # Issue 12886
278add_ets_coroutines_test(FILE launch_return.sts
279                        SKIP_ARM32_COMPILER
280                        IMPL "THREADED" "STACKFUL"
281                        OPTION_SETS_THREADED "DEFAULT"
282                        OPTION_SETS_STACKFUL "DEFAULT" "JS"
283                        WORKERS "ONE"
284                        MODE "INT" "JIT"
285)
286
287add_ets_coroutines_test(FILE launch_yield.sts
288                        SKIP_ARM32_COMPILER
289                        IMPL "THREADED" "STACKFUL"
290                        OPTION_SETS_THREADED "DEFAULT"
291                        OPTION_SETS_STACKFUL "DEFAULT"
292                        WORKERS "ONE"
293                        MODE "INT" "JIT" "AOT"
294)
295
296add_ets_coroutines_test(FILE launch_yield.sts
297                        SKIP_ARM32_COMPILER
298                        IMPL "STACKFUL"
299                        OPTION_SETS_STACKFUL "JS" "JS_POOL"
300                        WORKERS "ONE"
301                        MODE "INT" "JIT"
302)
303
304add_ets_coroutines_test(FILE affinity.sts
305                        SKIP_ARM32_COMPILER
306                        IMPL "STACKFUL"
307                        OPTION_SETS_STACKFUL "DEFAULT"
308                        WORKERS "AUTO"
309                        MODE "INT"
310)
311
312add_ets_coroutines_test(FILE wake_for_another_event.sts
313                        SKIP_ARM32_COMPILER
314                        IMPL "THREADED" "STACKFUL"
315                        OPTION_SETS_STACKFUL "DEFAULT"
316                        WORKERS "AUTO"
317                        MODE "INT" "JIT" "AOT"
318)
319
320add_ets_coroutines_test(FILE await_standalone_promise.sts
321                        SKIP_ARM32_COMPILER
322                        IMPL "THREADED" "STACKFUL"
323                        OPTION_SETS_STACKFUL "DEFAULT"
324                        WORKERS "AUTO"
325                        MODE "INT" "JIT" "AOT"
326)
327
328add_ets_coroutines_test(FILE stats.sts
329                        SKIP_ARM32_COMPILER
330                        IMPL "STACKFUL"
331                        OPTION_SETS_STACKFUL "STATS"
332                        WORKERS "AUTO"
333                        MODE "INT"
334)
335
336