/*
This file is part of Fennix Kernel.
Fennix Kernel is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
Fennix Kernel is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Fennix Kernel. If not, see .
*/
#ifdef DEBUG
#include
#include
#include
void __stl_list_front_back_push_pop_begin_end()
{
std::list l = {7, 5, 16, 8};
l.push_front(25);
l.push_back(13);
auto it = std::find(l.begin(), l.end(), 16);
if (it != l.end())
l.insert(it, 42);
// test if l = { 25, 7, 5, 42, 16, 8, 13, };
assert(l.front() == 25);
assert(l.back() == 13);
l.pop_front();
l.pop_back();
// test if l = { 7, 5, 42, 16, 8, };
assert(l.front() == 7);
assert(l.back() == 8);
l.pop_front();
l.pop_back();
// test if l = { 5, 42, 16, };
assert(l.front() == 5);
assert(l.back() == 16);
l.pop_front();
l.pop_back();
// test if l = { 42, };
assert(l.front() == 42);
assert(l.back() == 42);
}
void __stl_list_assign()
{
std::list characters;
characters.assign(5, 'a');
assert(characters.size() == 5);
for (auto it = characters.begin(); it != characters.end(); ++it)
assert(*it == 'a');
}
void __stl_list_clear_insert_emplace_erase_resize_swap()
{
std::list l = {1, 2, 3, 4, 5};
l.clear();
assert(l.empty());
l.insert(l.begin(), 42);
assert(l.size() == 1);
assert(l.front() == 42);
l.emplace(l.begin(), 13);
assert(l.size() == 2);
assert(l.front() == 13);
l.erase(l.begin());
assert(l.size() == 1);
assert(l.front() == 42);
l.resize(5, 100);
assert(l.size() == 5);
assert(l.back() == 100);
std::list l2 = {10, 20, 30};
l.swap(l2);
assert(l.size() == 3);
assert(l2.size() == 5);
}
void __stl_list_merge_splice_remove_remove_if_reverse_unique_sort()
{
{
std::list l1 = {1, 3, 5};
std::list l2 = {2, 4, 6};
l1.merge(l2);
assert(l1.size() == 6);
assert(l2.empty());
}
{
std::list l3 = {1, 2, 3, 4, 5};
std::list l4 = {10, 20, 30};
auto it = l3.begin();
std::advance(it, 3);
l3.splice(it, l4);
assert(l3.size() == 8);
assert(l4.empty());
l3.remove(3);
assert(l3.size() == 7);
l3.remove_if([](int n)
{ return n < 5; });
assert(l3.size() == 4);
}
{
std::list l5 = {1, 2, 3, 4, 5};
l5.reverse();
assert(l5.front() == 5);
assert(l5.back() == 1);
l5.push_back(1);
l5.remove_if([](int n)
{ return n == 3; });
l5.unique();
assert(l5.size() == 4);
l5.sort();
assert(l5.front() == 1);
assert(l5.back() == 5);
}
}
void test_stl_list()
{
debug("std::list ...");
debug("std::list front, back, push_front, push_back, pop_front, pop_back, begin, end");
__stl_list_front_back_push_pop_begin_end();
debug("std::list assign");
__stl_list_assign();
debug("std::list clear, insert, emplace, erase, resize, swap");
__stl_list_clear_insert_emplace_erase_resize_swap();
debug("std::list merge, splice, remove, remove_if, reverse, unique, sort");
__stl_list_merge_splice_remove_remove_if_reverse_unique_sort();
debug("std::list OK");
}
#endif // DEBUG