Sprout/testspr/assert.hpp

91 lines
2.5 KiB
C++
Raw Normal View History

2013-08-08 09:54:33 +00:00
/*=============================================================================
Copyright (c) 2011-2017 Bolero MURAKAMI
2013-08-08 09:54:33 +00:00
https://github.com/bolero-MURAKAMI/Sprout
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#ifndef TESTSPR_ASSERT_HPP
#define TESTSPR_ASSERT_HPP
#include <string>
#include <stdexcept>
2016-02-12 13:07:44 +00:00
#include <sprout/config.hpp>
2014-03-01 01:35:24 +00:00
#include <sprout/assert.hpp>
#ifdef TESTSPR_CONFIG_ENABLE_STATIC_WARNING
2014-03-01 01:35:24 +00:00
# include <sprout/static_warning.hpp>
#endif
namespace testspr {
//
// assertion_failed
//
class assertion_failed
: public std::runtime_error
{
public:
2014-07-22 00:33:13 +00:00
explicit SPROUT_NON_CONSTEXPR assertion_failed(std::string const& msg)
: std::runtime_error(msg)
{}
2014-07-22 00:33:13 +00:00
explicit SPROUT_NON_CONSTEXPR assertion_failed(char const* msg)
: std::runtime_error(msg)
{}
};
namespace detail {
inline SPROUT_CONSTEXPR bool
assertion_check(bool cond, std::string const& msg) {
return cond ? true
: throw testspr::assertion_failed(msg)
;
}
inline SPROUT_CONSTEXPR bool
assertion_check(bool cond, char const* msg) {
return cond ? true
: throw testspr::assertion_failed(msg)
;
}
} // namespace detail
} // namespace testspr
//
// TESTSPR_STATIC_ASSERT
// TESTSPR_ASSERT
//
#define TESTSPR_STATIC_ASSERT(expr) \
static_assert(expr, #expr)
#define TESTSPR_ASSERT(expr) \
SPROUT_ASSERT(expr)
//
// TESTSPR_BOTH_ASSERT
//
2016-02-12 13:07:44 +00:00
#if !defined(SPROUT_CONFIG_DISABLE_CONSTEXPR) && !defined(SPROUT_NO_STATIC_CONSTEXPR_INITIALIZATION)
# define TESTSPR_BOTH_ASSERT(expr) TESTSPR_STATIC_ASSERT(expr); TESTSPR_ASSERT(expr)
2016-02-12 13:07:44 +00:00
#else
# define TESTSPR_BOTH_ASSERT(expr) TESTSPR_ASSERT(expr)
2016-02-12 13:07:44 +00:00
#endif
//
// TESTSPR_STATIC_WARNING
//
#ifdef TESTSPR_CONFIG_ENABLE_STATIC_WARNING
# define TESTSPR_STATIC_WARNING(expr) BOOST_STATIC_WARNING(expr)
#else
# define TESTSPR_STATIC_WARNING(expr)
#endif
//
// TESTSPR_STATIC_UNCHECKED
// TESTSPR_UNCHECKED
// TESTSPR_BOTH_UNCHECKED
//
#define TESTSPR_STATIC_UNCHECKED(expr) TESTSPR_STATIC_WARNING(expr)
#define TESTSPR_UNCHECKED(expr) (expr)
#ifndef SPROUT_CONFIG_DISABLE_CONSTEXPR
# define TESTSPR_BOTH_UNCHECKED(expr) TESTSPR_STATIC_UNCHECKED(expr); TESTSPR_UNCHECKED(expr)
#else // #ifndef SPROUT_CONFIG_DISABLE_CONSTEXPR
# define TESTSPR_BOTH_UNCHECKED(expr) TESTSPR_UNCHECKED(expr)
#endif // #ifndef SPROUT_CONFIG_DISABLE_CONSTEXPR
#endif // #ifndef TESTSPR_ASSERT_HPP