Ubuntu 26.04 is not available in github workflows directly and won't be soon.
But ubuntu-26.04 is available as docker container. So use it for running
C++26 workflows which were disabled previously.
* Print test names at test time (#1343)
* Fix operator| conflict with std::ranges (#1395)
* Add concept invocable and further missing concepts to concepts.h
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Fix operator| conflict with std::ranges (#1395)
* Add begin() and end() to etl::expected
* Adding error_or() to etl::expected
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Fix operator| conflict with std::ranges (#1395)
* Make etl::optional, etl::variant and etl::vector methods noexcept
Adding type traits supporting the respective conditional noexcept
Fix missing etl::move() in etl::optional move constructors
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Fix delegate not being cleared by assigning empty braces
Fixes issue #1399.
The non-capturing lambda support (PR#1295) added a non-explicit
delegate(function_ptr) constructor and operator=(function_ptr). This
caused `delegate = {}` to implicitly convert `{}` to a null function
pointer and bind it via function_ptr_stub, leaving the delegate
appearing valid (stub != nullptr) but invoking through a null pointer
(undefined behavior).
Fix:
- Mark delegate(function_ptr) constructor explicit to prevent implicit
conversion from `{}` during initialization.
- In operator=(function_ptr), clear the delegate when fp is null
instead of binding a null pointer through function_ptr_stub.
Added tests verifying that both `delegate d = {}` and `d = {}` produce
an invalid (cleared) delegate.
* Fix Dockerfile for powerpc cross build
Debian snapshot sources were mixed with plain sid sources which
mismatched after a while. Now, aligning all sources from snapshot
server.
Includes C++26 related infrastructure macros.
Fixes compile errors when compiling under C++26.
Initially supported C++26 features:
- [[indeterminate]]
- new 2022 ISO prefixes in ratio.h
- atomic fetch_max() and fetch_min()
- is_virtual_base_of
- is_trivially_relocatable and trivially_relocate
- saturation arithmetic: add_sat, sub_sat, mul_sat, div_sat, saturate_cast
* Add development tools to docker image
python3-cogapp, clang-format, treefmt
Add script to run development environment in docker container
Document docker use in docs/docker.md
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Extensions for testing
Generalize run-tests.sh
Test all C++ versions at once
Fix combination of big endian and -Wsign-conversion
Failed on s390x (as reference for big endian)
Add github workflow for s390x
Add armhf container files
Devcontainers for i386 and riscv
Add github workflows for armhf, i386 and riscv64
Add run-tests.sh for foreign architectures
Document testing in doc/testing.md
Adjustments from clang-format run
Fix .devcontainer/s390x/Dockerfile for linebreak syntax
Fix exit code of run-test.sh
Previously, "exit $?" was used, actually the return value of
FailedCompilation and FailedTest which are always 0.
Now just using 1.
In run-tests.sh at ctest, use -V for printing number of tests unconditionally
While ctest suppresses individual test list by default, it didn't even
print the number of tests anymore, as run_tests.sh does because
it suppresses it output completely.
Now, by default print number of tests, and in verbose mode, print test list
in addition.
* Support powerpc as foreign architecture
* Add SFINAE constraints to etl::begin/end and reverse iterator free functions
The unconstrained etl::begin(), etl::end(), etl::cbegin(), etl::cend(),
etl::rbegin(), etl::rend(), etl::crbegin(), and etl::crend() templates
in the no-STL code path were matching iterator types during ADL, causing
a hard error with GCC 15's std::ranges::begin. When std::ranges performed
ADL on an etl::*::iterator, it found etl::begin() as a candidate; since
the iterator type has a nested iterator typedef, the return type TContainer::iterator
was valid, but calling .begin() on the iterator failed.
Fix: add etl::void_t<decltype(...)> SFINAE guards to each template,
ensuring they only participate in overload resolution when TContainer
actually has the corresponding member function (.begin(), .end(), etc.).
* - Fix red unit tests on 32 bits big-endian platform.
* Document powerpc architecture for testing
* Use Dockerfiles in cross testing github workflows
Synchronizes environment setup for github workflows to what is
defined in the development Dockerfiles. So they don't need to
be maintained separately.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: Sergei Shirokov <sergej.shirokov@gmail.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Fix run-syntax-checks.sh to run with bash
Contains bash specific syntax, and sync with the other *.sh files
in this directory.
* Add missing header file adaptors to the directory and CMakeLists.txt
* run-syntax-checks.sh without ETL_IN_UNIT_TEST
* Fix usage of make_unsigned
* Removing crc.h from syntax checks because of redundancy
* Remove ETL_USING_CPP11 from unit tests
Unit tests are always run with at least C++11.
* Add missing copyright header in test_manchester.cpp
* Fixed usage of ETL_DEPRECATED_REASON(), wrong syntax by order
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Suppress false positive compiler warnings when compiling with -O3
The CI checks currently only check everything with -O0. Wenn activating
higher optimization levels, more warnings kick in. Leading to errors,
depending on the configuration.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Fix chrono.h year_month_weekday_last and year_month_weekday sysdays()
Bug 1: year_month_weekday_last::operator sys_days() — wrong weekday construction
The code was constructing a weekday from a raw day count using weekday(unsigned),
which treats the value as a weekday encoding (0–6). The fix uses weekday(sys_days),
which correctly accounts for the epoch being a Thursday (+4 offset).
Bug 2: year_month_weekday::operator sys_days() — same wrong weekday
construction + off-by-one in day_of_month
Same weekday(unsigned) vs weekday(sys_days) issue. Additionally, the day_of_month
calculation was missing the 1 + base — it computed a 0-based offset from day 1,
but forgot to add the 1 back when converting to an actual day number.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Modified closure to accept the callback type as a template parameter
* Modified closure to accept the callback type as a template parameter
* Applied clang-format
* Fixed C++03 compatibility
* Fixed C++03 compatibility
# Conflicts:
# include/etl/closure.h
---------
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* 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>
* Fix compilation with -Wsign-conversion
For tests with GCC and Clang
Fixes https://github.com/ETLCPP/etl/issues/632
* Fix support of negative Id in type_lookup.h: type_from_id
* Fix element access arithmetic in atomic_gcc_sync.h fetch_add/fetch_sub
* Fix rounded_integral_division.h: divide_round_half_odd(): direction is always 1
* Add a inplace_function constructor with a nullptr argument
* Add unit test for nullptr construction
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* add bounds and empty checks to containers
* address code rabbit review
* correct C++11 constexpr error
* rename new constexpr macro and make it global
* rename queue specializations' exceptions
* change front() implementation in locked queue specializations
* refactor usage of CONSTEXPR and NO_EXCEPT
* expand intrusive queue tests
* introduce lock guards on locked queues
* Print test names at test time (#1343)
* revert mutex and return changes on locking queues
* finish reverting the locked queues
---------
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Restrict etl::atomic for general types
Needs adding is_copy_assignable and is_move_assignable, and
adjustments to is_trivially_copyable and is_assignable
* Resolve mutable T value vs. volatile qualified methods
* Remove volatile method overloads
They are deprecated in C++20 because they don't work as users expect anyway.
MSVC hinted for this.
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add ranges
* Print test names at test time (#1343)
* Fix conflit commit errors
* Cast return value of operator* to value_type
Fixed warning on VS2022
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Mark uninitialized use from std library
Similar to other cases, adds compiler pragmas against warnings
caused by std library in optimized builds of tests
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* manchester
* Added manchester code and test
* manchester
* Formatting and added missing file
* manchester
* Some functions can only be constexpr since C++14
* manchester
* Manchester decode and some refactoring
* manchester
* Added some missing typenames
* manchester
* constexpr void function not allowed in C++11
* manchester
* condition on static_assert tests
* manchester
* revert CMakeLists.txt
* Using ETL_STATIC_ASSERT
* Some cleanup
* manchester
* Added static_assert message
* manchester
* Added compile time tests
* manchester
* Added invert manchester
* Some refactoring
* manchester
* Disable test for now
* Move ETL_NODISCARD before static
* manchester
* Test for valid_span
* manchester
* Remove redundant (?) storage specifiers for template specializations. Storage specifier already given in base template
* manchester
* refactoring to get rid of specialized template functions in template class
* manchester
* cleanup
* manchester
* Added documentation comments
* Some refactoring
* manchester
* introducing namespace detail_manchester
* manchester
* Some refactoring
* Update tests
* manchester
* Some refactoring
* Removed possible undefined behavior by refactoring encode_span
* constexpr version of encode_span
* Static assertion for rare case where code doesn't work because CHAR_BIT is not the same as the number of bits in uint_least8_t
* manchester
* renamed valid to is_valid
* manchester
* renamed is_valid_span to is_valid
* Using etl exceptions in ETL_ASSERT
* manchester
* Removed _fast functions
* merged encode_in_place with encode and decode_in_place with decode
* removed _span to create normal overloads of encode and decode for span
* Some renaming and minor refactoring
* manchester
* Fix build issues
* manchester
* Conditionally compile manchester_decoded
* Update test_manchester.cpp
Removed redundant semicolon
* #1258 Manchester coding
* Formatting
* consistency: hex literals with lower case 0x
* #1258 Manchester coding
* Moved copyright to top of file
* Make constexpr encode/decode span functions equal for little and big endian platforms
* #1258 Manchester coding
* Added missing include
* Added missing 8bit/64bit guards
* Fixed is_valid for big endian platforms
* #1258 Manchester coding
* private memcpy alias
* #1258 Manchester coding
* Review comments
* #1258 Manchester coding
* Cleanup
* Fix build error
* #1258 Manchester coding
* Add manchester documentation
* #1258 Manchester coding
* Preparation for GitHub pages
* #1324 Manchester documentation
* Some small fixes
* Print test names at test time (#1343)
* IGN-280 biphasic amplitude as float
* Add big-endian devcontainer
* manchester
* fixed the configuration to work with GitHub Codespaces. The changes use cross-compilation with QEMU emulation instead of trying to use a native s390x container.
* manchester
* Made manchester work for big-endian
* Some updates to the container
* Manchester big-endian support
* Cleanup
* Manchester big-endian support
* add sourcedirectory
* Enable running with ctest
* Manchester big-endian support
* Update documentation
* Manchester big-endian support
* QA
* Manchester big-endian support
* QA
* Enable testing with ctest with cross-compiler (#5)
* Enable testing with ctest and with cross-compiler
* Clean up includes in manchester.h
---------
Co-authored-by: Timon Zijnge <timon.zijnge@imec.nl>
---------
Co-authored-by: Timon Zijnge <timon.zijnge@imec.nl>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
* Print test names at test time (#1343)
* Adjustments in tuple.h from review
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Fix ETL_HAS_CONSTEXPR_ENDIANESS in unaligned_type.h
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Fix etl::optional for deleted copy constructors
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Add permutation functions
* Refactor permutation to use etl::less
* Add test for next_permutation where begin == end
* Update code to avoid multiple bind1st objects in loop
* Remove duplicate is_partitioned test case
Removed the duplicate is_partitioned test case from the test suite.
---------
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Added missing files from VS2022 project
* Added global data() overloads to complement etl::size()
* Added C++03 compatible implementation of etl::is_convertible
* Updated etl::span to more closely align with std::span
* Fix etl::rotate (#1327)
Per the C++ standard, std::rotate returns first + (last - middle):
* When first == middle, return last
* When middle == last, return first
* Fix greater_equal and less_equal (#1331)
* Align comparison operators (#1330)
In functional.h, the comparison operators for equal_to and not_equal_to
mismatch between the actual comparison execution and the type inference
for the return type. This change adjusts it by using the same operator==()
in the return type inference as used in the comparison execution.
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add missing tests (#1321)
* Add missing tests
* Typo fixes
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add ETL_FORMAT_NO_FLOATING_POINT control macro for etl::format (#1329)
When ETL_FORMAT_NO_FLOATING_POINT is defined, all floating-point formatting support (float, double, long double) is excluded from etl::format. This reduces code size on targets that do not require floating-point formatting.
Guarded sections:
- #include <cmath>
- float/double/long double in supported_format_types variant
- float/double/long double constructors in basic_format_arg
- format_floating_* functions and format_aligned_floating
- formatter<float>, formatter<double>, formatter<long double>
- Floating-point test cases in test_format.cpp
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
# Conflicts:
# include/etl/platform.h
* Manchester documentation (#1325)
* manchester
* Added manchester code and test
* manchester
* Formatting and added missing file
* manchester
* Some functions can only be constexpr since C++14
* manchester
* Manchester decode and some refactoring
* manchester
* Added some missing typenames
* manchester
* constexpr void function not allowed in C++11
* manchester
* condition on static_assert tests
* manchester
* revert CMakeLists.txt
* Using ETL_STATIC_ASSERT
* Some cleanup
* manchester
* Added static_assert message
* manchester
* Added compile time tests
* manchester
* Added invert manchester
* Some refactoring
* manchester
* Disable test for now
* Move ETL_NODISCARD before static
* manchester
* Test for valid_span
* manchester
* Remove redundant (?) storage specifiers for template specializations. Storage specifier already given in base template
* manchester
* refactoring to get rid of specialized template functions in template class
* manchester
* cleanup
* manchester
* Added documentation comments
* Some refactoring
* manchester
* introducing namespace detail_manchester
* manchester
* Some refactoring
* Update tests
* manchester
* Some refactoring
* Removed possible undefined behavior by refactoring encode_span
* constexpr version of encode_span
* Static assertion for rare case where code doesn't work because CHAR_BIT is not the same as the number of bits in uint_least8_t
* manchester
* renamed valid to is_valid
* manchester
* renamed is_valid_span to is_valid
* Using etl exceptions in ETL_ASSERT
* manchester
* Removed _fast functions
* merged encode_in_place with encode and decode_in_place with decode
* removed _span to create normal overloads of encode and decode for span
* Some renaming and minor refactoring
* manchester
* Fix build issues
* manchester
* Conditionally compile manchester_decoded
* Update test_manchester.cpp
Removed redundant semicolon
* #1258 Manchester coding
* Formatting
* consistency: hex literals with lower case 0x
* #1258 Manchester coding
* Moved copyright to top of file
* Make constexpr encode/decode span functions equal for little and big endian platforms
* #1258 Manchester coding
* Added missing include
* Added missing 8bit/64bit guards
* Fixed is_valid for big endian platforms
* #1258 Manchester coding
* private memcpy alias
* #1258 Manchester coding
* Review comments
* #1258 Manchester coding
* Cleanup
* Fix build error
* #1258 Manchester coding
* Add manchester documentation
* #1258 Manchester coding
* Preparation for GitHub pages
* #1324 Manchester documentation
* Some small fixes
---------
Co-authored-by: Timon Zijnge <timon.zijnge@imec.nl>
* Moved and split has_size_and_data in span.h to has_size & has_data in type_traits.h
* Removed has_size_and_data traits, and move to type_traits.h
Added ETL_ASSERT for for fixed extent constructors from iterator range and begin/size
* Added macro ETL_NOEXCEPT_IF that takes a compile time boolean expression
* Changed two fixed span constructors to ETL_CONSTEXPR14 due to ETL_ASSERT in the constructor bodies
Added ETL_NOEXCEPT_IF for simpler boolean conditions
Added tests for construction from mismatched sizes
* Added definition for ETL_NOEXCEPT_IF in no C++11 path
* Changes to disable construction from rvalue temporaries
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: Niu Zhihong <zhihong@nzhnb.com>
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: Timon Zijnge <47081647+tzijnge@users.noreply.github.com>
Co-authored-by: Timon Zijnge <timon.zijnge@imec.nl>
* Updated message handling to be worst case O(logN)
* Copied optimised message handling from etl::fsm
* Updated fsm generator
* Updated message_router generator
* Added optimised accepts() member function
* Modified comment, as the FSM doesn't support a successor
* Updated version and release notes
* Hotfix/etl multiset iterator invalidation during erase leads to incorrect sorted order in depth first traversal (#1317)
* Fixed issue for both multiset and multimap
* Added std::is_sorted checks to all map/set tests
* Updated with coderabbit suggestions
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Updated release notes and version
* Changed std::is_same to etl::is_same in struct type_list_is_unique (#1320)
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Updated release notes and version
* Fix etl::rotate (#1327)
Per the C++ standard, std::rotate returns first + (last - middle):
* When first == middle, return last
* When middle == last, return first
* Added missing files from VS2022 project
* Fix greater_equal and less_equal (#1331)
* Align comparison operators (#1330)
In functional.h, the comparison operators for equal_to and not_equal_to
mismatch between the actual comparison execution and the type inference
for the return type. This change adjusts it by using the same operator==()
in the return type inference as used in the comparison execution.
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add missing tests (#1321)
* Add missing tests
* Typo fixes
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add ETL_FORMAT_NO_FLOATING_POINT control macro for etl::format (#1329)
When ETL_FORMAT_NO_FLOATING_POINT is defined, all floating-point formatting support (float, double, long double) is excluded from etl::format. This reduces code size on targets that do not require floating-point formatting.
Guarded sections:
- #include <cmath>
- float/double/long double in supported_format_types variant
- float/double/long double constructors in basic_format_arg
- format_floating_* functions and format_aligned_floating
- formatter<float>, formatter<double>, formatter<long double>
- Floating-point test cases in test_format.cpp
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Manchester documentation (#1325)
* manchester
* Added manchester code and test
* manchester
* Formatting and added missing file
* manchester
* Some functions can only be constexpr since C++14
* manchester
* Manchester decode and some refactoring
* manchester
* Added some missing typenames
* manchester
* constexpr void function not allowed in C++11
* manchester
* condition on static_assert tests
* manchester
* revert CMakeLists.txt
* Using ETL_STATIC_ASSERT
* Some cleanup
* manchester
* Added static_assert message
* manchester
* Added compile time tests
* manchester
* Added invert manchester
* Some refactoring
* manchester
* Disable test for now
* Move ETL_NODISCARD before static
* manchester
* Test for valid_span
* manchester
* Remove redundant (?) storage specifiers for template specializations. Storage specifier already given in base template
* manchester
* refactoring to get rid of specialized template functions in template class
* manchester
* cleanup
* manchester
* Added documentation comments
* Some refactoring
* manchester
* introducing namespace detail_manchester
* manchester
* Some refactoring
* Update tests
* manchester
* Some refactoring
* Removed possible undefined behavior by refactoring encode_span
* constexpr version of encode_span
* Static assertion for rare case where code doesn't work because CHAR_BIT is not the same as the number of bits in uint_least8_t
* manchester
* renamed valid to is_valid
* manchester
* renamed is_valid_span to is_valid
* Using etl exceptions in ETL_ASSERT
* manchester
* Removed _fast functions
* merged encode_in_place with encode and decode_in_place with decode
* removed _span to create normal overloads of encode and decode for span
* Some renaming and minor refactoring
* manchester
* Fix build issues
* manchester
* Conditionally compile manchester_decoded
* Update test_manchester.cpp
Removed redundant semicolon
* #1258 Manchester coding
* Formatting
* consistency: hex literals with lower case 0x
* #1258 Manchester coding
* Moved copyright to top of file
* Make constexpr encode/decode span functions equal for little and big endian platforms
* #1258 Manchester coding
* Added missing include
* Added missing 8bit/64bit guards
* Fixed is_valid for big endian platforms
* #1258 Manchester coding
* private memcpy alias
* #1258 Manchester coding
* Review comments
* #1258 Manchester coding
* Cleanup
* Fix build error
* #1258 Manchester coding
* Add manchester documentation
* #1258 Manchester coding
* Preparation for GitHub pages
* #1324 Manchester documentation
* Some small fixes
---------
Co-authored-by: Timon Zijnge <timon.zijnge@imec.nl>
* Changes from review of algorithm.h on development branch (#1340)
* Add missing constexpr in algorithm.h
* Fix call of nth_element
2nd argument (nth) was missing
* Replace partition point with O(log(N)) algorithm
The C++ standard defines O(log(N)) calls of predicate as the
complexity of partition_point(). The old algorithm was linear.
* Use predicate in calculation of is_permutation consistently
In case of predicate not equal_to, the calculation previously
returned wron results
* Omit swap in selection_sort if iterators are equal
* Use difference_type in rotate_general() instead of int
* Typo fix in algorithm.h
* Simplifications in algorithm.h
Application of plain refactoring by keeping semantics
* Guard against past-end iterator in etl::rotate()
And fix scope of rotate_right_by_one for etl::rotate()
* Support empty ranges in selection_sort
* Add tests for swap_ranges
* Add tests for binary_search
* Add tests for find_end
* Add tests for accumulate
* Add tests for move_s
* Added tests for is_heap and sort_heap
* Remove early exit for empty input
* Add adjacent_find
* Add unique
* Add unique_copy
* Add merge
* Add inplace_merge
* Add partial_sort
* Add partial_sort_copy
* copilot review change
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: Niu Zhihong <zhihong@nzhnb.com>
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: Timon Zijnge <47081647+tzijnge@users.noreply.github.com>
Co-authored-by: Timon Zijnge <timon.zijnge@imec.nl>
absolute_unsigned() already handled that case correctly. Now adding this
check to absolute() also. It can be caught at compile time now, if in a
constexpr context. Also separating integral and non-integral versions
via enable_if.
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Add missing constexpr in algorithm.h
* Fix call of nth_element
2nd argument (nth) was missing
* Replace partition point with O(log(N)) algorithm
The C++ standard defines O(log(N)) calls of predicate as the
complexity of partition_point(). The old algorithm was linear.
* Use predicate in calculation of is_permutation consistently
In case of predicate not equal_to, the calculation previously
returned wron results
* Omit swap in selection_sort if iterators are equal
* Use difference_type in rotate_general() instead of int
* Typo fix in algorithm.h
* Simplifications in algorithm.h
Application of plain refactoring by keeping semantics
* Guard against past-end iterator in etl::rotate()
And fix scope of rotate_right_by_one for etl::rotate()
* Support empty ranges in selection_sort
* Add tests for swap_ranges
* Add tests for binary_search
* Add tests for find_end
* Add tests for accumulate
* Add tests for move_s
* Added tests for is_heap and sort_heap
* Remove early exit for empty input
* Add adjacent_find
* Add unique
* Add unique_copy
* Add merge
* Add inplace_merge
* Add partial_sort
* Add partial_sort_copy
When ETL_FORMAT_NO_FLOATING_POINT is defined, all floating-point formatting support (float, double, long double) is excluded from etl::format. This reduces code size on targets that do not require floating-point formatting.
Guarded sections:
- #include <cmath>
- float/double/long double in supported_format_types variant
- float/double/long double constructors in basic_format_arg
- format_floating_* functions and format_aligned_floating
- formatter<float>, formatter<double>, formatter<long double>
- Floating-point test cases in test_format.cpp
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Fixed issue for both multiset and multimap
* Added std::is_sorted checks to all map/set tests
* Updated with coderabbit suggestions
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>