From 1b33fdb466948a09ec9eb1d7f840711785bb6972 Mon Sep 17 00:00:00 2001 From: Andreas Schiffler Date: Fri, 8 Feb 2013 07:14:50 -0800 Subject: [PATCH] Add SDL_test test suite; add fuzzer test cases; fix fuzzer bug; fix compiler warnings --- .../testautomation_vs2010.vcxproj | 1 + .../testautomation_vs2012.vcxproj | 1 + src/test/SDL_test_fuzzer.c | 2 +- src/video/windows/SDL_windowswindow.c | 2 +- test/Makefile.in | 1 + test/testautomation_audio.c | 6 +- test/testautomation_sdltest.c | 138 ++++++++++++++++++ test/testautomation_suites.h | 2 + 8 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 test/testautomation_sdltest.c diff --git a/VisualC/tests/testautomation/testautomation_vs2010.vcxproj b/VisualC/tests/testautomation/testautomation_vs2010.vcxproj index 4c7acf808..59193f1c4 100644 --- a/VisualC/tests/testautomation/testautomation_vs2010.vcxproj +++ b/VisualC/tests/testautomation/testautomation_vs2010.vcxproj @@ -188,6 +188,7 @@ + diff --git a/VisualC/tests/testautomation/testautomation_vs2012.vcxproj b/VisualC/tests/testautomation/testautomation_vs2012.vcxproj index 9a831220e..3e0a76797 100644 --- a/VisualC/tests/testautomation/testautomation_vs2012.vcxproj +++ b/VisualC/tests/testautomation/testautomation_vs2012.vcxproj @@ -192,6 +192,7 @@ + diff --git a/src/test/SDL_test_fuzzer.c b/src/test/SDL_test_fuzzer.c index 92c1ae942..0192341a3 100644 --- a/src/test/SDL_test_fuzzer.c +++ b/src/test/SDL_test_fuzzer.c @@ -586,7 +586,7 @@ SDLTest_RandomUnitFloat() float SDLTest_RandomFloat() { - return (float) (FLT_MIN + SDLTest_RandomUnitDouble() * (FLT_MAX - FLT_MIN)); + return (float) (SDLTest_RandomUnitDouble() * (double)2.0 * (double)FLT_MAX - (double)(FLT_MAX)); } double diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index b1832b2e5..69b407c4b 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -557,7 +557,7 @@ WIN_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed) { HWND top; SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; + HWND hwnd = data->hwnd; UINT flags = SWP_NOMOVE | SWP_NOSIZE; if ( SDL_ShouldAllowTopmost() && (window->flags & SDL_WINDOW_INPUT_FOCUS ) ) { diff --git a/test/Makefile.in b/test/Makefile.in index 07f11d140..5ebdd5e22 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -80,6 +80,7 @@ testautomation$(EXE): $(srcdir)/testautomation.c \ $(srcdir)/testautomation_keyboard.c \ $(srcdir)/testautomation_video.c \ $(srcdir)/testautomation_syswm.c \ + $(srcdir)/testautomation_sdltest.c \ $(srcdir)/testautomation_mouse.c \ $(srcdir)/testautomation_timer.c $(CC) -o $@ $^ $(CFLAGS) -lSDL2_test $(LIBS) diff --git a/test/testautomation_audio.c b/test/testautomation_audio.c index 725c7d66c..c28486ff3 100644 --- a/test/testautomation_audio.c +++ b/test/testautomation_audio.c @@ -612,7 +612,7 @@ int audio_convertAudio() */ int audio_openCloseAudioDeviceConnected() { - int result; + int result = -1; int i; int count; char *device; @@ -641,7 +641,7 @@ int audio_openCloseAudioDeviceConnected() /* Open device */ id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); - SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >=2, got: %i", id); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >1, got: %i", id); if (id > 1) { /* TODO: enable test code when function is available in SDL2 */ @@ -650,8 +650,8 @@ int audio_openCloseAudioDeviceConnected() /* Get connected status */ result = SDL_AudioDeviceConnected(id); SDLTest_AssertPass("Call to SDL_AudioDeviceConnected()"); - SDLTest_AssertCheck(result == 1, "Verify returned value; expected: 0; got: %i", result); #endif + SDLTest_AssertCheck(result == 1, "Verify returned value; expected: 1; got: %i", result); /* Close device again */ SDL_CloseAudioDevice(id); diff --git a/test/testautomation_sdltest.c b/test/testautomation_sdltest.c new file mode 100644 index 000000000..4e8db3b1d --- /dev/null +++ b/test/testautomation_sdltest.c @@ -0,0 +1,138 @@ +/** + * SDL_test test suite + */ + +#include +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* Test case functions */ + +/** + * @brief Calls to SDLTest_GetFuzzerInvocationCount() + */ +int +sdltest_getFuzzerInvocationCount(void *arg) +{ + Uint8 result; + int fuzzerCount1, fuzzerCount2; + + fuzzerCount1 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount1 >= 0, "Verify returned value, expected: >=0, got: %d", fuzzerCount1); + + result = SDLTest_RandomUint8(); + SDLTest_AssertPass("Call to SDLTest_RandomUint8(), returned %d", result); + + fuzzerCount2 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount2 > fuzzerCount1, "Verify returned value, expected: >%d, got: %d", fuzzerCount1, fuzzerCount2); + + return TEST_COMPLETED; +} + + +/** + * @brief Calls to random number generators + */ +int +sdltest_randomNumber(void *arg) +{ + Sint64 result; + Uint64 uresult; + double dresult; + Uint64 umax; + Sint64 min, max; + + result = (Sint64)SDLTest_RandomUint8(); + umax = (1 << 8) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint8"); + SDLTest_AssertCheck(result >= 0 && result <= umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result); + + result = (Sint64)SDLTest_RandomSint8(); + min = 1 - (1 << 7); + max = (1 << 7) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint8"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result); + + result = (Sint64)SDLTest_RandomUint16(); + umax = (1 << 16) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint16"); + SDLTest_AssertCheck(result >= 0 && result <= umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result); + + result = (Sint64)SDLTest_RandomSint16(); + min = 1 - (1 << 15); + max = (1 << 15) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint16"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result); + + result = (Sint64)SDLTest_RandomUint32(); + umax = ((Uint64)1 << 32) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint32"); + SDLTest_AssertCheck(result >= 0 && result <= umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result); + + result = (Sint64)SDLTest_RandomSint32(); + min = 1 - ((Sint64)1 << 31); + max = ((Sint64)1 << 31) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint32"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result); + + result = (Sint64)SDLTest_RandomUint32(); + umax = ((Uint64)1 << 32) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint32"); + SDLTest_AssertCheck(result >= 0 && result <= umax, "Verify result value, expected: [0,%llu], got: %lld", umax, result); + + result = (Sint64)SDLTest_RandomSint32(); + min = 1 - ((Sint64)1 << 31); + max = ((Sint64)1 << 31) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint32"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%lld,%lld], got: %lld", min, max, result); + + uresult = SDLTest_RandomUint64(); + SDLTest_AssertPass("Call to SDLTest_RandomUint64"); + + result = SDLTest_RandomSint64(); + SDLTest_AssertPass("Call to SDLTest_RandomSint64"); + + dresult = (double)SDLTest_RandomUnitFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitFloat"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = (double)SDLTest_RandomFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomFloat"); + SDLTest_AssertCheck(dresult >= (double)(-FLT_MAX) && dresult <= (double)FLT_MAX, "Verify result value, expected: [%e,%e], got: %e", (double)(-FLT_MAX), (double)FLT_MAX, dresult); + + dresult = (double)SDLTest_RandomUnitDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitDouble"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = SDLTest_RandomDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomDouble"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* SDL_test test cases */ +static const SDLTest_TestCaseReference sdltestTest1 = + { (SDLTest_TestCaseFp)sdltest_getFuzzerInvocationCount, "sdltest_getFuzzerInvocationCount", "Call to sdltest_GetFuzzerInvocationCount", TEST_ENABLED }; + +static const SDLTest_TestCaseReference sdltestTest2 = + { (SDLTest_TestCaseFp)sdltest_randomNumber, "sdltest_randomNumber", "Calls to random number generators", TEST_ENABLED }; + +/* Sequence of SDL_test test cases */ +static const SDLTest_TestCaseReference *sdltestTests[] = { + &sdltestTest1, &sdltestTest2, NULL +}; + +/* SDL_test test suite (global) */ +SDLTest_TestSuiteReference sdltestTestSuite = { + "SDLtest", + NULL, + sdltestTests, + NULL +}; diff --git a/test/testautomation_suites.h b/test/testautomation_suites.h index cea10d40b..c8c33a29f 100644 --- a/test/testautomation_suites.h +++ b/test/testautomation_suites.h @@ -19,6 +19,7 @@ extern SDLTest_TestSuiteReference renderTestSuite; extern SDLTest_TestSuiteReference rwopsTestSuite; extern SDLTest_TestSuiteReference surfaceTestSuite; extern SDLTest_TestSuiteReference syswmTestSuite; +extern SDLTest_TestSuiteReference sdltestTestSuite; extern SDLTest_TestSuiteReference videoTestSuite; extern SDLTest_TestSuiteReference mouseTestSuite; extern SDLTest_TestSuiteReference timerTestSuite; @@ -35,6 +36,7 @@ SDLTest_TestSuiteReference *testSuites[] = { &rwopsTestSuite, &surfaceTestSuite, &syswmTestSuite, + &sdltestTestSuite, &videoTestSuite, &mouseTestSuite, &timerTestSuite,