61 lines
1.9 KiB
C
61 lines
1.9 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
|