Fix initializer_list use in algorithm.h and definition of data() in iterator.h (#1374)

* Print test names at test time (#1343)

* Fix initializer_list use in algorithm.h

Needs to be conditional.

* Move definition of data() in iterator.h

Needs to be defined earlier.

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
This commit is contained in:
Roland Reichwein 2026-04-05 14:37:15 +02:00 committed by GitHub
parent a1ad13364e
commit 3cd03fcb7f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 59 additions and 46 deletions

View File

@ -43,6 +43,7 @@ SOFTWARE.
#include "exception.h"
#include "functional.h"
#include "gcd.h"
#include "initializer_list.h"
#include "invoke.h"
#include "iterator.h"
#include "largest.h"
@ -7020,6 +7021,7 @@ namespace etl
return etl::invoke(comp, etl::invoke(proj, b), etl::invoke(proj, a)) ? b : a;
}
#if ETL_HAS_INITIALIZER_LIST
template <class T, class Comp = ranges::less, class Proj = etl::identity>
constexpr T operator()(std::initializer_list<T> r, Comp comp = {}, Proj proj = {}) const
{
@ -7036,6 +7038,7 @@ namespace etl
}
return *smallest;
}
#endif
template <class R, class Comp = ranges::less, class Proj = etl::identity, typename = etl::enable_if_t<etl::is_range_v<R>>>
constexpr ranges::range_value_t<R> operator()(R&& r, Comp comp = {}, Proj proj = {}) const
@ -7098,6 +7101,7 @@ namespace etl
return etl::invoke(comp, etl::invoke(proj, a), etl::invoke(proj, b)) ? b : a;
}
#if ETL_HAS_INITIALIZER_LIST
template <class T, class Comp = ranges::less, class Proj = etl::identity>
constexpr T operator()(std::initializer_list<T> r, Comp comp = {}, Proj proj = {}) const
{
@ -7114,6 +7118,7 @@ namespace etl
}
return *largest;
}
#endif
template <class R, class Comp = ranges::less, class Proj = etl::identity, typename = etl::enable_if_t<etl::is_range_v<R>>>
constexpr ranges::range_value_t<R> operator()(R&& r, Comp comp = {}, Proj proj = {}) const
@ -7180,6 +7185,7 @@ namespace etl
return {a, b};
}
#if ETL_HAS_INITIALIZER_LIST
template <class T, class Comp = ranges::less, class Proj = etl::identity>
constexpr ranges::minmax_result<T> operator()(std::initializer_list<T> r, Comp comp = {}, Proj proj = {}) const
{
@ -7202,6 +7208,7 @@ namespace etl
}
return {*smallest, *largest};
}
#endif
template <class R, class Comp = ranges::less, class Proj = etl::identity, typename = etl::enable_if_t<etl::is_range_v<R>>>
constexpr ranges::minmax_result<ranges::range_value_t<R>> operator()(R&& r, Comp comp = {}, Proj proj = {}) const

View File

@ -1218,6 +1218,52 @@ namespace etl
#define ETL_ARRAY_SIZE(a) sizeof(etl::array_size(a))
#if ETL_NOT_USING_STL || ETL_CPP17_NOT_SUPPORTED
//**************************************************************************
/// Returns a pointer to the block of memory containing the elements of the
/// range.
///\ingroup container
//**************************************************************************
template <typename TContainer>
ETL_CONSTEXPR typename TContainer::pointer data(TContainer& container)
{
return container.data();
}
//**************************************************************************
/// Returns a const_pointer to the block of memory containing the elements of
/// the range.
///\ingroup container
//**************************************************************************
template <typename TContainer>
ETL_CONSTEXPR typename TContainer::const_pointer data(const TContainer& container)
{
return container.data();
}
///**************************************************************************
/// Returns a pointer to the block of memory containing the elements of the
/// range.
///\ingroup container
///**************************************************************************
template <typename TValue, size_t Array_Size>
ETL_CONSTEXPR TValue* data(TValue (&a)[Array_Size])
{
return a;
}
///**************************************************************************
/// Returns a const pointer to the block of memory containing the elements of
/// the range.
///\ingroup container
///**************************************************************************
template <typename TValue, size_t Array_Size>
ETL_CONSTEXPR const TValue* data(const TValue (&a)[Array_Size])
{
return a;
}
#endif
#if ETL_USING_CPP17
template <class T>
using iter_value_t = typename etl::iterator_traits<etl::remove_cvref_t<T>>::value_type;
@ -1962,52 +2008,6 @@ namespace etl
inline constexpr bool is_range_v = is_range<T>::value;
#endif
#endif
#if ETL_NOT_USING_STL || ETL_CPP17_NOT_SUPPORTED
//**************************************************************************
/// Returns a pointer to the block of memory containing the elements of the
/// range.
///\ingroup container
//**************************************************************************
template <typename TContainer>
ETL_CONSTEXPR typename TContainer::pointer data(TContainer& container)
{
return container.data();
}
//**************************************************************************
/// Returns a const_pointer to the block of memory containing the elements of
/// the range.
///\ingroup container
//**************************************************************************
template <typename TContainer>
ETL_CONSTEXPR typename TContainer::const_pointer data(const TContainer& container)
{
return container.data();
}
///**************************************************************************
/// Returns a pointer to the block of memory containing the elements of the
/// range.
///\ingroup container
///**************************************************************************
template <typename TValue, size_t Array_Size>
ETL_CONSTEXPR TValue* data(TValue (&a)[Array_Size])
{
return a;
}
///**************************************************************************
/// Returns a const pointer to the block of memory containing the elements of
/// the range.
///\ingroup container
///**************************************************************************
template <typename TValue, size_t Array_Size>
ETL_CONSTEXPR const TValue* data(const TValue (&a)[Array_Size])
{
return a;
}
#endif
} // namespace etl
#endif

View File

@ -16495,6 +16495,7 @@ namespace
CHECK_EQUAL(3, etl::ranges::min(-5, 3, etl::ranges::less{}, abs_proj));
}
#if ETL_HAS_INITIALIZER_LIST
//*************************************************************************
TEST(ranges_min_initializer_list)
{
@ -16517,6 +16518,7 @@ namespace
};
CHECK_EQUAL(9, etl::ranges::min({3, 1, 4, 5, 9, 2, 6}, etl::ranges::less{}, negate));
}
#endif
//*************************************************************************
TEST(ranges_min_range)
@ -16692,6 +16694,7 @@ namespace
CHECK_EQUAL(-5, etl::ranges::max(-5, 3, etl::ranges::less{}, abs_proj));
}
#if ETL_HAS_INITIALIZER_LIST
//*************************************************************************
TEST(ranges_max_initializer_list)
{
@ -16714,6 +16717,7 @@ namespace
};
CHECK_EQUAL(1, etl::ranges::max({3, 1, 4, 5, 9, 2, 6}, etl::ranges::less{}, negate));
}
#endif
//*************************************************************************
TEST(ranges_max_range)
@ -16914,6 +16918,7 @@ namespace
CHECK_EQUAL(-5, result2.max);
}
#if ETL_HAS_INITIALIZER_LIST
//*************************************************************************
TEST(ranges_minmax_initializer_list)
{
@ -16945,6 +16950,7 @@ namespace
CHECK_EQUAL(9, result.min);
CHECK_EQUAL(1, result.max);
}
#endif
//*************************************************************************
TEST(ranges_minmax_range)