1*042dc3c4SHui Xie //===----------------------------------------------------------------------===//
2*042dc3c4SHui Xie //
3*042dc3c4SHui Xie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*042dc3c4SHui Xie // See https://llvm.org/LICENSE.txt for license information.
5*042dc3c4SHui Xie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*042dc3c4SHui Xie //
7*042dc3c4SHui Xie //===----------------------------------------------------------------------===//
8*042dc3c4SHui Xie
9*042dc3c4SHui Xie // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10*042dc3c4SHui Xie // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11*042dc3c4SHui Xie
12*042dc3c4SHui Xie // Some basic examples of how zip_view might be used in the wild. This is a general
13*042dc3c4SHui Xie // collection of sample algorithms and functions that try to mock general usage of
14*042dc3c4SHui Xie // this view.
15*042dc3c4SHui Xie
16*042dc3c4SHui Xie #include <ranges>
17*042dc3c4SHui Xie
18*042dc3c4SHui Xie #include <array>
19*042dc3c4SHui Xie #include <cassert>
20*042dc3c4SHui Xie #include <vector>
21*042dc3c4SHui Xie #include <string>
22*042dc3c4SHui Xie
main(int,char **)23*042dc3c4SHui Xie int main(int, char**) {
24*042dc3c4SHui Xie {
25*042dc3c4SHui Xie std::ranges::zip_view v{
26*042dc3c4SHui Xie std::array{1, 2},
27*042dc3c4SHui Xie std::vector{4, 5, 6},
28*042dc3c4SHui Xie std::array{7},
29*042dc3c4SHui Xie };
30*042dc3c4SHui Xie assert(std::ranges::size(v) == 1);
31*042dc3c4SHui Xie assert(*v.begin() == std::make_tuple(1, 4, 7));
32*042dc3c4SHui Xie }
33*042dc3c4SHui Xie {
34*042dc3c4SHui Xie using namespace std::string_literals;
35*042dc3c4SHui Xie std::vector v{1, 2, 3, 4};
36*042dc3c4SHui Xie std::array a{"abc"s, "def"s, "gh"s};
37*042dc3c4SHui Xie auto view = std::views::zip(v, a);
38*042dc3c4SHui Xie auto it = view.begin();
39*042dc3c4SHui Xie assert(&(std::get<0>(*it)) == &(v[0]));
40*042dc3c4SHui Xie assert(&(std::get<1>(*it)) == &(a[0]));
41*042dc3c4SHui Xie
42*042dc3c4SHui Xie ++it;
43*042dc3c4SHui Xie assert(&(std::get<0>(*it)) == &(v[1]));
44*042dc3c4SHui Xie assert(&(std::get<1>(*it)) == &(a[1]));
45*042dc3c4SHui Xie
46*042dc3c4SHui Xie ++it;
47*042dc3c4SHui Xie assert(&(std::get<0>(*it)) == &(v[2]));
48*042dc3c4SHui Xie assert(&(std::get<1>(*it)) == &(a[2]));
49*042dc3c4SHui Xie
50*042dc3c4SHui Xie ++it;
51*042dc3c4SHui Xie assert(it == view.end());
52*042dc3c4SHui Xie }
53*042dc3c4SHui Xie
54*042dc3c4SHui Xie return 0;
55*042dc3c4SHui Xie }
56