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