From db191afa8b2c6015300f96a6c105fb0dd077e466 Mon Sep 17 00:00:00 2001 From: Edward Catmur Date: Mon, 16 Dec 2019 10:49:48 +0000 Subject: [PATCH] Allow per-element comparison of string against non-string iterable (of char). Test. --- include/boost/test/tools/cstring_comparison_op.hpp | 9 +++++++-- test/writing-test-ts/collection-comparison-test.cpp | 10 ++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/boost/test/tools/cstring_comparison_op.hpp b/include/boost/test/tools/cstring_comparison_op.hpp index 04b38561ee..77d46b38ac 100644 --- a/include/boost/test/tools/cstring_comparison_op.hpp +++ b/include/boost/test/tools/cstring_comparison_op.hpp @@ -16,6 +16,7 @@ #include #include +#include #include // Boost @@ -37,8 +38,12 @@ namespace op { #define DEFINE_CSTRING_COMPARISON( oper, name, rev, name_inverse ) \ template \ struct name::value \ - && unit_test::is_cstring_comparable::value) \ + ( ( unit_test::is_cstring_comparable::value \ + && unit_test::is_cstring_comparable::value) \ + || ( unit_test::is_cstring_comparable::value \ + && unit_test::is_forward_iterable::value) \ + || ( unit_test::is_forward_iterable::value \ + && unit_test::is_cstring_comparable::value)) \ >::type > \ { \ typedef typename unit_test::deduce_cstring_transform::type lhs_char_type; \ diff --git a/test/writing-test-ts/collection-comparison-test.cpp b/test/writing-test-ts/collection-comparison-test.cpp index 982f02ab69..8c5ff7033b 100644 --- a/test/writing-test-ts/collection-comparison-test.cpp +++ b/test/writing-test-ts/collection-comparison-test.cpp @@ -142,6 +142,16 @@ BOOST_AUTO_TEST_CASE( test_collection_of_collection_comp ) //____________________________________________________________________________// +BOOST_AUTO_TEST_CASE( test_string_non_string_per_element ) +{ + char const* a = "abc"; + std::vector b{'a', 'b', 'c'}; + BOOST_TEST( a == b, tt::per_element() ); + BOOST_TEST( b == a, tt::per_element() ); +} + +//____________________________________________________________________________// + // this one does not have const_iterator nor a size, but should be forward iterable // and possible to use in the collection comparison struct fwd_iterable_custom {