76 lines
2.2 KiB
C
76 lines
2.2 KiB
C
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: exposes testing thread functions
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef TESTTHREAD_H
|
|
#define TESTTHREAD_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "tier0/dbg.h"
|
|
|
|
// test callback
|
|
typedef void(STDCALL *TestFunc)(void *pv);
|
|
|
|
// runs the test function
|
|
DBG_INTERFACE void Test_RunTest(TestFunc func, void *pvArg);
|
|
|
|
// call to give the test thread a chance to run
|
|
// calling thread will block until the test thread yields
|
|
// doesn't do anything if no tests are running
|
|
DBG_INTERFACE void Test_RunFrame();
|
|
|
|
// true if any tests are running, or have ran
|
|
DBG_INTERFACE bool Test_IsActive();
|
|
|
|
// sets that the test has failed
|
|
DBG_INTERFACE void Test_SetFailed();
|
|
|
|
// true if any tests have failed, due to an assert, warning, or explicit fail
|
|
DBG_INTERFACE bool Test_HasFailed();
|
|
|
|
// true if any tests have completed
|
|
DBG_INTERFACE bool Test_HasFinished();
|
|
|
|
// terminates the test thread
|
|
DBG_INTERFACE void Test_TerminateThread();
|
|
|
|
// the following functions should only be called from the test thread
|
|
|
|
// yields to the main thread for a single frame
|
|
// passing in is a count of the number of frames that have been yielded by this
|
|
// yield macro can be used to assert if a test thread is blocked foor
|
|
DBG_INTERFACE void TestThread_Yield();
|
|
|
|
// utility functions to pause the test frame until the selected condition is
|
|
// true
|
|
#define YIELD_UNTIL(x) \
|
|
{ \
|
|
int iYieldCount = 0; \
|
|
while (!(x)) { \
|
|
TestThread_Yield(); \
|
|
iYieldCount++; \
|
|
if (iYieldCount >= 100) { \
|
|
AssertMsg(false, #x); \
|
|
break; \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
// use this like a while(1) loop, with break; to stop yielding
|
|
#define YIELD_UNTIL_BREAK() for (; true; TestThread_Yield())
|
|
|
|
// yields for a single frame
|
|
#define YIELD_FRAME() \
|
|
{ TestThread_Yield(); }
|
|
#define YIELD_TWO_FRAMES() \
|
|
{ \
|
|
TestThread_Yield(); \
|
|
TestThread_Yield(); \
|
|
}
|
|
|
|
#endif // TESTTHREAD_H
|