2
0
mirror of https://github.com/boostorg/parser.git synced 2026-01-19 04:22:13 +00:00

Extend all_t test to test arrays; fix errors.

This commit is contained in:
Zach Laine
2024-01-28 14:03:02 -06:00
parent 33edb6c4e8
commit 9d1a6aeeb3
3 changed files with 44 additions and 3 deletions

View File

@@ -19,8 +19,8 @@ namespace boost::parser::detail::text::detail {
template<typename T>
using iterator_ = decltype(text::detail::begin(std::declval<T &>()));
template<typename Range>
using sentinel_ = decltype(text::detail::end(std::declval<Range>()));
template<typename T>
using sentinel_ = decltype(text::detail::end(std::declval<T &>()));
template<typename T>
constexpr bool range_ =

View File

@@ -1009,7 +1009,7 @@ namespace boost { namespace parser {
decltype(detail::text::detail::begin(std::declval<T &>()));
template<typename Range>
using sentinel_t =
decltype(detail::text::detail::end(std::declval<Range>()));
decltype(detail::text::detail::end(std::declval<Range &>()));
template<typename T>
using iter_value_t = typename std::iterator_traits<T>::value_type;
template<typename T>

View File

@@ -61,3 +61,44 @@ TEST(all_t, basic)
detail::all_t<std::string &&>,
detail::owning_view<std::string>>);
}
TEST(all_t, array)
{
char str[] = "text";
char const const_str[] = "text";
static_assert(detail::range_<char[5]>);
static_assert(std::is_object_v<char[5]>);
detail::ref_view<char[5]> ref_view_(str);
{
auto && result = detail::all(
BOOST_PARSER_SUBRANGE(std::begin(const_str), std::end(const_str)));
static_assert(std::is_same_v<
decltype(result),
BOOST_PARSER_SUBRANGE<decltype(std::begin(const_str))> &&>);
}
{
auto && result = detail::all(str);
static_assert(
std::is_same_v<decltype(result), detail::ref_view<char[5]> &&>);
}
{
auto && result = detail::all(const_str);
static_assert(std::is_same_v<
decltype(result),
detail::ref_view<char const[5]> &&>);
}
static_assert(
std::is_same_v<
detail::all_t<BOOST_PARSER_SUBRANGE<decltype(std::begin(const_str))>>,
BOOST_PARSER_SUBRANGE<decltype(std::begin(const_str))>>);
static_assert(
std::
is_same_v<detail::all_t<char(&)[5]>, detail::ref_view<char[5]>>);
static_assert(std::is_same_v<
detail::all_t<char const(&)[5]>,
detail::ref_view<char const[5]>>);
}