Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/onqtam/doctest.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNavin P <74448943+navinp0304@users.noreply.github.com>2021-03-21 16:45:46 +0300
committerViktor Kirilov <vik.kirilov@gmail.com>2021-03-22 15:05:04 +0300
commit318e1dff9720b5c7abffc05b1bcbf231c2f1ad38 (patch)
tree866cb36c53ee95e23708f5c615c41f1f8f634614
parent3bfbed30e3d55188fa65d93b0046a3f3de274b0b (diff)
REQUIRE does not compile when operator== in different namespace #443 . (#468)
* REQUIRE does not compile when operator== in different namespace #443 . Expression_lhs.op member method is not instantiated when it is missing a member operator and the user defined conversion is able to apply the global operator. * Removing utility and using an overloaded version of declval which is faster in doctest_fwd.h . * Using templated operator== inside TEST_CASE changes deduced types of forwarding references #399 . This is fixed by using rvalues as function argument and using forward for the right type of reference. Now both gcc and doctest either fails or either compiles but not like one compiles and the other fails
-rw-r--r--doctest/doctest.h50
-rw-r--r--doctest/parts/doctest_fwd.h50
-rw-r--r--examples/all_features/CMakeLists.txt19
-rw-r--r--examples/all_features/namespace1.cpp27
-rw-r--r--examples/all_features/namespace2.cpp24
-rw-r--r--examples/all_features/namespace3.cpp22
-rw-r--r--examples/all_features/namespace4.cpp37
-rw-r--r--examples/all_features/namespace5.cpp39
-rw-r--r--examples/all_features/namespace6.cpp41
-rw-r--r--examples/all_features/namespace7.cpp41
-rw-r--r--examples/all_features/namespace8.cpp45
-rw-r--r--examples/all_features/namespace9.cpp44
-rw-r--r--examples/all_features/test_output/filter_2.txt2
-rw-r--r--examples/all_features/test_output/filter_2_xml.txt11
14 files changed, 438 insertions, 14 deletions
diff --git a/doctest/doctest.h b/doctest/doctest.h
index b9eb9990..20ab4836 100644
--- a/doctest/doctest.h
+++ b/doctest/doctest.h
@@ -444,7 +444,35 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
#include <type_traits>
#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+
namespace doctest {
+template<typename T, typename U = T&&> U declval(int);
+
+template<typename T> T declval(long);
+
+template<typename T> auto declval() noexcept -> decltype(declval<T>(0)) ;
+
+template< class T > struct remove_reference {typedef T type;};
+template< class T > struct remove_reference<T&> {typedef T type;};
+template< class T > struct remove_reference<T&&> {typedef T type;};
+
+template<class T> struct is_lvalue_reference { const static bool value=false; };
+template<class T> struct is_lvalue_reference<T&> { const static bool value=true; };
+
+template <class T>
+inline T&& forward(typename remove_reference<T>::type& t) noexcept
+{
+ return static_cast<T&&>(t);
+}
+
+template <class T>
+inline T&& forward(typename remove_reference<T>::type&& t) noexcept
+{
+ static_assert(!is_lvalue_reference<T>::value,
+ "Can not forward an rvalue as an lvalue.");
+ return static_cast<T&&>(t);
+}
DOCTEST_INTERFACE extern bool is_running_in_test;
@@ -1048,10 +1076,16 @@ namespace detail {
return toString(lhs) + op + toString(rhs);
}
+// This will check if there is any way it could find a operator like member or friend and uses it.
+// If not it doesn't find the operator or if the operator at global scope is defined after
+// this template, the template won't be instantiated due to SFINAE. Once the template is not
+// instantiated it can look for global operator using normal conversions.
+#define SFINAE_OP(ret,op) decltype(doctest::declval<L>() op doctest::declval<R>(),static_cast<ret>(0))
+
#define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \
template <typename R> \
- DOCTEST_NOINLINE Result operator op(const DOCTEST_REF_WRAP(R) rhs) { \
- bool res = op_macro(lhs, rhs); \
+ DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(R&& rhs) { \
+ bool res = op_macro(doctest::forward<L>(lhs), doctest::forward<R>(rhs)); \
if(m_at & assertType::is_false) \
res = !res; \
if(!res || doctest::getContextOptions()->success) \
@@ -1179,8 +1213,8 @@ namespace detail {
L lhs;
assertType::Enum m_at;
- explicit Expression_lhs(L in, assertType::Enum at)
- : lhs(in)
+ explicit Expression_lhs(L&& in, assertType::Enum at)
+ : lhs(doctest::forward<L>(in))
, m_at(at) {}
DOCTEST_NOINLINE operator Result() {
@@ -1193,6 +1227,10 @@ namespace detail {
return Result(res);
}
+ /* This is required for user-defined conversions from Expression_lhs to L */
+ //operator L() const { return lhs; }
+ operator L() const { return lhs; }
+
// clang-format off
DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(==, " == ", DOCTEST_CMP_EQ) //!OCLINT bitwise operator in conditional
DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(!=, " != ", DOCTEST_CMP_NE) //!OCLINT bitwise operator in conditional
@@ -1244,8 +1282,8 @@ namespace detail {
// https://github.com/catchorg/Catch2/issues/870
// https://github.com/catchorg/Catch2/issues/565
template <typename L>
- Expression_lhs<const DOCTEST_REF_WRAP(L)> operator<<(const DOCTEST_REF_WRAP(L) operand) {
- return Expression_lhs<const DOCTEST_REF_WRAP(L)>(operand, m_at);
+ Expression_lhs<L> operator<<(L &&operand) {
+ return Expression_lhs<L>(doctest::forward<L>(operand), m_at);
}
};
diff --git a/doctest/parts/doctest_fwd.h b/doctest/parts/doctest_fwd.h
index 3527b540..d2a7bfb9 100644
--- a/doctest/parts/doctest_fwd.h
+++ b/doctest/parts/doctest_fwd.h
@@ -441,7 +441,35 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
#include <type_traits>
#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+
namespace doctest {
+template<typename T, typename U = T&&> U declval(int);
+
+template<typename T> T declval(long);
+
+template<typename T> auto declval() noexcept -> decltype(declval<T>(0)) ;
+
+template< class T > struct remove_reference {typedef T type;};
+template< class T > struct remove_reference<T&> {typedef T type;};
+template< class T > struct remove_reference<T&&> {typedef T type;};
+
+template<class T> struct is_lvalue_reference { const static bool value=false; };
+template<class T> struct is_lvalue_reference<T&> { const static bool value=true; };
+
+template <class T>
+inline T&& forward(typename remove_reference<T>::type& t) noexcept
+{
+ return static_cast<T&&>(t);
+}
+
+template <class T>
+inline T&& forward(typename remove_reference<T>::type&& t) noexcept
+{
+ static_assert(!is_lvalue_reference<T>::value,
+ "Can not forward an rvalue as an lvalue.");
+ return static_cast<T&&>(t);
+}
DOCTEST_INTERFACE extern bool is_running_in_test;
@@ -1045,10 +1073,16 @@ namespace detail {
return toString(lhs) + op + toString(rhs);
}
+// This will check if there is any way it could find a operator like member or friend and uses it.
+// If not it doesn't find the operator or if the operator at global scope is defined after
+// this template, the template won't be instantiated due to SFINAE. Once the template is not
+// instantiated it can look for global operator using normal conversions.
+#define SFINAE_OP(ret,op) decltype(doctest::declval<L>() op doctest::declval<R>(),static_cast<ret>(0))
+
#define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \
template <typename R> \
- DOCTEST_NOINLINE Result operator op(const DOCTEST_REF_WRAP(R) rhs) { \
- bool res = op_macro(lhs, rhs); \
+ DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(R&& rhs) { \
+ bool res = op_macro(doctest::forward<L>(lhs), doctest::forward<R>(rhs)); \
if(m_at & assertType::is_false) \
res = !res; \
if(!res || doctest::getContextOptions()->success) \
@@ -1176,8 +1210,8 @@ namespace detail {
L lhs;
assertType::Enum m_at;
- explicit Expression_lhs(L in, assertType::Enum at)
- : lhs(in)
+ explicit Expression_lhs(L&& in, assertType::Enum at)
+ : lhs(doctest::forward<L>(in))
, m_at(at) {}
DOCTEST_NOINLINE operator Result() {
@@ -1190,6 +1224,10 @@ namespace detail {
return Result(res);
}
+ /* This is required for user-defined conversions from Expression_lhs to L */
+ //operator L() const { return lhs; }
+ operator L() const { return lhs; }
+
// clang-format off
DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(==, " == ", DOCTEST_CMP_EQ) //!OCLINT bitwise operator in conditional
DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(!=, " != ", DOCTEST_CMP_NE) //!OCLINT bitwise operator in conditional
@@ -1241,8 +1279,8 @@ namespace detail {
// https://github.com/catchorg/Catch2/issues/870
// https://github.com/catchorg/Catch2/issues/565
template <typename L>
- Expression_lhs<const DOCTEST_REF_WRAP(L)> operator<<(const DOCTEST_REF_WRAP(L) operand) {
- return Expression_lhs<const DOCTEST_REF_WRAP(L)>(operand, m_at);
+ Expression_lhs<L> operator<<(L &&operand) {
+ return Expression_lhs<L>(doctest::forward<L>(operand), m_at);
}
};
diff --git a/examples/all_features/CMakeLists.txt b/examples/all_features/CMakeLists.txt
index f2573963..829c15bd 100644
--- a/examples/all_features/CMakeLists.txt
+++ b/examples/all_features/CMakeLists.txt
@@ -22,6 +22,15 @@ set(files_all
${files_with_output}
concurrency.cpp
../../scripts/coverage_maxout.cpp
+ namespace1.cpp
+ namespace2.cpp
+ namespace3.cpp
+ namespace4.cpp
+ namespace5.cpp
+ namespace6.cpp
+ namespace7.cpp
+ namespace8.cpp
+ namespace9.cpp
)
# add the executable
@@ -49,6 +58,16 @@ if(NOT MINGW AND NOT DEFINED DOCTEST_THREAD_LOCAL)
doctest_add_test(NO_OUTPUT NAME concurrency.cpp ${common_args} -sf=*concurrency.cpp -d) # duration: there is no output anyway
endif()
+doctest_add_test(NO_OUTPUT NAME namespace1.cpp ${common_args} -sf=*namespace1.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace2.cpp ${common_args} -sf=*namespace2.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace3.cpp ${common_args} -sf=*namespace3.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace4.cpp ${common_args} -sf=*namespace4.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace5.cpp ${common_args} -sf=*namespace5.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace6.cpp ${common_args} -sf=*namespace6.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace7.cpp ${common_args} -sf=*namespace7.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace8.cpp ${common_args} -sf=*namespace8.cpp )
+doctest_add_test(NO_OUTPUT NAME namespace9.cpp ${common_args} -sf=*namespace9.cpp )
+
# add this separately since the file has a non-straightforward path
doctest_add_test(NAME coverage_maxout.cpp ${common_args} -sf=*coverage_maxout.cpp)
diff --git a/examples/all_features/namespace1.cpp b/examples/all_features/namespace1.cpp
new file mode 100644
index 00000000..4014ab54
--- /dev/null
+++ b/examples/all_features/namespace1.cpp
@@ -0,0 +1,27 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user1 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+};
+} // namespace user1
+
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes")
+
+bool operator==(const user1::label& lhs, const user1::label& rhs) { return lhs.i == rhs.i; }
+
+
+TEST_CASE("namespace 1 global operator") {
+ user1::label a;
+ user1::label b;
+ CHECK(a == b);
+}
diff --git a/examples/all_features/namespace2.cpp b/examples/all_features/namespace2.cpp
new file mode 100644
index 00000000..3dc1d556
--- /dev/null
+++ b/examples/all_features/namespace2.cpp
@@ -0,0 +1,24 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user2 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ friend bool operator==(const user2::label& lhs, const user2::label& rhs) {
+ return lhs.i == rhs.i;
+ }
+};
+} // namespace user2
+
+TEST_CASE("namespace 2 friend operator") {
+ user2::label a;
+ user2::label b;
+ REQUIRE(a == b);
+}
diff --git a/examples/all_features/namespace3.cpp b/examples/all_features/namespace3.cpp
new file mode 100644
index 00000000..a1015aa0
--- /dev/null
+++ b/examples/all_features/namespace3.cpp
@@ -0,0 +1,22 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user3 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ bool operator==(const user3::label& rhs) const { return i == rhs.i; }
+};
+} // namespace user3
+
+TEST_CASE("namespace 3 member operator") {
+ user3::label a;
+ user3::label b;
+ REQUIRE(a == b);
+}
diff --git a/examples/all_features/namespace4.cpp b/examples/all_features/namespace4.cpp
new file mode 100644
index 00000000..88d74628
--- /dev/null
+++ b/examples/all_features/namespace4.cpp
@@ -0,0 +1,37 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user4 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ bool operator==(const user4::label& rhs) const { return i == rhs.i; }
+};
+} // namespace user4
+
+namespace user5 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ bool operator==(const user5::label& rhs) const { return i == rhs.i; }
+};
+} // namespace user5
+
+TEST_CASE("namespace 4 member vs member") {
+ user4::label a4;
+ user4::label b4;
+
+ user5::label a5;
+ user5::label b5;
+
+ REQUIRE(a4 == b4);
+ REQUIRE(a5 == b5);
+}
diff --git a/examples/all_features/namespace5.cpp b/examples/all_features/namespace5.cpp
new file mode 100644
index 00000000..20fb0d77
--- /dev/null
+++ b/examples/all_features/namespace5.cpp
@@ -0,0 +1,39 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user6 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ bool operator==(const user6::label& rhs) const { return i == rhs.i; }
+};
+} // namespace user6
+
+namespace user7 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ friend bool operator==(const user7::label& lhs, const user7::label& rhs) {
+ return lhs.i == rhs.i;
+ }
+};
+} // namespace user7
+
+TEST_CASE("namespace 5 member vs friend") {
+ user6::label a6;
+ user6::label b6;
+
+ user7::label a7;
+ user7::label b7;
+
+ REQUIRE(a6 == b6);
+ REQUIRE(a7 == b7);
+}
diff --git a/examples/all_features/namespace6.cpp b/examples/all_features/namespace6.cpp
new file mode 100644
index 00000000..e8c66e2a
--- /dev/null
+++ b/examples/all_features/namespace6.cpp
@@ -0,0 +1,41 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user6 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ friend bool operator==(const user6::label& lhs, const user6::label& rhs) {
+ return lhs.i == rhs.i;
+ }
+};
+} // namespace user6
+
+namespace user7 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ friend bool operator==(const user7::label& lhs, const user7::label& rhs) {
+ return lhs.i == rhs.i;
+ }
+};
+} // namespace user7
+
+TEST_CASE("namespace 6 friend vs friend") {
+ user6::label a6;
+ user6::label b6;
+
+ user7::label a7;
+ user7::label b7;
+
+ REQUIRE(a6 == b6);
+ REQUIRE(a7 == b7);
+}
diff --git a/examples/all_features/namespace7.cpp b/examples/all_features/namespace7.cpp
new file mode 100644
index 00000000..c2c27322
--- /dev/null
+++ b/examples/all_features/namespace7.cpp
@@ -0,0 +1,41 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user6 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ bool operator==(const user6::label& rhs) const { return i == rhs.i; }
+};
+} // namespace user6
+
+namespace user7 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+};
+} // namespace user7
+
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes")
+
+bool operator==(const user7::label& lhs, const user7::label& rhs) { return lhs.i == rhs.i; }
+
+TEST_CASE("namespace 7 member vs global") {
+ user6::label a6;
+ user6::label b6;
+
+ user7::label a7;
+ user7::label b7;
+
+ REQUIRE(a6 == b6);
+ REQUIRE(a7 == b7);
+}
diff --git a/examples/all_features/namespace8.cpp b/examples/all_features/namespace8.cpp
new file mode 100644
index 00000000..cfc2131b
--- /dev/null
+++ b/examples/all_features/namespace8.cpp
@@ -0,0 +1,45 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user6 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+ friend bool operator==(const user6::label& lhs, const user6::label& rhs) {
+ return lhs.i == rhs.i;
+ }
+};
+} // namespace user6
+
+namespace user8 {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+};
+} // namespace user8
+
+
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes")
+
+bool operator==(const user8::label& lhs, const user8::label& rhs) { return lhs.i == rhs.i; }
+
+
+TEST_CASE("namespace 8 friend vs global") {
+ user6::label a6;
+ user6::label b6;
+
+ user8::label a8;
+ user8::label b8;
+
+ REQUIRE(a6 == b6);
+ REQUIRE(a8 == b8);
+}
diff --git a/examples/all_features/namespace9.cpp b/examples/all_features/namespace9.cpp
new file mode 100644
index 00000000..078e6235
--- /dev/null
+++ b/examples/all_features/namespace9.cpp
@@ -0,0 +1,44 @@
+#include <doctest/doctest.h>
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+#include <cstdint>
+#include <sstream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+namespace user9a {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+};
+} // namespace user9a
+
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes")
+bool operator==(const user9a::label& lhs, const user9a::label& rhs) { return lhs.i == rhs.i; }
+
+namespace user9b {
+struct label
+{
+ label()
+ : i(0) {}
+ int i;
+};
+} // namespace user9b
+
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes")
+
+bool operator==(const user9b::label& lhs, const user9b::label& rhs) { return lhs.i == rhs.i; }
+
+TEST_CASE("namespace 9 both global") {
+ user9a::label a1;
+ user9a::label a2;
+
+ user9b::label b1;
+ user9b::label b2;
+
+ REQUIRE(a1 == a2);
+ REQUIRE(b1 == b2);
+}
diff --git a/examples/all_features/test_output/filter_2.txt b/examples/all_features/test_output/filter_2.txt
index 18fe1062..8abc26e2 100644
--- a/examples/all_features/test_output/filter_2.txt
+++ b/examples/all_features/test_output/filter_2.txt
@@ -1,6 +1,6 @@
[doctest] run with "--help" for options
===============================================================================
-[doctest] test cases: 0 | 0 passed | 0 failed | 81 skipped
+[doctest] test cases: 0 | 0 passed | 0 failed | 90 skipped
[doctest] assertions: 0 | 0 passed | 0 failed |
[doctest] Status: SUCCESS!
Program code.
diff --git a/examples/all_features/test_output/filter_2_xml.txt b/examples/all_features/test_output/filter_2_xml.txt
index fde7c970..9bec5b7b 100644
--- a/examples/all_features/test_output/filter_2_xml.txt
+++ b/examples/all_features/test_output/filter_2_xml.txt
@@ -75,6 +75,15 @@
<TestCase name="multiple types&lt;>" filename="templated_test_cases.cpp" line="0" skipped="true"/>
<TestCase name="multiple types&lt;>" filename="templated_test_cases.cpp" line="0" skipped="true"/>
<TestCase name="multiple types&lt;>" filename="templated_test_cases.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 1 global operator" filename="namespace1.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 2 friend operator" filename="namespace2.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 3 member operator" filename="namespace3.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 4 member vs member" filename="namespace4.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 5 member vs friend" filename="namespace5.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 6 friend vs friend" filename="namespace6.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 7 member vs global" filename="namespace7.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 8 friend vs global" filename="namespace8.cpp" line="0" skipped="true"/>
+ <TestCase name="namespace 9 both global" filename="namespace9.cpp" line="0" skipped="true"/>
<TestCase name="normal macros" filename="assertion_macros.cpp" line="0" skipped="true"/>
</TestSuite>
<TestSuite name="ts1">
@@ -119,6 +128,6 @@
<TestCase name="will end from an unknown exception" filename="coverage_maxout.cpp" line="0" skipped="true"/>
</TestSuite>
<OverallResultsAsserts successes="0" failures="0"/>
- <OverallResultsTestCases successes="0" failures="0" skipped="81"/>
+ <OverallResultsTestCases successes="0" failures="0" skipped="90"/>
</doctest>
Program code.