/* 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 void __stl_vector_constructor_destructor_operator_equal_assign() { std::vector v1; assert(v1.empty()); assert(v1.size() == 0); assert(v1.capacity() == 0); std::vector v2(10); assert(!v2.empty()); assert(v2.size() == 10); assert(v2.capacity() == 10); std::vector v3(10, 5); assert(!v3.empty()); assert(v3.size() == 10); assert(v3.capacity() == 10); std::vector v4(v3); assert(!v4.empty()); assert(v4.size() == 10); assert(v4.capacity() == 10); std::vector v5 = v4; assert(!v5.empty()); assert(v5.size() == 10); assert(v5.capacity() == 10); std::vector v6; v6 = v5; assert(!v6.empty()); assert(v6.size() == 10); assert(v6.capacity() == 10); std::vector v7; v7.assign(v6.begin(), v6.end()); assert(!v7.empty()); assert(v7.size() == 10); assert(v7.capacity() == 10); } void __stl_vector_at_operator_array_front_back_data() { std::vector v1(10, 5); assert(v1.at(0) == 5); assert(v1.at(9) == 5); assert(v1[0] == 5); assert(v1[9] == 5); assert(v1.front() == 5); assert(v1.back() == 5); assert(v1.data() != nullptr); } void __stl_vector_begin_cbegin_end_cend() { std::vector v1(10, 5); assert(*v1.begin() == 5); assert(*v1.cbegin() == 5); assert(*v1.end() == 0); assert(*v1.cend() == 0); } void __stl_vector_clear_insert_emplace_erase_push_back_emplace_back_pop_back_resize_swap() { std::vector v1(10, 5); v1.clear(); assert(v1.empty()); assert(v1.size() == 0); assert(v1.capacity() == 10); v1.insert(v1.begin(), 5); assert(v1.size() == 1); assert(v1[0] == 5); v1.emplace(v1.begin(), 10); assert(v1.size() == 2); assert(v1[0] == 10); assert(v1[1] == 5); v1.erase(v1.begin()); assert(v1.size() == 1); assert(v1[0] == 5); v1.push_back(10); assert(v1.size() == 2); assert(v1[1] == 10); v1.emplace_back(15); assert(v1.size() == 3); assert(v1[2] == 15); v1.pop_back(); assert(v1.size() == 2); assert(v1[1] == 10); v1.resize(5); assert(v1.size() == 5); assert(v1[1] == 10); std::vector v2(10, 5); v1.swap(v2); assert(v1.size() == 10); assert(v2.size() == 5); } void __stl_vector_reverse_iterators() { std::vector v1 = {1, 2, 3, 4, 5}; // Test rbegin and rend std::vector::reverse_iterator rit; std::vector::const_reverse_iterator crit; int i = 0; for (rit = v1.rbegin(); rit != v1.rend(); ++rit) { assert(*rit == 5 - i); i++; } int j = 0; for (crit = v1.crbegin(); crit != v1.crend(); ++crit) { assert(*crit == 5 - j); j++; } } void test_stl_vector() { debug("std::vector ..."); debug("std::vector constructor, destructor, operator=, assign"); __stl_vector_constructor_destructor_operator_equal_assign(); debug("std::vector at, operator[], front, back, data"); __stl_vector_at_operator_array_front_back_data(); debug("std::vector begin, cbegin, end, cend"); __stl_vector_begin_cbegin_end_cend(); debug("std::vector clear, insert, emplace, erase, push_back, emplace_back, pop_back, resize, swap"); __stl_vector_clear_insert_emplace_erase_push_back_emplace_back_pop_back_resize_swap(); debug("std::vector OK"); } #endif // DEBUG