Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
2bd8d006
Unverified
Commit
2bd8d006
authored
Jan 05, 2022
by
Niels Lohmann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
⚗
try dev branch
parent
cf4b8247
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
419 additions
and
408 deletions
+419
-408
test/thirdparty/doctest/doctest.h
test/thirdparty/doctest/doctest.h
+419
-408
No files found.
test/thirdparty/doctest/doctest.h
View file @
2bd8d006
...
...
@@ -11,7 +11,7 @@
// https://opensource.org/licenses/MIT
//
// The documentation can be found at the library's page:
// https://github.com/
onqtam
/doctest/blob/master/doc/markdown/readme.md
// https://github.com/
doctest
/doctest/blob/master/doc/markdown/readme.md
//
// =================================================================================================
// =================================================================================================
...
...
@@ -49,7 +49,15 @@
#define DOCTEST_VERSION_MAJOR 2
#define DOCTEST_VERSION_MINOR 4
#define DOCTEST_VERSION_PATCH 7
#define DOCTEST_VERSION_STR "2.4.7"
// util we need here
#define DOCTEST_TOSTR_IMPL(x) #x
#define DOCTEST_TOSTR(x) DOCTEST_TOSTR_IMPL(x)
#define DOCTEST_VERSION_STR \
DOCTEST_TOSTR(DOCTEST_VERSION_MAJOR) "." \
DOCTEST_TOSTR(DOCTEST_VERSION_MINOR) "." \
DOCTEST_TOSTR(DOCTEST_VERSION_PATCH)
#define DOCTEST_VERSION \
(DOCTEST_VERSION_MAJOR * 10000 + DOCTEST_VERSION_MINOR * 100 + DOCTEST_VERSION_PATCH)
...
...
@@ -137,86 +145,93 @@
// == COMPILER WARNINGS ============================================================================
// =================================================================================================
// both the header and the implementation suppress all of these,
// so it only makes sense to aggregrate them like so
#define DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH \
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \
\
DOCTEST_GCC_SUPPRESS_WARNING_PUSH \
DOCTEST_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wpragmas") \
DOCTEST_GCC_SUPPRESS_WARNING("-Weffc++") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") \
\
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \
/* these 4 also disabled globally via cmake: */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4514)
/* unreferenced inline function has been removed */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4571)
/* SEH related */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4710)
/* function not inlined */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4711)
/* function selected for inline expansion*/
\
/* */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4616)
/* invalid compiler warning */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4619)
/* invalid compiler warning */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4996)
/* The compiler encountered a deprecated declaration */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4706)
/* assignment within conditional expression */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4512)
/* 'class' : assignment operator could not be generated */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4127)
/* conditional expression is constant */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4820)
/* padding */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4625)
/* copy constructor was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4626)
/* assignment operator was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5027)
/* move assignment operator implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5026)
/* move constructor was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4640)
/* construction of local static object not thread-safe */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5045)
/* Spectre mitigation for memory load */
\
/* static analysis */
\
DOCTEST_MSVC_SUPPRESS_WARNING(26439)
/* Function may not throw. Declare it 'noexcept' */
\
DOCTEST_MSVC_SUPPRESS_WARNING(26495)
/* Always initialize a member variable */
\
DOCTEST_MSVC_SUPPRESS_WARNING(26451)
/* Arithmetic overflow ... */
\
DOCTEST_MSVC_SUPPRESS_WARNING(26444)
/* Avoid unnamed objects with custom ctor and dtor... */
\
DOCTEST_MSVC_SUPPRESS_WARNING(26812)
/* Prefer 'enum class' over 'enum' */
#define DOCTEST_SUPPRESS_COMMON_WARNINGS_POP \
DOCTEST_CLANG_SUPPRESS_WARNING_POP \
DOCTEST_GCC_SUPPRESS_WARNING_POP \
DOCTEST_MSVC_SUPPRESS_WARNING_POP
DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wunknown-pragmas"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wnon-virtual-dtor"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wweak-vtables"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wpadded"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wdeprecated"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wmissing-prototypes"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wunused-local-typedef"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wc++98-compat"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wc++98-compat-pedantic"
)
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wunknown-pragmas"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wpragmas"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Weffc++"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wstrict-overflow"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wstrict-aliasing"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wctor-dtor-privacy"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wmissing-declarations"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wnon-virtual-dtor"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wunused-local-typedefs"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wuseless-cast"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wnoexcept"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wsign-promo"
)
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
DOCTEST_MSVC_SUPPRESS_WARNING
(
4616
)
// invalid compiler warning
DOCTEST_MSVC_SUPPRESS_WARNING
(
4619
)
// invalid compiler warning
DOCTEST_MSVC_SUPPRESS_WARNING
(
4996
)
// The compiler encountered a deprecated declaration
DOCTEST_MSVC_SUPPRESS_WARNING
(
4706
)
// assignment within conditional expression
DOCTEST_MSVC_SUPPRESS_WARNING
(
4512
)
// 'class' : assignment operator could not be generated
DOCTEST_MSVC_SUPPRESS_WARNING
(
4127
)
// conditional expression is constant
DOCTEST_MSVC_SUPPRESS_WARNING
(
4820
)
// padding
DOCTEST_MSVC_SUPPRESS_WARNING
(
4625
)
// copy constructor was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
4626
)
// assignment operator was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
5027
)
// move assignment operator was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
5026
)
// move constructor was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
4623
)
// default constructor was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
4640
)
// construction of local static object is not thread-safe
DOCTEST_MSVC_SUPPRESS_WARNING
(
5045
)
// Spectre mitigation for memory load
// static analysis
DOCTEST_MSVC_SUPPRESS_WARNING
(
26439
)
// This kind of function may not throw. Declare it 'noexcept'
DOCTEST_MSVC_SUPPRESS_WARNING
(
26495
)
// Always initialize a member variable
DOCTEST_MSVC_SUPPRESS_WARNING
(
26451
)
// Arithmetic overflow ...
DOCTEST_MSVC_SUPPRESS_WARNING
(
26444
)
// Avoid unnamed objects with custom construction and dtr...
DOCTEST_MSVC_SUPPRESS_WARNING
(
26812
)
// Prefer 'enum class' over 'enum'
// 4548 - expression before comma has no effect; expected expression with side - effect
// 4265 - class has virtual functions, but destructor is not virtual
// 4986 - exception specification does not match previous declaration
// 4350 - behavior change: 'member1' called instead of 'member2'
// 4668 - 'x' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
// 4365 - conversion from 'int' to 'unsigned long', signed/unsigned mismatch
// 4774 - format string expected in argument 'x' is not a string literal
// 4820 - padding in structs
// only 4 should be disabled globally:
// - 4514 # unreferenced inline function has been removed
// - 4571 # SEH related
// - 4710 # function not inlined
// - 4711 # function 'x' selected for automatic inline expansion
#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN \
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \
DOCTEST_MSVC_SUPPRESS_WARNING(4548)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4265)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4986)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4350)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4668)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4365)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4774)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4820)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4625)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4626)
\
DOCTEST_MSVC_SUPPRESS_WARNING(5027)
\
DOCTEST_MSVC_SUPPRESS_WARNING(5026)
\
DOCTEST_MSVC_SUPPRESS_WARNING(4623)
\
DOCTEST_MSVC_SUPPRESS_WARNING(5039)
\
DOCTEST_MSVC_SUPPRESS_WARNING(5045)
\
DOCTEST_MSVC_SUPPRESS_WARNING(5105)
DOCTEST_MSVC_SUPPRESS_WARNING(4548)
/* before comma no effect; expected side - effect */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4265)
/* virtual functions, but destructor is not virtual */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4986)
/* exception specification does not match previous */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4350)
/* 'member1' called instead of 'member2' */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4668)
/* not defined as a preprocessor macro */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4365)
/* signed/unsigned mismatch */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4774)
/* format string not a string literal */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4820)
/* padding */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4625)
/* copy constructor was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4626)
/* assignment operator was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5027)
/* move assignment operator implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5026)
/* move constructor was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(4623)
/* default constructor was implicitly deleted */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5039)
/* pointer to pot. throwing function passed to extern C */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5045)
/* Spectre mitigation for memory load */
\
DOCTEST_MSVC_SUPPRESS_WARNING(5105)
/* macro producing 'defined' has undefined behavior */
#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP
...
...
@@ -229,6 +244,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum'
// GCC C++11 feature support table: https://gcc.gnu.org/projects/cxx-status.html
// MSVC version table:
// https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
// MSVC++ 14.3 (17) _MSC_VER == 1930 (Visual Studio 2022)
// MSVC++ 14.2 (16) _MSC_VER == 1920 (Visual Studio 2019)
// MSVC++ 14.1 (15) _MSC_VER == 1910 (Visual Studio 2017)
// MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
...
...
@@ -238,6 +254,10 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum'
// MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
// MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
// Universal Windows Platform support
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
#define DOCTEST_CONFIG_NO_WINDOWS_SEH
#endif // WINAPI_FAMILY
#if DOCTEST_MSVC && !defined(DOCTEST_CONFIG_WINDOWS_SEH)
#define DOCTEST_CONFIG_WINDOWS_SEH
#endif // MSVC
...
...
@@ -349,8 +369,6 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum'
#define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __LINE__)
#endif // __COUNTER__
#define DOCTEST_TOSTR(x) #x
#ifndef DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE
#define DOCTEST_REF_WRAP(x) x&
#else // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE
...
...
@@ -407,32 +425,31 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP
#define DOCTEST_CONFIG_USE_STD_HEADERS
#endif // DOCTEST_CONFIG_USE_IOSFWD
// for clang - always include ciso646 (which drags some std stuff) because
// we want to check if we are using libc++ with the _LIBCPP_VERSION macro in
// which case we don't want to forward declare stuff from std - for reference:
// https://github.com/doctest/doctest/issues/126
// https://github.com/doctest/doctest/issues/356
#if DOCTEST_CLANG
#include <ciso646>
#ifdef _LIBCPP_VERSION
#define DOCTEST_CONFIG_USE_STD_HEADERS
#endif // _LIBCPP_VERSION
#endif // clang
#ifdef DOCTEST_CONFIG_USE_STD_HEADERS
#ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#include <iosfwd>
#include <cstddef>
#include <ostream>
#include <istream>
#else // DOCTEST_CONFIG_USE_STD_HEADERS
#if DOCTEST_CLANG
// to detect if libc++ is being used with clang (the _LIBCPP_VERSION identifier)
#include <ciso646>
#endif // clang
#ifdef _LIBCPP_VERSION
#define DOCTEST_STD_NAMESPACE_BEGIN _LIBCPP_BEGIN_NAMESPACE_STD
#define DOCTEST_STD_NAMESPACE_END _LIBCPP_END_NAMESPACE_STD
#else // _LIBCPP_VERSION
#define DOCTEST_STD_NAMESPACE_BEGIN namespace std {
#define DOCTEST_STD_NAMESPACE_END }
#endif // _LIBCPP_VERSION
// Forward declaring 'X' in namespace std is not permitted by the C++ Standard.
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH
(
4643
)
DOCTEST_STD_NAMESPACE_BEGIN
// NOLINT (cert-dcl58-cpp)
namespace
std
{
// NOLINT (cert-dcl58-cpp)
typedef
decltype
(
nullptr
)
nullptr_t
;
template
<
class
charT
>
struct
char_traits
;
...
...
@@ -441,19 +458,20 @@ struct char_traits<char>;
template
<
class
charT
,
class
traits
>
class
basic_ostream
;
typedef
basic_ostream
<
char
,
char_traits
<
char
>>
ostream
;
template
<
class
charT
,
class
traits
>
class
basic_istream
;
typedef
basic_istream
<
char
,
char_traits
<
char
>>
istream
;
template
<
class
...
Types
>
class
tuple
;
#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH
(
"-Wreserved-identifier"
)
// see this issue on why this is needed: https://github.com/onqtam/doctest/issues/183
template
<
class
_Ty
>
// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
template
<
class
Ty
>
class
allocator
;
template
<
class
_Elem
,
class
_Traits
,
class
_
Alloc
>
template
<
class
Elem
,
class
Traits
,
class
Alloc
>
class
basic_string
;
using
string
=
basic_string
<
char
,
char_traits
<
char
>
,
allocator
<
char
>>
;
DOCTEST_CLANG_SUPPRESS_WARNING_POP
#endif // VS 2019
DOCTEST_STD_NAMESPACE_END
}
// namespace std
DOCTEST_MSVC_SUPPRESS_WARNING_POP
...
...
@@ -505,6 +523,8 @@ class DOCTEST_INTERFACE String
view
data
;
};
char
*
allocate
(
unsigned
sz
);
bool
isOnStack
()
const
{
return
(
buf
[
last
]
&
128
)
==
0
;
}
void
setOnHeap
();
void
setLast
(
unsigned
in
=
last
);
...
...
@@ -519,6 +539,8 @@ public:
String
(
const
char
*
in
);
String
(
const
char
*
in
,
unsigned
in_size
);
String
(
std
::
istream
&
in
,
unsigned
in_size
);
String
(
const
String
&
other
);
String
&
operator
=
(
const
String
&
other
);
...
...
@@ -865,10 +887,8 @@ namespace detail {
template
<
class
T
>
using
has_insertion_operator
=
has_insertion_operator_impl
::
check
<
const
T
>
;
DOCTEST_INTERFACE
void
my_memcpy
(
void
*
dest
,
const
void
*
src
,
unsigned
num
);
DOCTEST_INTERFACE
std
::
ostream
*
getTlsOss
(
bool
reset
=
true
);
// returns a thread-local ostringstream
DOCTEST_INTERFACE
String
getTlsOssResult
();
DOCTEST_INTERFACE
std
::
ostream
*
tlssPush
();
DOCTEST_INTERFACE
String
tlssPop
();
template
<
bool
C
>
...
...
@@ -884,38 +904,40 @@ namespace detail {
template
<
typename
T
>
struct
filldata
{
static
void
fill
(
const
T
&
in
)
{
*
getTlsOss
()
<<
in
;
static
void
fill
(
std
::
ostream
*
stream
,
const
T
&
in
)
{
*
stream
<<
in
;
}
};
/* This method can be chained */
template
<
typename
T
,
unsigned
long
N
>
void
fillstream
(
const
T
(
&
in
)[
N
]
)
{
for
(
unsigned
long
i
=
0
;
i
<
N
;
i
++
)
{
*
getTlsOss
(
false
)
<<
in
[
i
];
struct
filldata
<
T
[
N
]
>
{
static
void
fill
(
std
::
ostream
*
stream
,
const
T
(
&
in
)[
N
])
{
for
(
unsigned
long
i
=
0
;
i
<
N
;
i
++
)
{
*
stream
<<
in
[
i
];
}
}
};
template
<
typename
T
,
unsigned
long
N
>
struct
filldata
<
T
[
N
]
>
// Specialized since we don't want the terminating null byte!
template
<
unsigned
long
N
>
struct
filldata
<
const
char
[
N
]
>
{
static
void
fill
(
const
T
(
&
in
)[
N
])
{
fillstream
(
in
);
*
getTlsOss
(
false
)
<<
""
;
static
void
fill
(
std
::
ostream
*
stream
,
const
char
(
&
in
)[
N
])
{
*
stream
<<
in
;
}
};
template
<
typename
T
>
void
filloss
(
const
T
&
in
){
filldata
<
T
>::
fill
(
in
);
void
filloss
(
std
::
ostream
*
stream
,
const
T
&
in
){
filldata
<
T
>::
fill
(
stream
,
in
);
}
template
<
typename
T
,
unsigned
long
N
>
void
filloss
(
const
T
(
&
in
)[
N
])
{
void
filloss
(
std
::
ostream
*
stream
,
const
T
(
&
in
)[
N
])
{
// T[N], T(&)[N], T(&&)[N] have same behaviour.
// Hence remove reference.
filldata
<
typename
remove_reference
<
decltype
(
in
)
>::
type
>::
fill
(
in
);
filldata
<
typename
remove_reference
<
decltype
(
in
)
>::
type
>::
fill
(
stream
,
in
);
}
template
<
>
...
...
@@ -930,8 +952,9 @@ namespace detail {
* stepping over unaccessible memory.
*/
filloss
(
in
);
return
getTlsOssResult
();
std
::
ostream
*
stream
=
tlssPush
();
filloss
(
stream
,
in
);
return
tlssPop
();
}
};
...
...
@@ -1007,7 +1030,7 @@ String toString(const DOCTEST_REF_WRAP(T) value) {
}
#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
// see this issue on why this is needed: https://github.com/
onqtam
/doctest/issues/183
// see this issue on why this is needed: https://github.com/
doctest
/doctest/issues/183
DOCTEST_INTERFACE
String
toString
(
const
std
::
string
&
in
);
#endif // VS 2019
...
...
@@ -1164,7 +1187,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
} \
template <typename R ,typename enable_if< !doctest::detail::is_rvalue_reference<R>::value , void >::type* = nullptr> \
DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R& rhs) { \
bool res = op_macro(doctest::detail::forward<const L>(lhs),
doctest::detail::forward<const R>(rhs));
\
bool res = op_macro(doctest::detail::forward<const L>(lhs),
rhs);
\
if(m_at & assertType::is_false) \
res = !res; \
if(!res || doctest::getContextOptions()->success) \
...
...
@@ -1172,7 +1195,6 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
return Result(res); \
}
// more checks could be added - like in Catch:
// https://github.com/catchorg/Catch2/pull/1480/files
// https://github.com/catchorg/Catch2/pull/1481/files
...
...
@@ -1300,7 +1322,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
DOCTEST_NOINLINE
operator
Result
()
{
// this is needed only for MSVC 2015:
// https://ci.appveyor.com/project/
onqtam
/doctest/builds/38181202
// https://ci.appveyor.com/project/
doctest
/doctest/builds/38181202
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH
(
4800
)
// 'int': forcing value to bool
bool
res
=
static_cast
<
bool
>
(
lhs
);
DOCTEST_MSVC_SUPPRESS_WARNING_POP
...
...
@@ -1474,15 +1496,16 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
void
setResult
(
const
Result
&
res
);
template
<
int
comparison
,
typename
L
,
typename
R
>
DOCTEST_NOINLINE
void
binary_assert
(
const
DOCTEST_REF_WRAP
(
L
)
lhs
,
DOCTEST_NOINLINE
bool
binary_assert
(
const
DOCTEST_REF_WRAP
(
L
)
lhs
,
const
DOCTEST_REF_WRAP
(
R
)
rhs
)
{
m_failed
=
!
RelationalComparator
<
comparison
,
L
,
R
>
()(
lhs
,
rhs
);
if
(
m_failed
||
getContextOptions
()
->
success
)
m_decomp
=
stringifyBinaryExpr
(
lhs
,
", "
,
rhs
);
return
!
m_failed
;
}
template
<
typename
L
>
DOCTEST_NOINLINE
void
unary_assert
(
const
DOCTEST_REF_WRAP
(
L
)
val
)
{
DOCTEST_NOINLINE
bool
unary_assert
(
const
DOCTEST_REF_WRAP
(
L
)
val
)
{
m_failed
=
!
val
;
if
(
m_at
&
assertType
::
is_false
)
//!OCLINT bitwise operator in conditional
...
...
@@ -1490,6 +1513,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
if
(
m_failed
||
getContextOptions
()
->
success
)
m_decomp
=
toString
(
val
);
return
!
m_failed
;
}
void
translateException
();
...
...
@@ -1509,7 +1534,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_INTERFACE
void
failed_out_of_a_testing_context
(
const
AssertData
&
ad
);
DOCTEST_INTERFACE
void
decomp_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
DOCTEST_INTERFACE
bool
decomp_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
Result
result
);
#define DOCTEST_ASSERT_OUT_OF_TESTS(decomp) \
...
...
@@ -1525,7 +1550,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
if(checkIfShouldThrow(at)) \
throwException(); \
} \
return
;
\
return
!failed;
\
} \
} while(false)
...
...
@@ -1540,7 +1565,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
throwException()
template
<
int
comparison
,
typename
L
,
typename
R
>
DOCTEST_NOINLINE
void
binary_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
DOCTEST_NOINLINE
bool
binary_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
const
DOCTEST_REF_WRAP
(
L
)
lhs
,
const
DOCTEST_REF_WRAP
(
R
)
rhs
)
{
bool
failed
=
!
RelationalComparator
<
comparison
,
L
,
R
>
()(
lhs
,
rhs
);
...
...
@@ -1551,10 +1576,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
// ###################################################################################
DOCTEST_ASSERT_OUT_OF_TESTS
(
stringifyBinaryExpr
(
lhs
,
", "
,
rhs
));
DOCTEST_ASSERT_IN_TESTS
(
stringifyBinaryExpr
(
lhs
,
", "
,
rhs
));
return
!
failed
;
}
template
<
typename
L
>
DOCTEST_NOINLINE
void
unary_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
DOCTEST_NOINLINE
bool
unary_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
const
DOCTEST_REF_WRAP
(
L
)
val
)
{
bool
failed
=
!
val
;
...
...
@@ -1567,6 +1593,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
// ###################################################################################
DOCTEST_ASSERT_OUT_OF_TESTS
(
toString
(
val
));
DOCTEST_ASSERT_IN_TESTS
(
toString
(
val
));
return
!
failed
;
}
struct
DOCTEST_INTERFACE
IExceptionTranslator
...
...
@@ -1687,6 +1714,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
struct
DOCTEST_INTERFACE
MessageBuilder
:
public
MessageData
{
std
::
ostream
*
m_stream
;
bool
logged
=
false
;
MessageBuilder
(
const
char
*
file
,
int
line
,
assertType
::
Enum
severity
);
MessageBuilder
()
=
delete
;
...
...
@@ -1921,10 +1949,11 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#if !defined(DOCTEST_CONFIG_DISABLE)
// common code in asserts - for convenience
#define DOCTEST_ASSERT_LOG_
AND_REACT(b)
\
#define DOCTEST_ASSERT_LOG_
REACT_RETURN(b)
\
if(b.log()) \
DOCTEST_BREAK_INTO_DEBUGGER(); \
b.react()
b.react(); \
return !b.m_failed
#ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
#define DOCTEST_WRAP_IN_TRY(x) x;
...
...
@@ -2151,11 +2180,13 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_CAPTURE(x) DOCTEST_INFO(#x " := ", x)
#define DOCTEST_ADD_AT_IMPL(type, file, line, mb, ...) \
do {
\
[&] {
\
doctest::detail::MessageBuilder mb(file, line, doctest::assertType::type); \
mb * __VA_ARGS__; \
DOCTEST_ASSERT_LOG_AND_REACT(mb); \
} while(false)
if(mb.log()) \
DOCTEST_BREAK_INTO_DEBUGGER(); \
mb.react(); \
}()
// clang-format off
#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__)
...
...
@@ -2178,13 +2209,13 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_WRAP_IN_TRY(DOCTEST_RB.setResult( \
doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \
<< __VA_ARGS__)) \
DOCTEST_ASSERT_LOG_
AND_REACT(DOCTEST_RB)
\
DOCTEST_ASSERT_LOG_
REACT_RETURN(DOCTEST_RB)
\
DOCTEST_CLANG_SUPPRESS_WARNING_POP
#define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \
do {
\
[&] {
\
DOCTEST_ASSERT_IMPLEMENT_2(assert_type, __VA_ARGS__); \
}
while(false
)
}
(
)
#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
...
...
@@ -2208,16 +2239,16 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE_FALSE, __VA_ARGS__)
// clang-format off
#define DOCTEST_WARN_MESSAGE(cond, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); } while(false
)
#define DOCTEST_CHECK_MESSAGE(cond, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); } while(false
)
#define DOCTEST_REQUIRE_MESSAGE(cond, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); } while(false
)
#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); } while(false
)
#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); } while(false
)
#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); } while(false
)
#define DOCTEST_WARN_MESSAGE(cond, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); }(
)
#define DOCTEST_CHECK_MESSAGE(cond, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); }(
)
#define DOCTEST_REQUIRE_MESSAGE(cond, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); }(
)
#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); }(
)
#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); }(
)
#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); }(
)
// clang-format on
#define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, message, ...) \
do {
\
[&] {
\
if(!doctest::getContextOptions()->no_throw) { \
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #expr, #__VA_ARGS__, message); \
...
...
@@ -2228,31 +2259,35 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_RB.translateException(); \
DOCTEST_RB.m_threw_as = true; \
} catch(...) { DOCTEST_RB.translateException(); } \
DOCTEST_ASSERT_LOG_AND_REACT(DOCTEST_RB); \
DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
} else { \
return false; \
} \
}
while(false
)
}
(
)
#define DOCTEST_ASSERT_THROWS_WITH(expr, expr_str, assert_type, ...) \
do {
\
[&] {
\
if(!doctest::getContextOptions()->no_throw) { \
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, expr_str, "", __VA_ARGS__); \
try { \
DOCTEST_CAST_TO_VOID(expr) \
} catch(...) { DOCTEST_RB.translateException(); } \
DOCTEST_ASSERT_LOG_AND_REACT(DOCTEST_RB); \
DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
} else { \
return false; \
} \
}
while(false
)
}
(
)
#define DOCTEST_ASSERT_NOTHROW(assert_type, ...) \
do {
\
[&] {
\
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #__VA_ARGS__); \
try { \
DOCTEST_CAST_TO_VOID(__VA_ARGS__) \
} catch(...) { DOCTEST_RB.translateException(); } \
DOCTEST_ASSERT_LOG_
AND_REACT(DOCTEST_RB);
\
}
while(false
)
DOCTEST_ASSERT_LOG_
REACT_RETURN(DOCTEST_RB);
\
}
(
)
// clang-format off
#define DOCTEST_WARN_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_WARN_THROWS, "")
...
...
@@ -2275,42 +2310,42 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_CHECK_NOTHROW, __VA_ARGS__)
#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_REQUIRE_NOTHROW, __VA_ARGS__)
#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); } while(false
)
#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); } while(false
)
#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); } while(false
)
#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); } while(false
)
#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); } while(false
)
#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); } while(false
)
#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); } while(false
)
#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); } while(false
)
#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); } while(false
)
#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); } while(false
)
#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); } while(false
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); } while(false
)
#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); } while(false
)
#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); } while(false
)
#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...)
do { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); } while(false
)
#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); }(
)
#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); }(
)
#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); }(
)
#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); }(
)
#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); }(
)
#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); }(
)
#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); }(
)
#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); }(
)
#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); }(
)
#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); }(
)
#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); }(
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); }(
)
#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); }(
)
#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); }(
)
#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...)
[&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); }(
)
// clang-format on
#ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS
#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \
do {
\
[&] {
\
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #__VA_ARGS__); \
DOCTEST_WRAP_IN_TRY( \
DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \
__VA_ARGS__)) \
DOCTEST_ASSERT_LOG_
AND_REACT(DOCTEST_RB);
\
}
while(false
)
DOCTEST_ASSERT_LOG_
REACT_RETURN(DOCTEST_RB);
\
}
(
)
#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
do {
\
[&] {
\
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #__VA_ARGS__); \
DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \
DOCTEST_ASSERT_LOG_
AND_REACT(DOCTEST_RB);
\
}
while(false
)
DOCTEST_ASSERT_LOG_
REACT_RETURN(DOCTEST_RB);
\
}
(
)
#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
...
...
@@ -2386,37 +2421,37 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
#define DOCTEST_WARN_THROWS(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_AS(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_AS(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_NOTHROW(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_NOTHROW(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_NOTHROW(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS(...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS(...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_AS(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_AS(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_WARN_NOTHROW(...) (
[] { return false; }
)
#define DOCTEST_CHECK_NOTHROW(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_NOTHROW(...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
[] { return false; }
)
#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) (
[] { return false; }
)
#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
...
...
@@ -2516,77 +2551,77 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_FAIL_CHECK(...) (static_cast<void>(0))
#define DOCTEST_FAIL(...) (static_cast<void>(0))
#define DOCTEST_WARN(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_FALSE(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_FALSE(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_FALSE(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_MESSAGE(cond, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_MESSAGE(cond, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_MESSAGE(cond, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_AS(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_AS(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_NOTHROW(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_NOTHROW(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_NOTHROW(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_EQ(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_EQ(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_EQ(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_NE(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_NE(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_NE(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_GT(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_GT(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_GT(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_LT(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_LT(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_LT(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_GE(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_GE(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_GE(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_LE(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_LE(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_LE(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_UNARY(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_UNARY(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_UNARY(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN_UNARY_FALSE(...) (
static_cast<void>(0)
)
#define DOCTEST_CHECK_UNARY_FALSE(...) (
static_cast<void>(0)
)
#define DOCTEST_REQUIRE_UNARY_FALSE(...) (
static_cast<void>(0)
)
#define DOCTEST_WARN(...) (
[] { return false; }
)
#define DOCTEST_CHECK(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE(...) (
[] { return false; }
)
#define DOCTEST_WARN_FALSE(...) (
[] { return false; }
)
#define DOCTEST_CHECK_FALSE(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_FALSE(...) (
[] { return false; }
)
#define DOCTEST_WARN_MESSAGE(cond, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_MESSAGE(cond, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_MESSAGE(cond, ...) (
[] { return false; }
)
#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS(...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS(...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_AS(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_AS(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_WARN_NOTHROW(...) (
[] { return false; }
)
#define DOCTEST_CHECK_NOTHROW(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_NOTHROW(...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) (
[] { return false; }
)
#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) (
[] { return false; }
)
#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) (
[] { return false; }
)
#define DOCTEST_WARN_EQ(...) (
[] { return false; }
)
#define DOCTEST_CHECK_EQ(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_EQ(...) (
[] { return false; }
)
#define DOCTEST_WARN_NE(...) (
[] { return false; }
)
#define DOCTEST_CHECK_NE(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_NE(...) (
[] { return false; }
)
#define DOCTEST_WARN_GT(...) (
[] { return false; }
)
#define DOCTEST_CHECK_GT(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_GT(...) (
[] { return false; }
)
#define DOCTEST_WARN_LT(...) (
[] { return false; }
)
#define DOCTEST_CHECK_LT(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_LT(...) (
[] { return false; }
)
#define DOCTEST_WARN_GE(...) (
[] { return false; }
)
#define DOCTEST_CHECK_GE(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_GE(...) (
[] { return false; }
)
#define DOCTEST_WARN_LE(...) (
[] { return false; }
)
#define DOCTEST_CHECK_LE(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_LE(...) (
[] { return false; }
)
#define DOCTEST_WARN_UNARY(...) (
[] { return false; }
)
#define DOCTEST_CHECK_UNARY(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_UNARY(...) (
[] { return false; }
)
#define DOCTEST_WARN_UNARY_FALSE(...) (
[] { return false; }
)
#define DOCTEST_CHECK_UNARY_FALSE(...) (
[] { return false; }
)
#define DOCTEST_REQUIRE_UNARY_FALSE(...) (
[] { return false; }
)
#endif // DOCTEST_CONFIG_DISABLE
...
...
@@ -2806,6 +2841,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_MSVC_SUPPRESS_WARNING_POP
DOCTEST_GCC_SUPPRESS_WARNING_POP
DOCTEST_SUPPRESS_COMMON_WARNINGS_POP
#endif // DOCTEST_LIBRARY_INCLUDED
#ifndef DOCTEST_SINGLE_HEADER
...
...
@@ -2825,13 +2862,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-macros")
DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wunknown-pragmas"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wpadded"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wweak-vtables"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wglobal-constructors"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wexit-time-destructors"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wmissing-prototypes"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wsign-conversion"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wshorten-64-to-32"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wmissing-variable-declarations"
)
...
...
@@ -2839,66 +2874,35 @@ DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch")
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wswitch-enum"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wcovered-switch-default"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wmissing-noreturn"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wunused-local-typedef"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wdisabled-macro-expansion"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wmissing-braces"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wmissing-field-initializers"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wc++98-compat"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wc++98-compat-pedantic"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wunused-member-function"
)
DOCTEST_CLANG_SUPPRESS_WARNING
(
"-Wnonportable-system-include-path"
)
DOCTEST_GCC_SUPPRESS_WARNING_PUSH
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wunknown-pragmas"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wpragmas"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wconversion"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Weffc++"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wsign-conversion"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wstrict-overflow"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wstrict-aliasing"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wmissing-field-initializers"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wmissing-braces"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wmissing-declarations"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wswitch"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wswitch-enum"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wswitch-default"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wunsafe-loop-optimizations"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wold-style-cast"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wunused-local-typedefs"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wuseless-cast"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wunused-function"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wmultiple-inheritance"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wnoexcept"
)
DOCTEST_GCC_SUPPRESS_WARNING
(
"-Wsuggest-attribute"
)
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
DOCTEST_MSVC_SUPPRESS_WARNING
(
4616
)
// invalid compiler warning
DOCTEST_MSVC_SUPPRESS_WARNING
(
4619
)
// invalid compiler warning
DOCTEST_MSVC_SUPPRESS_WARNING
(
4996
)
// The compiler encountered a deprecated declaration
DOCTEST_MSVC_SUPPRESS_WARNING
(
4267
)
// 'var' : conversion from 'x' to 'y', possible loss of data
DOCTEST_MSVC_SUPPRESS_WARNING
(
4706
)
// assignment within conditional expression
DOCTEST_MSVC_SUPPRESS_WARNING
(
4512
)
// 'class' : assignment operator could not be generated
DOCTEST_MSVC_SUPPRESS_WARNING
(
4127
)
// conditional expression is constant
DOCTEST_MSVC_SUPPRESS_WARNING
(
4530
)
// C++ exception handler used, but unwind semantics not enabled
DOCTEST_MSVC_SUPPRESS_WARNING
(
4577
)
// 'noexcept' used with no exception handling mode specified
DOCTEST_MSVC_SUPPRESS_WARNING
(
4774
)
// format string expected in argument is not a string literal
DOCTEST_MSVC_SUPPRESS_WARNING
(
4365
)
// conversion from 'int' to 'unsigned', signed/unsigned mismatch
DOCTEST_MSVC_SUPPRESS_WARNING
(
4820
)
// padding in structs
DOCTEST_MSVC_SUPPRESS_WARNING
(
4640
)
// construction of local static object is not thread-safe
DOCTEST_MSVC_SUPPRESS_WARNING
(
5039
)
// pointer to potentially throwing function passed to extern C
DOCTEST_MSVC_SUPPRESS_WARNING
(
5045
)
// Spectre mitigation stuff
DOCTEST_MSVC_SUPPRESS_WARNING
(
4626
)
// assignment operator was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
5027
)
// move assignment operator was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
5026
)
// move constructor was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
4625
)
// copy constructor was implicitly defined as deleted
DOCTEST_MSVC_SUPPRESS_WARNING
(
4800
)
// forcing value to bool 'true' or 'false' (performance warning)
DOCTEST_MSVC_SUPPRESS_WARNING
(
5245
)
// unreferenced function with internal linkage has been removed
// static analysis
DOCTEST_MSVC_SUPPRESS_WARNING
(
26439
)
// This kind of function may not throw. Declare it 'noexcept'
DOCTEST_MSVC_SUPPRESS_WARNING
(
26495
)
// Always initialize a member variable
DOCTEST_MSVC_SUPPRESS_WARNING
(
26451
)
// Arithmetic overflow ...
DOCTEST_MSVC_SUPPRESS_WARNING
(
26444
)
// Avoid unnamed objects with custom construction and dtor...
DOCTEST_MSVC_SUPPRESS_WARNING
(
26812
)
// Prefer 'enum class' over 'enum'
DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
...
...
@@ -2906,7 +2910,7 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
#include <ctime>
#include <cmath>
#include <climits>
// borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/
onqtam
/doctest/pull/37
// borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/
doctest
/doctest/pull/37
#ifdef __BORLANDC__
#include <math.h>
#endif // __BORLANDC__
...
...
@@ -2964,7 +2968,7 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
#endif // DOCTEST_PLATFORM_WINDOWS
// this is a fix for https://github.com/
onqtam
/doctest/issues/348
// this is a fix for https://github.com/
doctest
/doctest/issues/348
// https://mail.gnome.org/archives/xml/2012-January/msg00000.html
#if !defined(HAVE_UNISTD_H) && !defined(STDOUT_FILENO)
#define STDOUT_FILENO fileno(stdout)
...
...
@@ -3021,6 +3025,24 @@ bool is_running_in_test = false;
namespace
{
using
namespace
detail
;
template
<
typename
Ex
>
DOCTEST_NORETURN
void
throw_exception
(
Ex
const
&
e
)
{
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
throw
e
;
#else // DOCTEST_CONFIG_NO_EXCEPTIONS
std
::
cerr
<<
"doctest will terminate because it needed to throw an exception.
\n
"
<<
"The message was: "
<<
e
.
what
()
<<
'\n'
;
std
::
terminate
();
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
}
#ifndef DOCTEST_INTERNAL_ERROR
#define DOCTEST_INTERNAL_ERROR(msg) \
throw_exception(std::logic_error( \
__FILE__ ":" DOCTEST_TOSTR(__LINE__) ": Internal doctest error: " msg))
#endif // DOCTEST_INTERNAL_ERROR
// case insensitive strcmp
int
stricmp
(
const
char
*
a
,
const
char
*
b
)
{
for
(;;
a
++
,
b
++
)
{
...
...
@@ -3064,8 +3086,6 @@ namespace {
}
// namespace
namespace
detail
{
void
my_memcpy
(
void
*
dest
,
const
void
*
src
,
unsigned
num
)
{
memcpy
(
dest
,
src
,
num
);
}
String
rawMemoryToString
(
const
void
*
object
,
unsigned
size
)
{
// Reverse order for little endian architectures
int
i
=
0
,
end
=
static_cast
<
int
>
(
size
),
inc
=
1
;
...
...
@@ -3075,28 +3095,42 @@ namespace detail {
}
unsigned
const
char
*
bytes
=
static_cast
<
unsigned
const
char
*>
(
object
);
std
::
ostr
ingstream
oss
;
oss
<<
"0x"
<<
std
::
setfill
(
'0'
)
<<
std
::
hex
;
std
::
ostr
eam
*
oss
=
tlssPush
()
;
*
oss
<<
"0x"
<<
std
::
setfill
(
'0'
)
<<
std
::
hex
;
for
(;
i
!=
end
;
i
+=
inc
)
oss
<<
std
::
setw
(
2
)
<<
static_cast
<
unsigned
>
(
bytes
[
i
]);
return
oss
.
str
().
c_str
();
*
oss
<<
std
::
setw
(
2
)
<<
static_cast
<
unsigned
>
(
bytes
[
i
]);
return
tlssPop
();
}
DOCTEST_THREAD_LOCAL
class
{
std
::
vector
<
std
::
streampos
>
stack
;
std
::
stringstream
ss
;
public:
std
::
ostream
*
push
()
{
stack
.
push_back
(
ss
.
tellp
());
return
&
ss
;
}
DOCTEST_THREAD_LOCAL
std
::
ostringstream
g_oss
;
// NOLINT(cert-err58-cpp)
String
pop
()
{
if
(
stack
.
empty
())
DOCTEST_INTERNAL_ERROR
(
"TLSS was empty when trying to pop!"
);
//reset default value is true. getTlsOss(bool reset=true);
std
::
ostream
*
getTlsOss
(
bool
reset
)
{
if
(
reset
)
{
g_oss
.
clear
();
// there shouldn't be anything worth clearing in the flags
g_oss
.
str
(
""
);
// the slow way of resetting a string stream
//g_oss.seekp(0); // optimal reset - as seen here: https://stackoverflow.com/a/624291/3162383
std
::
streampos
pos
=
stack
.
back
();
stack
.
pop_back
();
unsigned
sz
=
static_cast
<
unsigned
>
(
ss
.
tellp
()
-
pos
);
ss
.
rdbuf
()
->
pubseekpos
(
pos
,
std
::
ios
::
in
|
std
::
ios
::
out
);
return
String
(
ss
,
sz
);
}
return
&
g_oss
;
}
g_oss
;
std
::
ostream
*
tlssPush
()
{
return
g_oss
.
push
();
}
String
getTlsOssResult
()
{
//g_oss << std::ends; // needed - as shown here: https://stackoverflow.com/a/624291/3162383
return
g_oss
.
str
().
c_str
();
String
tlssPop
()
{
return
g_oss
.
pop
();
}
#ifndef DOCTEST_CONFIG_DISABLE
...
...
@@ -3107,8 +3141,7 @@ namespace timer_large_integer
#if defined(DOCTEST_PLATFORM_WINDOWS)
typedef
ULONGLONG
type
;
#else // DOCTEST_PLATFORM_WINDOWS
using
namespace
std
;
typedef
uint64_t
type
;
typedef
std
::
uint64_t
type
;
#endif // DOCTEST_PLATFORM_WINDOWS
}
...
...
@@ -3326,19 +3359,29 @@ typedef timer_large_integer::type ticks_t;
#endif // DOCTEST_CONFIG_DISABLE
}
// namespace detail
char
*
String
::
allocate
(
unsigned
sz
)
{
if
(
sz
<=
last
)
{
buf
[
sz
]
=
'\0'
;
setLast
(
last
-
sz
);
return
buf
;
}
else
{
setOnHeap
();
data
.
size
=
sz
;
data
.
capacity
=
data
.
size
+
1
;
data
.
ptr
=
new
char
[
data
.
capacity
];
data
.
ptr
[
sz
]
=
'\0'
;
return
data
.
ptr
;
}
}
void
String
::
setOnHeap
()
{
*
reinterpret_cast
<
unsigned
char
*>
(
&
buf
[
last
])
=
128
;
}
void
String
::
setLast
(
unsigned
in
)
{
buf
[
last
]
=
char
(
in
);
}
void
String
::
copy
(
const
String
&
other
)
{
using
namespace
std
;
if
(
other
.
isOnStack
())
{
memcpy
(
buf
,
other
.
buf
,
len
);
}
else
{
setOnHeap
();
data
.
size
=
other
.
data
.
size
;
data
.
capacity
=
data
.
size
+
1
;
data
.
ptr
=
new
char
[
data
.
capacity
];
memcpy
(
data
.
ptr
,
other
.
data
.
ptr
,
data
.
size
+
1
);
memcpy
(
allocate
(
other
.
data
.
size
),
other
.
data
.
ptr
,
other
.
data
.
size
);
}
}
...
...
@@ -3357,19 +3400,11 @@ String::String(const char* in)
:
String
(
in
,
strlen
(
in
))
{}
String
::
String
(
const
char
*
in
,
unsigned
in_size
)
{
using
namespace
std
;
if
(
in_size
<=
last
)
{
memcpy
(
buf
,
in
,
in_size
);
buf
[
in_size
]
=
'\0'
;
setLast
(
last
-
in_size
);
}
else
{
setOnHeap
();
data
.
size
=
in_size
;
data
.
capacity
=
data
.
size
+
1
;
data
.
ptr
=
new
char
[
data
.
capacity
];
memcpy
(
data
.
ptr
,
in
,
in_size
);
data
.
ptr
[
in_size
]
=
'\0'
;
}
memcpy
(
allocate
(
in_size
),
in
,
in_size
);
}
String
::
String
(
std
::
istream
&
in
,
unsigned
in_size
)
{
in
.
read
(
allocate
(
in_size
),
in_size
);
}
String
::
String
(
const
String
&
other
)
{
copy
(
other
);
}
...
...
@@ -3389,7 +3424,6 @@ String& String::operator+=(const String& other) {
const
unsigned
my_old_size
=
size
();
const
unsigned
other_size
=
other
.
size
();
const
unsigned
total_size
=
my_old_size
+
other_size
;
using
namespace
std
;
if
(
isOnStack
())
{
if
(
total_size
<
len
)
{
// append to the current stack space
...
...
@@ -3437,14 +3471,12 @@ String& String::operator+=(const String& other) {
}
String
::
String
(
String
&&
other
)
{
using
namespace
std
;
memcpy
(
buf
,
other
.
buf
,
len
);
other
.
buf
[
0
]
=
'\0'
;
other
.
setLast
();
}
String
&
String
::
operator
=
(
String
&&
other
)
{
using
namespace
std
;
if
(
this
!=
&
other
)
{
if
(
!
isOnStack
())
delete
[]
data
.
ptr
;
...
...
@@ -3650,7 +3682,7 @@ DOCTEST_TO_STRING_OVERLOAD(int long long unsigned, "%llu")
String
toString
(
std
::
nullptr_t
)
{
return
"NULL"
;
}
#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
// see this issue on why this is needed: https://github.com/
onqtam
/doctest/issues/183
// see this issue on why this is needed: https://github.com/
doctest
/doctest/issues/183
String
toString
(
const
std
::
string
&
in
)
{
return
in
.
c_str
();
}
#endif // VS 2019
...
...
@@ -4031,29 +4063,6 @@ namespace {
return
suiteOrderComparator
(
lhs
,
rhs
);
}
#ifdef DOCTEST_CONFIG_COLORS_WINDOWS
HANDLE
g_stdoutHandle
;
WORD
g_origFgAttrs
;
WORD
g_origBgAttrs
;
bool
g_attrsInited
=
false
;
int
colors_init
()
{
if
(
!
g_attrsInited
)
{
g_stdoutHandle
=
GetStdHandle
(
STD_OUTPUT_HANDLE
);
g_attrsInited
=
true
;
CONSOLE_SCREEN_BUFFER_INFO
csbiInfo
;
GetConsoleScreenBufferInfo
(
g_stdoutHandle
,
&
csbiInfo
);
g_origFgAttrs
=
csbiInfo
.
wAttributes
&
~
(
BACKGROUND_GREEN
|
BACKGROUND_RED
|
BACKGROUND_BLUE
|
BACKGROUND_INTENSITY
);
g_origBgAttrs
=
csbiInfo
.
wAttributes
&
~
(
FOREGROUND_GREEN
|
FOREGROUND_RED
|
FOREGROUND_BLUE
|
FOREGROUND_INTENSITY
);
}
return
0
;
}
int
dummy_init_console_colors
=
colors_init
();
#endif // DOCTEST_CONFIG_COLORS_WINDOWS
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH
(
"-Wdeprecated-declarations"
)
void
color_to_stream
(
std
::
ostream
&
s
,
Color
::
Enum
code
)
{
static_cast
<
void
>
(
s
);
// for DOCTEST_CONFIG_COLORS_NONE or DOCTEST_CONFIG_COLORS_WINDOWS
...
...
@@ -4090,7 +4099,23 @@ namespace {
(
_isatty
(
_fileno
(
stdout
))
==
false
&&
getContextOptions
()
->
force_colors
==
false
))
return
;
#define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(g_stdoutHandle, x | g_origBgAttrs)
static
struct
ConsoleHelper
{
HANDLE
stdoutHandle
;
WORD
origFgAttrs
;
WORD
origBgAttrs
;
ConsoleHelper
()
{
stdoutHandle
=
GetStdHandle
(
STD_OUTPUT_HANDLE
);
CONSOLE_SCREEN_BUFFER_INFO
csbiInfo
;
GetConsoleScreenBufferInfo
(
stdoutHandle
,
&
csbiInfo
);
origFgAttrs
=
csbiInfo
.
wAttributes
&
~
(
BACKGROUND_GREEN
|
BACKGROUND_RED
|
BACKGROUND_BLUE
|
BACKGROUND_INTENSITY
);
origBgAttrs
=
csbiInfo
.
wAttributes
&
~
(
FOREGROUND_GREEN
|
FOREGROUND_RED
|
FOREGROUND_BLUE
|
FOREGROUND_INTENSITY
);
}
}
ch
;
#define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(ch.stdoutHandle, x | ch.origBgAttrs)
// clang-format off
switch
(
code
)
{
...
...
@@ -4107,7 +4132,7 @@ namespace {
case
Color
:
:
BrightWhite
:
DOCTEST_SET_ATTR
(
FOREGROUND_INTENSITY
|
FOREGROUND_GREEN
|
FOREGROUND_RED
|
FOREGROUND_BLUE
);
break
;
case
Color
:
:
None
:
case
Color
:
:
Bright
:
// invalid
default:
DOCTEST_SET_ATTR
(
g_
origFgAttrs
);
default:
DOCTEST_SET_ATTR
(
ch
.
origFgAttrs
);
}
// clang-format on
#endif // DOCTEST_CONFIG_COLORS_WINDOWS
...
...
@@ -4640,7 +4665,7 @@ namespace detail {
std
::
abort
();
}
void
decomp_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
bool
decomp_assert
(
assertType
::
Enum
at
,
const
char
*
file
,
int
line
,
const
char
*
expr
,
Result
result
)
{
bool
failed
=
!
result
.
m_passed
;
...
...
@@ -4651,20 +4676,30 @@ namespace detail {
DOCTEST_ASSERT_OUT_OF_TESTS
(
result
.
m_decomp
);
DOCTEST_ASSERT_IN_TESTS
(
result
.
m_decomp
);
// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
return
!
failed
;
}
MessageBuilder
::
MessageBuilder
(
const
char
*
file
,
int
line
,
assertType
::
Enum
severity
)
{
m_stream
=
getTlsOss
();
m_stream
=
tlssPush
();
m_file
=
file
;
m_line
=
line
;
m_severity
=
severity
;
}
MessageBuilder
::~
MessageBuilder
()
{
if
(
!
logged
)
tlssPop
();
}
IExceptionTranslator
::
IExceptionTranslator
()
=
default
;
IExceptionTranslator
::~
IExceptionTranslator
()
=
default
;
bool
MessageBuilder
::
log
()
{
m_string
=
getTlsOssResult
();
if
(
!
logged
)
{
m_string
=
tlssPop
();
logged
=
true
;
}
DOCTEST_ITERATE_THROUGH_REPORTERS
(
log_message
,
*
this
);
const
bool
isWarn
=
m_severity
&
assertType
::
is_warn
;
...
...
@@ -4683,29 +4718,10 @@ namespace detail {
if
(
m_severity
&
assertType
::
is_require
)
//!OCLINT bitwise operator in conditional
throwException
();
}
MessageBuilder
::~
MessageBuilder
()
=
default
;
}
// namespace detail
namespace
{
using
namespace
detail
;
template
<
typename
Ex
>
DOCTEST_NORETURN
void
throw_exception
(
Ex
const
&
e
)
{
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
throw
e
;
#else // DOCTEST_CONFIG_NO_EXCEPTIONS
std
::
cerr
<<
"doctest will terminate because it needed to throw an exception.
\n
"
<<
"The message was: "
<<
e
.
what
()
<<
'\n'
;
std
::
terminate
();
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
}
#ifndef DOCTEST_INTERNAL_ERROR
#define DOCTEST_INTERNAL_ERROR(msg) \
throw_exception(std::logic_error( \
__FILE__ ":" DOCTEST_TOSTR(__LINE__) ": Internal doctest error: " msg))
#endif // DOCTEST_INTERNAL_ERROR
// clang-format off
// =================================================================================================
...
...
@@ -6701,13 +6717,6 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
DOCTEST_ITERATE_THROUGH_REPORTERS
(
report_query
,
qdata
);
}
// see these issues on the reasoning for this:
// - https://github.com/onqtam/doctest/issues/143#issuecomment-414418903
// - https://github.com/onqtam/doctest/issues/126
auto
DOCTEST_FIX_FOR_MACOS_LIBCPP_IOSFWD_STRING_LINK_ERRORS
=
[]()
DOCTEST_NOINLINE
{
std
::
cout
<<
std
::
string
();
};
DOCTEST_FIX_FOR_MACOS_LIBCPP_IOSFWD_STRING_LINK_ERRORS
();
return
cleanup_and_return
();
}
...
...
@@ -6746,5 +6755,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_MSVC_SUPPRESS_WARNING_POP
DOCTEST_GCC_SUPPRESS_WARNING_POP
DOCTEST_SUPPRESS_COMMON_WARNINGS_POP
#endif // DOCTEST_LIBRARY_IMPLEMENTATION
#endif // DOCTEST_CONFIG_IMPLEMENT
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment