From 50f50df8b190d1d659ae07e859170e3ed1a671b9 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Fri, 31 May 2024 02:55:50 +0200 Subject: [PATCH] tests: add --no-threads argument to disable threads This is useful for Emscripten that can be built without threads support --- test/testatomic.c | 28 +++++++++++++++++++++++++--- test/testerror.c | 44 +++++++++++++++++++++++++++++++++----------- test/testsem.c | 37 ++++++++++++++++++++++++------------- 3 files changed, 82 insertions(+), 27 deletions(-) diff --git a/test/testatomic.c b/test/testatomic.c index e2c3dda2b8..9350d6c993 100644 --- a/test/testatomic.c +++ b/test/testatomic.c @@ -703,6 +703,8 @@ static void RunFIFOTest(SDL_bool lock_free) int main(int argc, char *argv[]) { SDLTest_CommonState *state; + int i; + SDL_bool enable_threads = SDL_TRUE; /* Initialize test framework */ state = SDLTest_CommonCreateState(argv, 0); @@ -714,8 +716,26 @@ int main(int argc, char *argv[]) SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); /* Parse commandline */ - if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { - return 1; + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--no-threads") == 0) { + enable_threads = SDL_FALSE; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { + "[--no-threads]", + NULL + }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + i += consumed; } RunBasicTest(); @@ -725,7 +745,9 @@ int main(int argc, char *argv[]) return 0; } - RunEpicTest(); + if (enable_threads) { + RunEpicTest(); + } /* This test is really slow, so don't run it by default */ #if 0 RunFIFOTest(SDL_FALSE); diff --git a/test/testerror.c b/test/testerror.c index 5ceca0a3eb..780369b8d3 100644 --- a/test/testerror.c +++ b/test/testerror.c @@ -49,6 +49,8 @@ int main(int argc, char *argv[]) { SDL_Thread *thread; SDLTest_CommonState *state; + int i; + SDL_bool enable_threads = SDL_TRUE; /* Initialize test framework */ state = SDLTest_CommonCreateState(argv, 0); @@ -60,8 +62,26 @@ int main(int argc, char *argv[]) SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); /* Parse commandline */ - if (!SDLTest_CommonDefaultArgs(state, argc, argv)) { - return 1; + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--no-threads") == 0) { + enable_threads = SDL_FALSE; + consumed = 1; + } + } + if (consumed < 0) { + static const char *options[] = { + "[--no-threads]", + NULL + }; + SDLTest_CommonLogUsage(state, argv[0], options); + return 1; + } + i += consumed; } /* Load the SDL library */ @@ -79,16 +99,18 @@ int main(int argc, char *argv[]) return 0; } - alive = 1; - thread = SDL_CreateThread(ThreadFunc, NULL, "#1"); - if (!thread) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); - quit(1); + if (enable_threads) { + alive = 1; + thread = SDL_CreateThread(ThreadFunc, NULL, "#1"); + if (!thread) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); } - SDL_Delay(5 * 1000); - SDL_Log("Waiting for thread #1\n"); - alive = 0; - SDL_WaitThread(thread, NULL); SDL_Log("Main thread error string: %s\n", SDL_GetError()); diff --git a/test/testsem.c b/test/testsem.c index e7f0dd0eb1..359c532a3e 100644 --- a/test/testsem.c +++ b/test/testsem.c @@ -37,7 +37,7 @@ typedef struct Thread_State } Thread_State; static void log_usage(char *progname, SDLTest_CommonState *state) { - static const char *options[] = { "init_value", NULL }; + static const char *options[] = { "[--no-threads]", "init_value", NULL }; SDLTest_CommonLogUsage(state, progname, options); } @@ -120,8 +120,8 @@ TestWaitTimeout(void) duration = end_ticks - start_ticks; /* Accept a little offset in the effective wait */ - SDL_assert(duration > 1900 && duration < 2050); SDL_Log("Wait took %" SDL_PRIu64 " milliseconds\n\n", duration); + SDL_assert(duration > 1900 && duration < 2050); /* Check to make sure the return value indicates timed out */ if (retval != SDL_MUTEX_TIMEDOUT) { @@ -257,6 +257,7 @@ int main(int argc, char **argv) int arg_count = 0; int i; int init_sem = 0; + SDL_bool enable_threads = SDL_TRUE; SDLTest_CommonState *state; /* Initialize test framework */ @@ -273,12 +274,18 @@ int main(int argc, char **argv) int consumed; consumed = SDLTest_CommonArg(state, i); - if (arg_count == 0) { - char *endptr; - init_sem = SDL_strtol(argv[i], &endptr, 0); - if (endptr != argv[i] && *endptr == '\0') { - arg_count++; + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--no-threads") == 0) { + enable_threads = SDL_FALSE; consumed = 1; + } else if (arg_count == 0) { + char *endptr; + init_sem = SDL_strtol(argv[i], &endptr, 0); + if (endptr != argv[i] && *endptr == '\0') { + arg_count++; + consumed = 1; + } } } if (consumed <= 0) { @@ -302,17 +309,21 @@ int main(int argc, char **argv) (void)signal(SIGTERM, killed); (void)signal(SIGINT, killed); - if (init_sem > 0) { - TestRealWorld(init_sem); - } + if (enable_threads) { + if (init_sem > 0) { + TestRealWorld(init_sem); + } - TestWaitTimeout(); + TestWaitTimeout(); + } TestOverheadUncontended(); - TestOverheadContended(SDL_FALSE); + if (enable_threads) { + TestOverheadContended(SDL_FALSE); - TestOverheadContended(SDL_TRUE); + TestOverheadContended(SDL_TRUE); + } SDL_Quit(); SDLTest_CommonDestroyState(state);