cog/Frameworks/OpenMPT.old/OpenMPT/test/TestToolsTracker.h

77 lines
1.5 KiB
C
Raw Normal View History

/*
* TestToolsTracker.h
* ------------------
* Purpose: Unit test framework for OpenMPT.
* Notes : Really basic functionality that relies on a debugger that catches
* exceptions and breaks right at the spot where it gets thrown.
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#pragma once
#include "BuildSettings.h"
#ifdef ENABLE_TESTS
#ifdef MODPLUG_TRACKER
OPENMPT_NAMESPACE_BEGIN
namespace Test {
#if MPT_COMPILER_MSVC
// With MSVC, break directly using __debugbreak intrinsic instead of calling DebugBreak which breaks one stackframe deeper than we want
#define MyDebugBreak() __debugbreak()
#else
#define MyDebugBreak() DebugBreak()
#endif
// Verify that given parameters are 'equal'. Break directly into the debugger if not.
// The exact meaning of equality is based on operator!= .
#define VERIFY_EQUAL(x,y) \
MPT_DO { \
if((x) != (y)) { \
MyDebugBreak(); \
} \
} MPT_WHILE_0 \
/**/
// Like VERIFY_EQUAL, only differs for libopenmpt
#define VERIFY_EQUAL_NONCONT VERIFY_EQUAL
// Like VERIFY_EQUAL, only differs for libopenmpt
#define VERIFY_EQUAL_QUIET_NONCONT VERIFY_EQUAL
#define VERIFY_EQUAL_EPS(x,y,eps) \
MPT_DO { \
if(std::abs((x) - (y)) > (eps)) { \
MyDebugBreak(); \
} \
} MPT_WHILE_0 \
/**/
#define DO_TEST(func) \
MPT_DO { \
if(IsDebuggerPresent()) { \
func(); \
} \
} MPT_WHILE_0 \
/**/
} // namespace Test
OPENMPT_NAMESPACE_END
#endif // MODPLUG_TRACKER
#endif // ENABLE_TESTS