From 19a1d7733b6045589b7dfd157276ac2d111fa42c Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sun, 8 Mar 2026 21:19:40 +0100 Subject: [PATCH] Support empty ranges in selection_sort --- include/etl/algorithm.h | 5 +++++ test/test_algorithm.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/include/etl/algorithm.h b/include/etl/algorithm.h index 79024c3d..12dcfa32 100644 --- a/include/etl/algorithm.h +++ b/include/etl/algorithm.h @@ -3109,6 +3109,11 @@ namespace etl ETL_CONSTEXPR20 void selection_sort(TIterator first, TIterator last, TCompare compare) { + if (first == last) + { + return; + } + TIterator min; const TIterator ilast = private_algorithm::get_before_last(first, last); const TIterator jlast = last; diff --git a/test/test_algorithm.cpp b/test/test_algorithm.cpp index 1b2762cb..86dab9af 100644 --- a/test/test_algorithm.cpp +++ b/test/test_algorithm.cpp @@ -2163,6 +2163,30 @@ namespace } } + //************************************************************************* + TEST(selection_sort_empty_range) + { + // Forward iterators + std::forward_list fwd_data; + etl::selection_sort(fwd_data.begin(), fwd_data.end()); + CHECK(fwd_data.empty()); + + // Bidirectional iterators + std::list bidir_data; + etl::selection_sort(bidir_data.begin(), bidir_data.end()); + CHECK(bidir_data.empty()); + + // Random access iterators + std::vector ra_data; + etl::selection_sort(ra_data.begin(), ra_data.end()); + CHECK(ra_data.empty()); + + // With comparator + std::forward_list fwd_data2; + etl::selection_sort(fwd_data2.begin(), fwd_data2.end(), std::greater()); + CHECK(fwd_data2.empty()); + } + //************************************************************************* TEST(heap_sort_default) {