/* =============================================================================
* scpp_assert.hpp
* Copyright (c) 2003 - 2011 Nomura Kei
* LICENSE :
* LGPL (GNU Lesser General General Public License - Version 3,29 June 2007)
* http://www.gnu.org/copyleft/lesser.html
* =============================================================================
*
* アサーションモジュール.
* アサーション関数が失敗するとき, エラーメッセージを表示します.
*/
#ifndef SCPP_ASSERT_HPP
#define SCPP_ASSERT_HPP
#include <string>
#include <scpp_compiler.hpp>
#include <scpp_exception.hpp>
namespace scpp
{
/**
* アサーションに失敗した際に throw される Error です.
*/
class AssertError : public Error
{
public:
AssertError() throw();
AssertError(const AssertError& t) throw();
AssertError(const std::string& msg) throw();
AssertError(const std::string& msg, const char* file, int line, const char* func) throw();
virtual ~AssertError() throw();
const std::string& getFileName() const throw();
int getLineNumber() const throw();
const std::string& getFunctionName() const throw();
private:
std::string fileName;
int lineNumber;
std::string functionName;
};
/**
* アサーション名前空間.
* assertEquals, assertFalse, assertTrue, fail 等の
* アサーションを扱います.
*/
namespace Assertion
{
void assertEquals (bool expected, bool actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (char expected, char actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (double expected, double actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (float expected, float actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (int expected, int actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (long expected, long actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (const std::string& expected, const std::string& actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (const char* expected, const char* actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (const char* expected, const std::string& actual, const char* file, int line, const char* func) throw(AssertError);
void assertEquals (const std::string& expected, const char* actual, const char* file, int line, const char* func) throw(AssertError);
void assertTrue (bool condition , const char* file, int line, const char* func) throw(AssertError);
void assertFalse (bool condition , const char* file, int line, const char* func) throw(AssertError);
void assertNull (void* obj , const char* file, int line, const char* func) throw(AssertError);
void assertNotNull(void* obj , const char* file, int line, const char* func) throw(AssertError);
void fail( const char* file, int line, const char* func) throw(AssertError);
} // namespace Assertion
} // namespace scpp
/**
* 指定された actual が, expected と同一でない場合, AssertError を throw します.
*
* @param expected 期待する値
* @param actual 比較する値
*/
#define assertEquals(expected, actual) assertEquals(expected, actual, __FILE__, __LINE__, __FUNCTION__)
/**
* 指定された condition が true でない場合, AssertError を throw します.
*
* @param condition 比較する値
*/
#define assertTrue(condition) assertTrue(condition , __FILE__, __LINE__, __FUNCTION__)
/**
* 指定された condition が false でない場合, AssertError を throw します.
*
* @param condition 比較する値
*/
#define assertFalse(condition) assertFalse(condition , __FILE__, __LINE__, __FUNCTION__)
/**
* 指定された obj が 0 (null) でない場合, AssertError を throw します.
*
* @param obj null か否か確認する値
*/
#define assertNull(obj) assertNull(obj , __FILE__, __LINE__, __FUNCTION__)
/**
* 指定された obj が 0 (null) の場合, AssertError を throw します.
*
* @param obj null か否か確認する値
*/
#define assertNotNull(obj) assertNotNull(obj , __FILE__, __LINE__, __FUNCTION__)
/**
* 常に AssertError を throw します.
*/
#define fail() fail( __FILE__, __LINE__, __FUNCTION__)
#endif // SCPP_ASSERT_HPP