brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · c6192f9 Raw
85 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710 11// Test the implicitly-generated copy and move constructors since `lazy_split_view` has non-trivial members.12 13#include <ranges>14 15#include <cassert>16#include <string_view>17#include <utility>18#include "types.h"19 20constexpr bool test() {21  // Can copy `lazy_split_view`.22  {23    // Forward range.24    {25      std::ranges::lazy_split_view<std::string_view, std::string_view> v1("abc def", " ");26      auto v2 = v1;27      assert(v2.base() == v1.base());28    }29 30    // Input range.31    {32      SplitViewInput v1("abc def", ' ');33      auto v2 = v1;34      assert(v2.base() == v1.base());35    }36  }37 38  // Can move `lazy_split_view`.39  {40    // Forward range.41    {42      std::string_view base = "abc def";43      std::ranges::lazy_split_view<std::string_view, std::string_view> v1(base, " ");44      auto v2 = std::move(v1);45      assert(v2.base() == base);46    }47 48    // Input range.49    {50      InputView base("abc def");51      SplitViewInput v1(base, ' ');52      auto v2 = std::move(v1);53      assert(v2.base() == base);54    }55  }56 57  // `non-propagating-cache` is not copied.58  {59    SplitViewInput v1("abc def ghi", ' ');60    auto outer_iter1 = v1.begin();61    ++outer_iter1;62    auto val1 = *outer_iter1;63    auto i1 = val1.begin();64    assert(*i1 == 'd');65    ++i1;66    assert(*i1 == 'e');67 68    auto v2 = v1;69    auto val2 = *v2.begin();70    auto i2 = val2.begin();71    assert(*i2 == 'a');72    ++i2;73    assert(*i2 == 'b');74  }75 76  return true;77}78 79int main(int, char**) {80  test();81  static_assert(test());82 83  return 0;84}85