1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // UNSUPPORTED: c++98, c++03 11 12 // <forward_list> 13 14 // template <class... Args> 15 // iterator emplace_after(const_iterator p, Args&&... args); 16 17 #include <forward_list> 18 #include <cassert> 19 20 #include "../../../Emplaceable.h" 21 #include "min_allocator.h" 22 23 int main() 24 { 25 { 26 typedef Emplaceable T; 27 typedef std::forward_list<T> C; 28 typedef C::iterator I; 29 C c; 30 I i = c.emplace_after(c.cbefore_begin()); 31 assert(i == c.begin()); 32 assert(c.front() == Emplaceable()); 33 assert(distance(c.begin(), c.end()) == 1); 34 35 i = c.emplace_after(c.cbegin(), 1, 2.5); 36 assert(i == next(c.begin())); 37 assert(c.front() == Emplaceable()); 38 assert(*next(c.begin()) == Emplaceable(1, 2.5)); 39 assert(distance(c.begin(), c.end()) == 2); 40 41 i = c.emplace_after(next(c.cbegin()), 2, 3.5); 42 assert(i == next(c.begin(), 2)); 43 assert(c.front() == Emplaceable()); 44 assert(*next(c.begin()) == Emplaceable(1, 2.5)); 45 assert(*next(c.begin(), 2) == Emplaceable(2, 3.5)); 46 assert(distance(c.begin(), c.end()) == 3); 47 48 i = c.emplace_after(c.cbegin(), 3, 4.5); 49 assert(i == next(c.begin())); 50 assert(c.front() == Emplaceable()); 51 assert(*next(c.begin(), 1) == Emplaceable(3, 4.5)); 52 assert(*next(c.begin(), 2) == Emplaceable(1, 2.5)); 53 assert(*next(c.begin(), 3) == Emplaceable(2, 3.5)); 54 assert(distance(c.begin(), c.end()) == 4); 55 } 56 { 57 typedef Emplaceable T; 58 typedef std::forward_list<T, min_allocator<T>> C; 59 typedef C::iterator I; 60 C c; 61 I i = c.emplace_after(c.cbefore_begin()); 62 assert(i == c.begin()); 63 assert(c.front() == Emplaceable()); 64 assert(distance(c.begin(), c.end()) == 1); 65 66 i = c.emplace_after(c.cbegin(), 1, 2.5); 67 assert(i == next(c.begin())); 68 assert(c.front() == Emplaceable()); 69 assert(*next(c.begin()) == Emplaceable(1, 2.5)); 70 assert(distance(c.begin(), c.end()) == 2); 71 72 i = c.emplace_after(next(c.cbegin()), 2, 3.5); 73 assert(i == next(c.begin(), 2)); 74 assert(c.front() == Emplaceable()); 75 assert(*next(c.begin()) == Emplaceable(1, 2.5)); 76 assert(*next(c.begin(), 2) == Emplaceable(2, 3.5)); 77 assert(distance(c.begin(), c.end()) == 3); 78 79 i = c.emplace_after(c.cbegin(), 3, 4.5); 80 assert(i == next(c.begin())); 81 assert(c.front() == Emplaceable()); 82 assert(*next(c.begin(), 1) == Emplaceable(3, 4.5)); 83 assert(*next(c.begin(), 2) == Emplaceable(1, 2.5)); 84 assert(*next(c.begin(), 3) == Emplaceable(2, 3.5)); 85 assert(distance(c.begin(), c.end()) == 4); 86 } 87 } 88