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