This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
208 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
/** | ||
* Timer test suite | ||
*/ | ||
|
||
#include <stdio.h> | ||
|
||
#include "SDL.h" | ||
#include "SDL_test.h" | ||
|
||
/* Flag indicating if the param should be checked */ | ||
int _paramCheck = 0; | ||
|
||
/* Userdata value to check */ | ||
int _paramValue = 0; | ||
|
||
/* Flag indicating that the callback was called */ | ||
int _timerCallbackCalled = 0; | ||
|
||
/* Fixture */ | ||
|
||
void | ||
_timerSetUp(void *arg) | ||
{ | ||
/* Start SDL timer subsystem */ | ||
int ret = SDL_InitSubSystem( SDL_INIT_TIMER ); | ||
SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_TIMER)"); | ||
SDLTest_AssertCheck(ret==0, "Check result from SDL_InitSubSystem(SDL_INIT_TIMER)"); | ||
if (ret != 0) { | ||
SDLTest_LogError("%s", SDL_GetError()); | ||
} | ||
} | ||
|
||
/* Test case functions */ | ||
|
||
/** | ||
* @brief Call to SDL_GetPerformanceCounter | ||
*/ | ||
int | ||
timer_getPerformanceCounter(void *arg) | ||
{ | ||
Uint64 result; | ||
|
||
result = SDL_GetPerformanceCounter(); | ||
SDLTest_AssertPass("Call to SDL_GetPerformanceCounter()"); | ||
SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %lu", result); | ||
|
||
return TEST_COMPLETED; | ||
} | ||
|
||
/** | ||
* @brief Call to SDL_GetPerformanceFrequency | ||
*/ | ||
int | ||
timer_getPerformanceFrequency(void *arg) | ||
{ | ||
Uint64 result; | ||
|
||
result = SDL_GetPerformanceFrequency(); | ||
SDLTest_AssertPass("Call to SDL_GetPerformanceFrequency()"); | ||
SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %lu", result); | ||
|
||
return TEST_COMPLETED; | ||
} | ||
|
||
/** | ||
* @brief Call to SDL_Delay and SDL_GetTicks | ||
*/ | ||
int | ||
timer_delayAndGetTicks(void *arg) | ||
{ | ||
const Uint32 testDelay = 100; | ||
const Uint32 marginOfError = 25; | ||
Uint32 result; | ||
Uint32 result2; | ||
Uint32 difference; | ||
|
||
/* Zero delay */ | ||
SDL_Delay(0); | ||
SDLTest_AssertPass("Call to SDL_Delay(0)"); | ||
|
||
/* Non-zero delay */ | ||
SDL_Delay(1); | ||
SDLTest_AssertPass("Call to SDL_Delay(1)"); | ||
|
||
SDL_Delay(SDLTest_RandomIntegerInRange(5, 15)); | ||
SDLTest_AssertPass("Call to SDL_Delay()"); | ||
|
||
/* Get ticks count - should be non-zero by now */ | ||
result = SDL_GetTicks(); | ||
SDLTest_AssertPass("Call to SDL_GetTicks()"); | ||
SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %d", result); | ||
|
||
/* Delay a bit longer and mesure ticks and verify difference */ | ||
SDL_Delay(testDelay); | ||
SDLTest_AssertPass("Call to SDL_Delay(%d)", testDelay); | ||
result2 = SDL_GetTicks(); | ||
SDLTest_AssertPass("Call to SDL_GetTicks()"); | ||
SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %d", result2); | ||
difference = result2 - result; | ||
SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%d, got: %d", testDelay - marginOfError, difference); | ||
SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%d, got: %d", testDelay + marginOfError, difference); | ||
|
||
return TEST_COMPLETED; | ||
} | ||
|
||
/* Test callback */ | ||
Uint32 _timerTestCallback(Uint32 interval, void *param) | ||
{ | ||
_timerCallbackCalled = 1; | ||
|
||
if (_paramCheck != 0) { | ||
SDLTest_AssertCheck(param != NULL, "Check param pointer, expected: non-NULL, got: %s", (param != NULL) ? "non-NULL" : "NULL"); | ||
if (param != NULL) { | ||
SDLTest_AssertCheck(*(int *)param == _paramValue, "Check param value, expected: %i, got: %i", _paramValue, *(int *)param); | ||
} | ||
} | ||
|
||
return 0; | ||
return interval; | ||
} | ||
|
||
/** | ||
* @brief Call to SDL_AddTimer and SDL_RemoveTimer | ||
*/ | ||
int | ||
timer_addRemoveTimer(void *arg) | ||
{ | ||
SDL_TimerID id; | ||
SDL_bool result; | ||
int param; | ||
|
||
/* Reset state */ | ||
_paramCheck = 0; | ||
_timerCallbackCalled = 0; | ||
|
||
/* Set timer with a long delay */ | ||
id = SDL_AddTimer(10000, _timerTestCallback, NULL); | ||
SDLTest_AssertPass("Call to SDL_AddTimer(10000,...)"); | ||
SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); | ||
|
||
/* Remove timer again and check that callback was not called */ | ||
result = SDL_RemoveTimer(id); | ||
SDLTest_AssertPass("Call to SDL_RemoveTimer()"); | ||
SDLTest_AssertCheck(result == SDL_TRUE, "Check result value, expected: %i, got: %i", SDL_TRUE, result); | ||
SDLTest_AssertCheck(_timerCallbackCalled == 0, "Check callback WAS NOT called, expected: 0, got: %i", _timerCallbackCalled); | ||
|
||
/* Try to temove timer again (should be a NOOP) */ | ||
result = SDL_RemoveTimer(id); | ||
SDLTest_AssertPass("Call to SDL_RemoveTimer()"); | ||
SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); | ||
|
||
/* Reset state */ | ||
param = SDLTest_RandomIntegerInRange(-1024, 1024); | ||
_paramCheck = 1; | ||
_paramValue = param; | ||
_timerCallbackCalled = 0; | ||
|
||
/* Set timer with a short delay */ | ||
id = SDL_AddTimer(10, _timerTestCallback, (void *)¶m); | ||
SDLTest_AssertPass("Call to SDL_AddTimer(10, param)"); | ||
SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); | ||
|
||
/* Wait to let timer trigger callback */ | ||
SDL_Delay(100); | ||
SDLTest_AssertPass("Call to SDL_Delay(100)"); | ||
|
||
/* Remove timer again and check that callback was called */ | ||
result = SDL_RemoveTimer(id); | ||
SDLTest_AssertPass("Call to SDL_RemoveTimer()"); | ||
SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); | ||
SDLTest_AssertCheck(_timerCallbackCalled == 1, "Check callback WAS called, expected: 1, got: %i", _timerCallbackCalled); | ||
|
||
return TEST_COMPLETED; | ||
} | ||
|
||
/* ================= Test References ================== */ | ||
|
||
/* Timer test cases */ | ||
static const SDLTest_TestCaseReference timerTest1 = | ||
{ (SDLTest_TestCaseFp)timer_getPerformanceCounter, "timer_getPerformanceCounter", "Call to SDL_GetPerformanceCounter", TEST_ENABLED }; | ||
|
||
static const SDLTest_TestCaseReference timerTest2 = | ||
{ (SDLTest_TestCaseFp)timer_getPerformanceFrequency, "timer_getPerformanceFrequency", "Call to SDL_GetPerformanceFrequency", TEST_ENABLED }; | ||
|
||
static const SDLTest_TestCaseReference timerTest3 = | ||
{ (SDLTest_TestCaseFp)timer_delayAndGetTicks, "timer_delayAndGetTicks", "Call to SDL_Delay and SDL_GetTicks", TEST_ENABLED }; | ||
|
||
static const SDLTest_TestCaseReference timerTest4 = | ||
{ (SDLTest_TestCaseFp)timer_addRemoveTimer, "timer_addRemoveTimer", "Call to SDL_AddTimer and SDL_RemoveTimer", TEST_ENABLED }; | ||
|
||
/* Sequence of Timer test cases */ | ||
static const SDLTest_TestCaseReference *timerTests[] = { | ||
&timerTest1, &timerTest2, &timerTest3, &timerTest4, NULL | ||
}; | ||
|
||
/* Timer test suite (global) */ | ||
SDLTest_TestSuiteReference timerTestSuite = { | ||
"Timer", | ||
_timerSetUp, | ||
timerTests, | ||
NULL | ||
}; |