brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 064b710 Raw
58 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++1410 11// UNSUPPORTED: libcpp-has-no-incomplete-pstl12 13// template<class ExecutionPolicy, class ForwardIterator, class Generator>14//   void generate(ExecutionPolicy&& exec,15//                 ForwardIterator first, ForwardIterator last,16//                 Generator gen);17 18#include <algorithm>19#include <cassert>20#include <vector>21 22#include "test_iterators.h"23#include "test_execution_policies.h"24#include "type_algorithms.h"25 26template <class Iter>27struct Test {28  template <class ExecutionPolicy>29  void operator()(ExecutionPolicy&& policy) {30    { // simple test31      int a[10];32      std::generate(policy, Iter(std::begin(a)), Iter(std::end(a)), []() { return 1; });33      assert(std::all_of(std::begin(a), std::end(a), [](int i) { return i == 1; }));34    }35    { // empty range works36      int a[10] {3};37      std::generate(policy, Iter(std::begin(a)), Iter(std::begin(a)), []() { return 1; });38      assert(a[0] == 3);39    }40    { // single-element range works41      int a[] {3};42      std::generate(policy, Iter(std::begin(a)), Iter(std::end(a)), []() { return 5; });43      assert(a[0] == 5);44    }45    { // large range works46      std::vector<int> vec(150, 4);47      std::generate(policy, Iter(std::data(vec)), Iter(std::data(vec) + std::size(vec)), []() { return 5; });48      assert(std::all_of(std::begin(vec), std::end(vec), [](int i) { return i == 5; }));49    }50  }51};52 53int main(int, char**) {54  types::for_each(types::forward_iterator_list<int*>{}, TestIteratorWithPolicies<Test>{});55 56  return 0;57}58