brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 86641e6 Raw
71 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<BidirectionalIterator Iter>12//   requires HasSwap<Iter::reference, Iter::reference>13//   constexpr void  // constexpr in C++2014//   reverse(Iter first, Iter last);15 16#include <algorithm>17#include <cassert>18 19#include "test_macros.h"20#include "test_iterators.h"21 22template <class Iter>23TEST_CONSTEXPR_CXX20 bool24test()25{26    int ia[] = {0};27    const unsigned sa = sizeof(ia)/sizeof(ia[0]);28    std::reverse(Iter(ia), Iter(ia));29    assert(ia[0] == 0);30    std::reverse(Iter(ia), Iter(ia+sa));31    assert(ia[0] == 0);32 33    int ib[] = {0, 1};34    const unsigned sb = sizeof(ib)/sizeof(ib[0]);35    std::reverse(Iter(ib), Iter(ib+sb));36    assert(ib[0] == 1);37    assert(ib[1] == 0);38 39    int ic[] = {0, 1, 2};40    const unsigned sc = sizeof(ic)/sizeof(ic[0]);41    std::reverse(Iter(ic), Iter(ic+sc));42    assert(ic[0] == 2);43    assert(ic[1] == 1);44    assert(ic[2] == 0);45 46    int id[] = {0, 1, 2, 3};47    const unsigned sd = sizeof(id)/sizeof(id[0]);48    std::reverse(Iter(id), Iter(id+sd));49    assert(id[0] == 3);50    assert(id[1] == 2);51    assert(id[2] == 1);52    assert(id[3] == 0);53 54    return true;55}56 57int main(int, char**)58{59    test<bidirectional_iterator<int*> >();60    test<random_access_iterator<int*> >();61    test<int*>();62 63#if TEST_STD_VER >= 2064    static_assert(test<bidirectional_iterator<int*>>());65    static_assert(test<random_access_iterator<int*>>());66    static_assert(test<int*>());67#endif68 69    return 0;70}71