| #include <iostream> |
| #include <memory> |
| #include <type_traits> |
| #include <utility> |
| #include <vector> |
| |
| #include <cmext/algorithm> |
| |
| namespace { |
| |
| int failed = 0; |
| |
| void testAppend() |
| { |
| std::cout << "testAppend()" << std::endl; |
| |
| // ---------------------------------------------------- |
| // cm::append(Vector, Iterator, Iterator) |
| { |
| std::vector<int> v1{ 1, 2, 3 }; |
| std::vector<int> v1_ref{ 1, 2, 3, 4, 5, 6 }; |
| std::vector<int> v2{ 4, 5, 6 }; |
| std::vector<int> v2_ref{ 4, 5, 6 }; |
| |
| cm::append(v1, v2.begin(), v2.end()); |
| |
| if (v1 != v1_ref || v2 != v2_ref) { |
| ++failed; |
| } |
| } |
| |
| // ---------------------------------------------------- |
| // cm::append(Vector, Range) |
| { |
| std::vector<int> v1{ 1, 2, 3 }; |
| std::vector<int> v1_ref{ 1, 2, 3, 4, 5, 6 }; |
| std::vector<int> v2{ 4, 5, 6 }; |
| std::vector<int> v2_ref{ 4, 5, 6 }; |
| |
| cm::append(v1, v2); |
| |
| if (v1 != v1_ref || v2 != v2_ref) { |
| ++failed; |
| } |
| } |
| |
| // ---------------------------------------------------- |
| // cm::append(Vector<*>, Vector<unique_ptr>) |
| { |
| std::vector<int*> v1{ new int(1), new int(2), new int(3) }; |
| std::vector<int*> v1_ref = v1; |
| std::vector<std::unique_ptr<int>> v2; |
| |
| v2.emplace_back(new int(4)); |
| v2.emplace_back(new int(5)); |
| v2.emplace_back(new int(6)); |
| |
| cm::append(v1, v2); |
| |
| if (v1.size() == 6 && v2.size() == 3) { |
| for (int i = 0; i < 3; i++) { |
| if (v1[i] != v1_ref[i]) { |
| ++failed; |
| break; |
| } |
| } |
| for (int i = 0; i < 3; i++) { |
| if (v1[i + 3] != v2[i].get()) { |
| ++failed; |
| break; |
| } |
| } |
| } else { |
| ++failed; |
| } |
| |
| // free memory to please memory sanitizer |
| delete v1[0]; |
| delete v1[1]; |
| delete v1[2]; |
| } |
| |
| // ---------------------------------------------------- |
| // cm::append(Vector<unique_ptr>, Vector<unique_ptr>) |
| { |
| std::vector<std::unique_ptr<int>> v1; |
| std::vector<std::unique_ptr<int>> v2; |
| |
| v1.emplace_back(new int(1)); |
| v1.emplace_back(new int(2)); |
| v1.emplace_back(new int(3)); |
| |
| v2.emplace_back(new int(4)); |
| v2.emplace_back(new int(5)); |
| v2.emplace_back(new int(6)); |
| |
| cm::append(v1, std::move(v2)); |
| |
| if (v1.size() == 6 && v2.empty()) { |
| for (int i = 0; i < 6; i++) { |
| if (*v1[i] != i + 1) { |
| ++failed; |
| break; |
| } |
| } |
| } else { |
| ++failed; |
| } |
| } |
| } |
| } |
| |
| int testCMExtAlgorithm(int /*unused*/, char* /*unused*/[]) |
| { |
| testAppend(); |
| |
| return failed; |
| } |