brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · c80bc9f Raw
60 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// <algorithm>10 11// template<ForwardIterator Iter, EquivalenceRelation<auto, Iter::value_type> Pred>12//   requires CopyConstructible<Pred>13//   constexpr Iter  // constexpr after C++1714//   adjacent_find(Iter first, Iter last, Pred pred);15 16#include <algorithm>17#include <functional>18#include <cassert>19 20#include "test_macros.h"21#include "test_iterators.h"22 23 24#if TEST_STD_VER > 1725TEST_CONSTEXPR bool eq (int a, int b) { return a == b; }26 27TEST_CONSTEXPR bool test_constexpr() {28    int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};29    int ib[] = {0, 1, 2, 7, 0, 1, 2, 3};30 31    return  (std::adjacent_find(std::begin(ia), std::end(ia), eq) == ia+2)32         && (std::adjacent_find(std::begin(ib), std::end(ib), eq) == std::end(ib))33         ;34    }35#endif36 37int main(int, char**)38{39    int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};40    const unsigned sa = sizeof(ia)/sizeof(ia[0]);41    assert(std::adjacent_find(forward_iterator<const int*>(ia),42                              forward_iterator<const int*>(ia + sa),43                              std::equal_to<int>()) ==44                              forward_iterator<const int*>(ia+2));45    assert(std::adjacent_find(forward_iterator<const int*>(ia),46                              forward_iterator<const int*>(ia),47                              std::equal_to<int>()) ==48                              forward_iterator<const int*>(ia));49    assert(std::adjacent_find(forward_iterator<const int*>(ia+3),50                              forward_iterator<const int*>(ia + sa),51                              std::equal_to<int>()) ==52                              forward_iterator<const int*>(ia+sa));53 54#if TEST_STD_VER > 1755    static_assert(test_constexpr());56#endif57 58  return 0;59}60