This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

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