added most basic manual tests for const_list
This commit is contained in:
parent
fcecffd3c7
commit
8dcbf36b87
|
|
@ -12,3 +12,5 @@ target_include_directories(const_container INTERFACE "${CMAKE_CURRENT_LIST_DIR}/
|
|||
|
||||
add_executable(const_container_test test/test_main.cpp)
|
||||
target_link_libraries(const_container_test PRIVATE const_container)
|
||||
add_executable(const_list_test test/test_const_list.cpp)
|
||||
target_link_libraries(const_list_test PRIVATE const_container)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,166 @@
|
|||
//
|
||||
// Created by Patrick Maschek on 01.02.2024.
|
||||
//
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include <const_list.h>
|
||||
|
||||
class TestA : public cc::const_list_node<TestA> {
|
||||
static int si;
|
||||
|
||||
public:
|
||||
int i = 0;
|
||||
TestA() : i(si++) {}
|
||||
|
||||
auto operator<=>(const TestA& other) const {
|
||||
return i <=> other.i;
|
||||
}
|
||||
};
|
||||
int TestA::si = 0;
|
||||
|
||||
void print_list(const cc::const_list<TestA>& list) {
|
||||
std::cout << "[ ";
|
||||
for (const auto& value : list) {
|
||||
std::cout << value.i << " ";
|
||||
}
|
||||
std::cout << "] (size: " << list.size() << ")" << std::endl;
|
||||
}
|
||||
|
||||
void print_list(cc::const_list<TestA>::iterator start, cc::const_list<TestA>::iterator end) {
|
||||
std::cout << "[ ";
|
||||
for (; start != end; ++start) {
|
||||
std::cout << start->i << " ";
|
||||
}
|
||||
std::cout << "]";
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
std::cout << std::boolalpha;
|
||||
|
||||
TestA arr[20];
|
||||
|
||||
cc::const_list<TestA> list1 = { arr[0], arr[1], arr[2], arr[3] };
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "clearing" << std::endl;
|
||||
list1.clear();
|
||||
|
||||
print_list(list1);
|
||||
std::cout << "list1 empty: " << list1.empty() << "\n\n";
|
||||
|
||||
list1 = { arr[0], arr[1], arr[2] };
|
||||
std::cout << "size: " << list1.size() << "\n";
|
||||
std::cout << "front: " << list1.front().i << "\n";
|
||||
std::cout << "back: " << list1.back().i << "\n";
|
||||
|
||||
std::cout << "insert " << std::endl;
|
||||
list1.insert(++list1.begin(), { arr[5], arr[6] });
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "erase [3,end]: " << std::endl;
|
||||
list1.erase(std::next(list1.begin(), 3), list1.end());
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "erase [1]:" << std::endl;
|
||||
list1.erase(std::next(list1.begin(), 1));
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "push_back([0]), push_front([1]):" << std::endl;
|
||||
list1.push_back(arr[9]);
|
||||
list1.push_front(arr[1]);
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "pop_back, pop_front: " << std::endl;
|
||||
list1.pop_back();
|
||||
list1.pop_front();
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "merge" << std::endl;
|
||||
cc::const_list<TestA> ml = { arr[3], arr[4], arr[7], arr[8] };
|
||||
|
||||
print_list(list1);
|
||||
std::cout << " <- " << "\n";
|
||||
print_list(ml);
|
||||
|
||||
list1.merge(std::move(ml));
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "splice [1]" << std::endl;
|
||||
cc::const_list<TestA> sl = { arr[1], arr[2], arr[10], arr[11], arr[12], arr[13] };
|
||||
|
||||
print_list(list1);
|
||||
std::cout << " <- " << std::next(sl.begin())->i << " from: ";
|
||||
print_list(sl);
|
||||
|
||||
list1.splice(++list1.begin(), sl, std::next(sl.begin()));
|
||||
|
||||
print_list(list1);
|
||||
print_list(sl);
|
||||
|
||||
std::cout << "\n";
|
||||
|
||||
print_list(list1);
|
||||
std::cout << " <- ";
|
||||
print_list(std::next(sl.begin(), 1), std::next(sl.begin(), 3));
|
||||
std::cout << " from: ";
|
||||
print_list(sl);
|
||||
|
||||
list1.splice(list1.begin(), sl, std::next(sl.begin(), 1), std::next(sl.begin(), 3));
|
||||
|
||||
print_list(list1);
|
||||
print_list(sl);
|
||||
|
||||
std::cout << "splice all: " << "\n";
|
||||
print_list(list1);
|
||||
std::cout << " <- ";
|
||||
print_list(sl);
|
||||
std::cout << " from: ";
|
||||
print_list(sl);
|
||||
|
||||
list1.splice(list1.end(), sl);
|
||||
|
||||
print_list(list1);
|
||||
print_list(sl);
|
||||
|
||||
std::cout << "remove: ";
|
||||
print_list(list1);
|
||||
std::cout << "value " << arr[3].i << std::endl;
|
||||
|
||||
list1.remove(arr[3]);
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "\nreverse: ";
|
||||
print_list(list1);
|
||||
|
||||
list1.reverse();
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "unique (no %2): ";
|
||||
print_list(list1);
|
||||
|
||||
list1.unique([](const auto& v1, const auto& v2){ return v2.i > v1.i; });
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "sort: ";
|
||||
print_list(list1);
|
||||
|
||||
list1.sort();
|
||||
|
||||
print_list(list1);
|
||||
|
||||
std::cout << "\n" << "Moving list" << std::endl;
|
||||
cc::const_list<TestA> list2 = std::move(list1);
|
||||
|
||||
print_list(list2);
|
||||
}
|
||||
Loading…
Reference in New Issue