added most basic manual tests for const_list

This commit is contained in:
cyborg1811m 2024-03-09 22:26:06 +01:00
parent fcecffd3c7
commit 8dcbf36b87
2 changed files with 168 additions and 0 deletions

View File

@ -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)

166
test/test_const_list.cpp Normal file
View File

@ -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);
}