mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-07-02 14:04:20 +00:00
fix recursion depth: min_element, max_element, minmax_element
This commit is contained in:
parent
86f68671a1
commit
1c085cb707
10 changed files with 539 additions and 17 deletions
53
libs/algorithm/test/max.cpp
Normal file
53
libs/algorithm/test/max.cpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef SPROUT_LIBS_ALGORITHM_TEST_MAX_CPP
|
||||
#define SPROUT_LIBS_ALGORITHM_TEST_MAX_CPP
|
||||
|
||||
#include <sprout/algorithm/max.hpp>
|
||||
#include <sprout/array.hpp>
|
||||
#include <testspr/tools.hpp>
|
||||
|
||||
namespace testspr {
|
||||
static void algorithm_max_test() {
|
||||
using namespace sprout;
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto arr1 = array<int, 2>{{-1, 1}};
|
||||
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max(
|
||||
arr1[0],
|
||||
arr1[1]
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[1]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max(
|
||||
arr1[1],
|
||||
arr1[0]
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[1]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max(
|
||||
arr1[0],
|
||||
arr1[1],
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[1]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max(
|
||||
arr1[1],
|
||||
arr1[0],
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
#ifndef TESTSPR_CPP_INCLUDE
|
||||
# define TESTSPR_TEST_FUNCTION testspr::algorithm_max_test
|
||||
# include <testspr/include_main.hpp>
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_LIBS_ALGORITHM_TEST_MAX_CPP
|
54
libs/algorithm/test/max_element.cpp
Normal file
54
libs/algorithm/test/max_element.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
#ifndef SPROUT_LIBS_ALGORITHM_TEST_MAX_ELEMENT_CPP
|
||||
#define SPROUT_LIBS_ALGORITHM_TEST_MAX_ELEMENT_CPP
|
||||
|
||||
#include <sprout/algorithm/max_element.hpp>
|
||||
#include <sprout/array.hpp>
|
||||
#include <sprout/container.hpp>
|
||||
#include <testspr/tools.hpp>
|
||||
|
||||
namespace testspr {
|
||||
static void algorithm_max_element_test() {
|
||||
using namespace sprout;
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto arr1 = array<int, 10>{{6, 5, 7, 4, 8, 3, 9, 2, 10, 1}};
|
||||
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::end(arr1)
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 8);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::begin(arr1) + 5
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 4);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::end(arr1),
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 8);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::max_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::begin(arr1) + 5,
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
#ifndef TESTSPR_CPP_INCLUDE
|
||||
# define TESTSPR_TEST_FUNCTION testspr::algorithm_max_element_test
|
||||
# include <testspr/include_main.hpp>
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_LIBS_ALGORITHM_TEST_MAX_ELEMENT_CPP
|
53
libs/algorithm/test/min.cpp
Normal file
53
libs/algorithm/test/min.cpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef SPROUT_LIBS_ALGORITHM_TEST_MIN_CPP
|
||||
#define SPROUT_LIBS_ALGORITHM_TEST_MIN_CPP
|
||||
|
||||
#include <sprout/algorithm/min.hpp>
|
||||
#include <sprout/array.hpp>
|
||||
#include <testspr/tools.hpp>
|
||||
|
||||
namespace testspr {
|
||||
static void algorithm_min_test() {
|
||||
using namespace sprout;
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto arr1 = array<int, 2>{{-1, 1}};
|
||||
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min(
|
||||
arr1[0],
|
||||
arr1[1]
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[0]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min(
|
||||
arr1[1],
|
||||
arr1[0]
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[0]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min(
|
||||
arr1[0],
|
||||
arr1[1],
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[0]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min(
|
||||
arr1[1],
|
||||
arr1[0],
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == arr1[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
#ifndef TESTSPR_CPP_INCLUDE
|
||||
# define TESTSPR_TEST_FUNCTION testspr::algorithm_min_test
|
||||
# include <testspr/include_main.hpp>
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_LIBS_ALGORITHM_TEST_MIN_CPP
|
54
libs/algorithm/test/min_element.cpp
Normal file
54
libs/algorithm/test/min_element.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
#ifndef SPROUT_LIBS_ALGORITHM_TEST_MIN_ELEMENT_CPP
|
||||
#define SPROUT_LIBS_ALGORITHM_TEST_MIN_ELEMENT_CPP
|
||||
|
||||
#include <sprout/algorithm/min_element.hpp>
|
||||
#include <sprout/array.hpp>
|
||||
#include <sprout/container.hpp>
|
||||
#include <testspr/tools.hpp>
|
||||
|
||||
namespace testspr {
|
||||
static void algorithm_min_element_test() {
|
||||
using namespace sprout;
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto arr1 = array<int, 10>{{6, 5, 7, 4, 8, 3, 9, 2, 10, 1}};
|
||||
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::end(arr1)
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 9);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::begin(arr1) + 5
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 3);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::end(arr1),
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 9);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::min_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::begin(arr1) + 5,
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result == sprout::begin(arr1) + 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
#ifndef TESTSPR_CPP_INCLUDE
|
||||
# define TESTSPR_TEST_FUNCTION testspr::algorithm_min_element_test
|
||||
# include <testspr/include_main.hpp>
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_LIBS_ALGORITHM_TEST_MIN_ELEMENT_CPP
|
57
libs/algorithm/test/minmax.cpp
Normal file
57
libs/algorithm/test/minmax.cpp
Normal file
|
@ -0,0 +1,57 @@
|
|||
#ifndef SPROUT_LIBS_ALGORITHM_TEST_MINMAX_CPP
|
||||
#define SPROUT_LIBS_ALGORITHM_TEST_MINMAX_CPP
|
||||
|
||||
#include <sprout/algorithm/minmax.hpp>
|
||||
#include <sprout/array.hpp>
|
||||
#include <testspr/tools.hpp>
|
||||
|
||||
namespace testspr {
|
||||
static void algorithm_minmax_test() {
|
||||
using namespace sprout;
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto arr1 = array<int, 2>{{-1, 1}};
|
||||
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax(
|
||||
arr1[0],
|
||||
arr1[1]
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == arr1[0]);
|
||||
TESTSPR_BOTH_ASSERT(result.second == arr1[1]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax(
|
||||
arr1[1],
|
||||
arr1[0]
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == arr1[0]);
|
||||
TESTSPR_BOTH_ASSERT(result.second == arr1[1]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax(
|
||||
arr1[0],
|
||||
arr1[1],
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == arr1[0]);
|
||||
TESTSPR_BOTH_ASSERT(result.second == arr1[1]);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax(
|
||||
arr1[1],
|
||||
arr1[0],
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == arr1[0]);
|
||||
TESTSPR_BOTH_ASSERT(result.second == arr1[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
#ifndef TESTSPR_CPP_INCLUDE
|
||||
# define TESTSPR_TEST_FUNCTION testspr::algorithm_minmax_test
|
||||
# include <testspr/include_main.hpp>
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_LIBS_ALGORITHM_TEST_MINMAX_CPP
|
58
libs/algorithm/test/minmax_element.cpp
Normal file
58
libs/algorithm/test/minmax_element.cpp
Normal file
|
@ -0,0 +1,58 @@
|
|||
#ifndef SPROUT_LIBS_ALGORITHM_TEST_MINMAX_ELEMENT_CPP
|
||||
#define SPROUT_LIBS_ALGORITHM_TEST_MINMAX_ELEMENT_CPP
|
||||
|
||||
#include <sprout/algorithm/minmax_element.hpp>
|
||||
#include <sprout/array.hpp>
|
||||
#include <sprout/container.hpp>
|
||||
#include <testspr/tools.hpp>
|
||||
|
||||
namespace testspr {
|
||||
static void algorithm_minmax_element_test() {
|
||||
using namespace sprout;
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto arr1 = array<int, 10>{{6, 5, 7, 4, 8, 3, 9, 2, 10, 1}};
|
||||
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::end(arr1)
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == sprout::begin(arr1) + 9);
|
||||
TESTSPR_BOTH_ASSERT(result.second == sprout::begin(arr1) + 8);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::begin(arr1) + 5
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == sprout::begin(arr1) + 3);
|
||||
TESTSPR_BOTH_ASSERT(result.second == sprout::begin(arr1) + 4);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::end(arr1),
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == sprout::begin(arr1) + 9);
|
||||
TESTSPR_BOTH_ASSERT(result.second == sprout::begin(arr1) + 8);
|
||||
}
|
||||
{
|
||||
SPROUT_STATIC_CONSTEXPR auto result = sprout::minmax_element(
|
||||
sprout::begin(arr1),
|
||||
sprout::begin(arr1) + 5,
|
||||
testspr::less<int>()
|
||||
);
|
||||
TESTSPR_BOTH_ASSERT(result.first == sprout::begin(arr1) + 3);
|
||||
TESTSPR_BOTH_ASSERT(result.second == sprout::begin(arr1) + 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
#ifndef TESTSPR_CPP_INCLUDE
|
||||
# define TESTSPR_TEST_FUNCTION testspr::algorithm_minmax_element_test
|
||||
# include <testspr/include_main.hpp>
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_LIBS_ALGORITHM_TEST_MINMAX_ELEMENT_CPP
|
|
@ -34,6 +34,12 @@
|
|||
#include "./includes.cpp"
|
||||
#include "./is_heap.cpp"
|
||||
#include "./is_heap_until.cpp"
|
||||
#include "./min.cpp"
|
||||
#include "./max.cpp"
|
||||
#include "./minmax.cpp"
|
||||
#include "./min_element.cpp"
|
||||
#include "./max_element.cpp"
|
||||
#include "./minmax_element.cpp"
|
||||
|
||||
#ifdef TESTSPR_CPP_INCLUDE_DISABLE_SPROUT_LIBS_ALGORITHM_TEST_NON_MODIFYIING_CPP
|
||||
# undef TESTSPR_CPP_INCLUDE
|
||||
|
@ -69,6 +75,12 @@ namespace testspr {
|
|||
testspr::algorithm_includes_test();
|
||||
testspr::algorithm_is_heap_test();
|
||||
testspr::algorithm_is_heap_until_test();
|
||||
testspr::algorithm_min_test();
|
||||
testspr::algorithm_max_test();
|
||||
testspr::algorithm_minmax_test();
|
||||
testspr::algorithm_min_element_test();
|
||||
testspr::algorithm_max_element_test();
|
||||
testspr::algorithm_minmax_element_test();
|
||||
}
|
||||
} // namespace testspr
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue