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