void test_rng_3() { int i[3] = {1, 2, 3}; int j[3] = {4, 5, 6}; std::pair<Iter1, Iter2> r = ranges::swap_ranges(as_lvalue(ranges::make_iterator_range(Iter1(i), Iter1(i+3))), Iter2(j)); CHECK(base(r.first) == i+3); CHECK(base(r.second) == j+3); CHECK(i[0] == 4); CHECK(i[1] == 5); CHECK(i[2] == 6); CHECK(j[0] == 1); CHECK(j[1] == 2); CHECK(j[2] == 3); using Sent1 = typename sentinel_type<Iter1>::type; r = ranges::swap_ranges(as_lvalue(ranges::make_iterator_range(Iter1(j), Sent1(j+3))), Iter2(i)); CHECK(base(r.first) == j+3); CHECK(base(r.second) == i+3); CHECK(i[0] == 1); CHECK(i[1] == 2); CHECK(i[2] == 3); CHECK(j[0] == 4); CHECK(j[1] == 5); CHECK(j[2] == 6); }
void test() { { const int N = 1000; int ia[N]; for(int i = 0; i < N; ++i) ia[i] = i; int ib[N] = {0}; std::pair<InIter, OutIter> r = stl2::move_backward(InIter(ia), InIter(ia+N), OutIter(ib+N)); CHECK(base(r.first) == ia+N); CHECK(base(r.second) == ib); for(int i = 0; i < N; ++i) CHECK(ia[i] == ib[i]); } { const int N = 1000; int ia[N]; for(int i = 0; i < N; ++i) ia[i] = i; int ib[N] = {0}; std::pair<InIter, OutIter> r = stl2::move_backward(as_lvalue(stl2::ext::make_range(InIter(ia), InIter(ia+N))), OutIter(ib+N)); CHECK(base(r.first) == ia+N); CHECK(base(r.second) == ib); for(int i = 0; i < N; ++i) CHECK(ia[i] == ib[i]); } }
void test() { { const int N = 1000; int ia[N]; for(int i = 0; i < N; ++i) ia[i] = i; int ib[N] = {0}; std::pair<InIter, OutIter> r = ranges::move(InIter(ia), Sent(ia+N), OutIter(ib)); CHECK(base(r.first) == ia+N); CHECK(base(r.second) == ib+N); for(int i = 0; i < N; ++i) CHECK(ia[i] == ib[i]); } { const int N = 1000; int ia[N]; for(int i = 0; i < N; ++i) ia[i] = i; int ib[N] = {0}; std::pair<InIter, OutIter> r = ranges::move(as_lvalue(ranges::make_iterator_range(InIter(ia), Sent(ia+N))), OutIter(ib)); CHECK(base(r.first) == ia+N); CHECK(base(r.second) == ib+N); for(int i = 0; i < N; ++i) CHECK(ia[i] == ib[i]); } }
void test_rng_4() { int i[3] = {1, 2, 3}; int j[4] = {4, 5, 6, 7}; std::pair<Iter1, Iter2> r = ranges::swap_ranges( as_lvalue(ranges::make_iterator_range(Iter1(i), Iter1(i+3))), as_lvalue(ranges::make_iterator_range(Iter2(j), Iter2(j+4)))); CHECK(base(r.first) == i+3); CHECK(base(r.second) == j+3); CHECK(i[0] == 4); CHECK(i[1] == 5); CHECK(i[2] == 6); CHECK(j[0] == 1); CHECK(j[1] == 2); CHECK(j[2] == 3); CHECK(j[3] == 7); using Sent1 = typename sentinel_type<Iter1>::type; using Sent2 = typename sentinel_type<Iter2>::type; r = ranges::swap_ranges( as_lvalue(ranges::make_iterator_range(Iter1(j), Sent1(j+4))), as_lvalue(ranges::make_iterator_range(Iter2(i), Sent2(i+3)))); CHECK(base(r.first) == j+3); CHECK(base(r.second) == i+3); CHECK(i[0] == 1); CHECK(i[1] == 2); CHECK(i[2] == 3); CHECK(j[0] == 4); CHECK(j[1] == 5); CHECK(j[2] == 6); CHECK(j[3] == 7); auto r2 = ranges::swap_ranges( ranges::make_iterator_range(Iter1(j), Sent1(j+4)), ranges::make_iterator_range(Iter2(i), Sent2(i+3))); CHECK(base(r2.first.get_unsafe()) == j+3); CHECK(base(r2.second.get_unsafe()) == i+3); CHECK(i[0] == 4); CHECK(i[1] == 5); CHECK(i[2] == 6); CHECK(j[0] == 1); CHECK(j[1] == 2); CHECK(j[2] == 3); CHECK(j[3] == 7); }
void test1() { { const int N = 100; std::unique_ptr<int> ia[N]; for(int i = 0; i < N; ++i) ia[i].reset(new int(i)); std::unique_ptr<int> ib[N]; std::pair<InIter, OutIter> r = stl2::move_backward(InIter(ia), InIter(ia+N), OutIter(ib+N)); CHECK(base(r.first) == ia+N); CHECK(base(r.second) == ib); for(int i = 0; i < N; ++i) { CHECK(ia[i].get() == nullptr); CHECK(*ib[i] == i); } } { const int N = 100; std::unique_ptr<int> ia[N]; for(int i = 0; i < N; ++i) ia[i].reset(new int(i)); std::unique_ptr<int> ib[N]; std::pair<InIter, OutIter> r = stl2::move_backward(as_lvalue(stl2::ext::make_range(InIter(ia), InIter(ia+N))), OutIter(ib+N)); CHECK(base(r.first) == ia+N); CHECK(base(r.second) == ib); for(int i = 0; i < N; ++i) { CHECK(ia[i].get() == nullptr); CHECK(*ib[i] == i); } stl2::move_backward(ib, ib+N, ia+N); auto r2 = stl2::move_backward(stl2::ext::make_range(InIter(ia), InIter(ia+N)), OutIter(ib+N)); CHECK(base(r2.first.get_unsafe()) == ia+N); CHECK(base(r2.second) == ib); for(int i = 0; i < N; ++i) { CHECK(ia[i].get() == nullptr); CHECK(*ib[i] == i); } } }
int main() { A a(as_lvalue(foo())); return 0; }
A foo() { A a; return as_lvalue(a); }