From 8dcbf36b8766f2c632dce750da7930734ee9656c Mon Sep 17 00:00:00 2001 From: cyborg1811m Date: Sat, 9 Mar 2024 22:26:06 +0100 Subject: [PATCH] added most basic manual tests for const_list --- CMakeLists.txt | 2 + test/test_const_list.cpp | 166 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 test/test_const_list.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5013c66..7cc33ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/test/test_const_list.cpp b/test/test_const_list.cpp new file mode 100644 index 0000000..74fb679 --- /dev/null +++ b/test/test_const_list.cpp @@ -0,0 +1,166 @@ +// +// Created by Patrick Maschek on 01.02.2024. +// + +#include + +#include + +class TestA : public cc::const_list_node { + 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& 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::iterator start, cc::const_list::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 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 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 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 list2 = std::move(list1); + + print_list(list2); +} \ No newline at end of file