38#include <gtest/gtest.h>
83 for (
int x : {5, 2, 8, 1, 9, 3, 7, 4, 6, 0})
104 int values[] = {5, 2, 8, 1, 9, 3, 7, 4, 6, 0};
105 for (
size_t i = 0; i < 10; ++i)
127 int values[] = {5, 2, 8, 1, 9, 3, 7, 4, 6, 0};
162 auto sorted =
sort(list, std::greater<int>());
191 list.for_each([&prev](
int x) {
254 auto sorted =
sort(list, std::greater<int>());
319 for (
size_t i = 1; i < arr.size(); ++i)
370 for (
size_t i = 1; i < arr.size(); ++i)
380 std::vector<int> v = {5, 2, 8, 1, 9};
389 std::vector<int> v = {5, 2, 8, 1, 9};
396 std::deque<int> d = {5, 2, 8, 1, 9};
403 std::vector<int> empty;
448 auto r =
ranks(list);
462 auto r =
ranks(list);
472 auto r =
ranks(empty);
490 for (
size_t i = 0; i < 5; ++i)
491 arr(i) =
static_cast<int>(i);
495 for (
size_t i = 0; i < 5; ++i)
503 for (
size_t i = 0; i < 5; ++i)
504 arr(i) =
static_cast<int>(4 - i);
508 for (
size_t i = 0; i < 5; ++i)
581 std::vector<int> keys = {3, 1, 2};
582 std::vector<std::string>
names = {
"Charlie",
"Alice",
"Bob"};
586 EXPECT_EQ(keys, (std::vector<int>{1, 2, 3}));
587 EXPECT_EQ(
names, (std::vector<std::string>{
"Alice",
"Bob",
"Charlie"}));
592 std::vector<int>
ids = {3, 1, 2};
593 std::vector<std::string>
names = {
"Charlie",
"Alice",
"Bob"};
594 std::vector<int>
ages = {30, 25, 28};
599 EXPECT_EQ(
names, (std::vector<std::string>{
"Alice",
"Bob",
"Charlie"}));
605 std::vector<int> keys = {1, 2, 3};
606 std::vector<char> values = {
'a',
'b',
'c'};
610 EXPECT_EQ(keys, (std::vector<int>{3, 2, 1}));
611 EXPECT_EQ(values, (std::vector<char>{
'c',
'b',
'a'}));
616 std::vector<int> keys;
617 std::vector<int> values;
628 std::vector<int> keys = {42};
629 std::vector<std::string> values = {
"answer"};
634 EXPECT_EQ(values, (std::vector<std::string>{
"answer"}));
639 std::vector<int> keys = {2, 1, 2, 1, 2};
640 std::vector<char> aux = {
'a',
'b',
'c',
'd',
'e'};
644 EXPECT_EQ(keys, (std::vector<int>{1, 1, 2, 2, 2}));
646 EXPECT_EQ(aux, (std::vector<char>{
'b',
'd',
'a',
'c',
'e'}));
651 std::vector<int> keys = {1, 2, 3, 4, 5};
652 std::vector<int> values = {10, 20, 30, 40, 50};
656 EXPECT_EQ(keys, (std::vector<int>{1, 2, 3, 4, 5}));
657 EXPECT_EQ(values, (std::vector<int>{10, 20, 30, 40, 50}));
662 std::vector<int> keys = {5, 4, 3, 2, 1};
663 std::vector<int> values = {50, 40, 30, 20, 10};
667 EXPECT_EQ(keys, (std::vector<int>{1, 2, 3, 4, 5}));
668 EXPECT_EQ(values, (std::vector<int>{10, 20, 30, 40, 50}));
673 std::vector<int> keys = {1, 2};
674 std::vector<int> values = {10};
677 std::invalid_argument);
736 for (
int i = 999; i >= 0; --i)
749 for (
size_t i = 0; i < 1000; ++i)
750 arr(i) =
static_cast<int>(999 - i);
754 for (
size_t i = 1; i < arr.
size(); ++i)
761 for (
int i = 0; i < 100; ++i)
789 arr(0) = 1; arr(1) = 2; arr(2) = 3; arr(3) = 4; arr(4) = 5;
793 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)
Append a new item by copy.
T & get_last() const
Return the last item of the list.
T & get_first() const
Return the first item of the list.
void empty() noexcept
empty the list
constexpr bool is_empty() const noexcept
Return true if list is empty.
size_t size() const noexcept
Count the number of elements of the list.
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)
void for_each(Operation &operation)
Traverse all the container and performs an operation on each element.
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.
void in_place_multisort_arrays(Cmp cmp, C &first, Args &... args)
Sorts multiple arrays in place, using the first array as the key.
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.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Lazy and scalable dynamic array implementation.
Dynamic doubly linked list implementation.
Alias for htlist.H (DynList implementation).