38#include <gtest/gtest.h>
84 for (
int x : {5, 2, 8, 1, 9, 3, 7, 4, 6, 0})
105 int values[] = {5, 2, 8, 1, 9, 3, 7, 4, 6, 0};
106 for (
size_t i = 0; i < 10; ++i)
128 int values[] = {5, 2, 8, 1, 9, 3, 7, 4, 6, 0};
155 sorted.for_each([&prev](
int x) {
163 auto sorted =
sort(list, std::greater<int>());
167 sorted.for_each([&prev](
int x) {
192 list.for_each([&prev](
int x) {
255 auto sorted =
sort(list, std::greater<int>());
258 sorted.for_each([&prev](
int x) {
290 for (
size_t i = 1; i <
sorted.size(); ++i)
298 for (
size_t i = 1; i <
sorted.size(); ++i)
320 for (
size_t i = 1; i < arr.size(); ++i)
356 for (
size_t i = 1; i <
sorted.size(); ++i)
371 for (
size_t i = 1; i < arr.size(); ++i)
381 std::vector<int> v = {5, 2, 8, 1, 9};
390 std::vector<int> v = {5, 2, 8, 1, 9};
397 std::deque<int> d = {5, 2, 8, 1, 9};
404 std::vector<int> empty;
491 for (
size_t i = 0; i < 5; ++i)
492 arr(i) =
static_cast<int>(i);
496 for (
size_t i = 0; i < 5; ++i)
504 for (
size_t i = 0; i < 5; ++i)
505 arr(i) =
static_cast<int>(4 - i);
509 for (
size_t i = 0; i < 5; ++i)
528 std::vector<size_t>
seen(
r.size(), 0);
529 for (
size_t i = 0; i <
r.size(); ++i)
534 for (
size_t k = 0;
k <
seen.size(); ++
k)
538 for (
size_t i = 0; i < arr.
size(); ++i)
539 for (
size_t j = 0; j < arr.
size(); ++j)
613 std::vector<int>
keys = {3, 1, 2};
614 std::vector<std::string>
names = {
"Charlie",
"Alice",
"Bob"};
619 EXPECT_EQ(
names, (std::vector<std::string>{
"Alice",
"Bob",
"Charlie"}));
624 std::vector<int>
ids = {3, 1, 2};
625 std::vector<std::string>
names = {
"Charlie",
"Alice",
"Bob"};
626 std::vector<int>
ages = {30, 25, 28};
631 EXPECT_EQ(
names, (std::vector<std::string>{
"Alice",
"Bob",
"Charlie"}));
637 std::vector<int>
keys = {1, 2, 3};
638 std::vector<char> values = {
'a',
'b',
'c'};
643 EXPECT_EQ(values, (std::vector<char>{
'c',
'b',
'a'}));
648 std::vector<int>
keys;
649 std::vector<int> values;
660 std::vector<int>
keys = {42};
661 std::vector<std::string> values = {
"answer"};
666 EXPECT_EQ(values, (std::vector<std::string>{
"answer"}));
671 std::vector<int>
keys = {2, 1, 2, 1, 2};
672 std::vector<char> aux = {
'a',
'b',
'c',
'd',
'e'};
678 EXPECT_EQ(aux, (std::vector<char>{
'b',
'd',
'a',
'c',
'e'}));
683 std::vector<int>
keys = {1, 2, 3, 4, 5};
684 std::vector<int> values = {10, 20, 30, 40, 50};
689 EXPECT_EQ(values, (std::vector<int>{10, 20, 30, 40, 50}));
694 std::mt19937
rng(123456u);
695 std::uniform_int_distribution<int>
key_dist(0, 5);
699 const size_t n = 100;
700 std::vector<int>
keys(n);
701 std::vector<size_t> pos(n);
702 for (
size_t i = 0; i < n; ++i)
710 for (
size_t i = 1; i < n; ++i)
721 std::mt19937
rng(78910u);
722 std::uniform_int_distribution<int>
key_dist(0, 5);
724 const size_t n = 200;
725 std::vector<int>
keys(n);
726 std::vector<size_t> pos(n);
727 for (
size_t i = 0; i < n; ++i)
735 for (
size_t i = 1; i < n; ++i)
738 std::vector<size_t>
seen(n, 0);
744 for (
size_t k = 0;
k < n; ++
k)
750 std::vector<int>
keys = {5, 4, 3, 2, 1};
751 std::vector<int> values = {50, 40, 30, 20, 10};
756 EXPECT_EQ(values, (std::vector<int>{10, 20, 30, 40, 50}));
761 std::vector<int>
keys = {1, 2};
762 std::vector<int> values = {10};
765 std::invalid_argument);
788 std::vector<int>
keys = {2, 1, 2, 1, 2};
789 std::vector<char> aux = {
'a',
'b',
'c',
'd',
'e'};
794 EXPECT_EQ(aux, (std::vector<char>{
'b',
'd',
'a',
'c',
'e'}));
799 std::vector<int>
keys = {2, 1, 2, 1, 2};
800 std::vector<char> aux = {
'a',
'b',
'c',
'd',
'e'};
811 std::vector<std::string>
keys = {
"banana",
"apple",
"banana",
"apple"};
812 std::vector<int> values = {2, 1, 3, 4};
816 EXPECT_EQ(
keys, (std::vector<std::string>{
"banana",
"banana",
"apple",
"apple"}));
858 for (
int i = 999; i >= 0; --i)
871 for (
size_t i = 0; i < 1000; ++i)
872 arr(i) =
static_cast<int>(999 - i);
876 for (
size_t i = 1; i < arr.
size(); ++i)
883 for (
int i = 0; i < 100; ++i)
889 sorted.for_each([](
int x) {
911 arr(0) = 1; arr(1) = 2; arr(2) = 3; arr(3) = 4; arr(4) = 5;
915 return std::abs(a - 3) < std::abs(b - 3);
High-level sorting functions for Aleph containers.
TEST_F(DynListSortTest, SortReturnsSortedCopy)
Simple dynamic array with automatic resizing and functional operations.
T & append(const T &data)
Append a copy of data
T & touch(const size_t i)
Touch the entry i.
size_t size() const noexcept
Return the current dimension of array.
void reserve(const size_t l, const size_t r)
Allocate a range of entries.
Dynamic doubly linked list with O(1) size and bidirectional access.
T & append(const T &item)
Append a copied item at the end of the list.
Dynamic singly linked list with functional programming support.
T & append(const T &item)
Array< int > build_array(std::initializer_list< int > items)
DynArray< int > build_array(std::initializer_list< int > items)
DynDlist< int > build_list(std::initializer_list< int > items)
DynList< int > build_list(std::initializer_list< int > items)
Main namespace for Aleph-w library functions.
bool is_sorted(const Container< T > &cont, const Compare &cmp=Compare())
Check if a container is sorted in ascending order.
auto pair_ranks(const Array< T > &c)
Computes (value, rank) pairs for each element in an Array.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
DynArray< T > sort(const DynArray< T > &a, Cmp &&cmp=Cmp())
Returns a sorted copy of a DynArray.
DynArray< T > & in_place_sort(DynArray< T > &c, Cmp cmp=Cmp())
Sorts a DynArray in place.
Array< T > build_array(Args ... args)
Array< size_t > ranks(const Array< T > &array)
Computes the rank of each element in an Array.
Container stdsort(const Container &c, Cmp cmp=Cmp())
Sorts an STL-compatible container using std::sort.
void in_place_multisort_arrays(Cmp cmp, const bool stable, C &first, Args &... args)
Sorts multiple arrays in place, using the first array as the key.
Lazy and scalable dynamic array implementation.
Dynamic doubly linked list implementation.
Alias for htlist.H (DynList implementation).