brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · d5ec017 Raw
70 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// <valarray>10 11// template<class T> class valarray;12 13// template <class T> unspecified begin(valarray<T>& v);14// template <class T> unspecified begin(const valarray<T>& v);15// template <class T> unspecified end(valarray<T>& v);16// template <class T> unspecified end(const valarray<T>& v);17 18#include <valarray>19#include <cassert>20#include <iterator>21#include <type_traits>22 23#include "test_macros.h"24 25int main(int, char**)26{27  {28    int a[] = {1, 2, 3, 4, 5};29    std::valarray<int> v(a, 5);30    const std::valarray<int>& cv = v;31    using It = decltype(std::begin(v));32    using CIt = decltype(std::begin(cv));33    static_assert(std::is_base_of<std::random_access_iterator_tag, std::iterator_traits<It>::iterator_category>::value, "");34    static_assert(std::is_base_of<std::random_access_iterator_tag, std::iterator_traits<CIt>::iterator_category>::value, "");35    ASSERT_SAME_TYPE(decltype(*std::begin(v)), int&);36    ASSERT_SAME_TYPE(decltype(*std::begin(cv)), const int&);37    assert(&*std::begin(v) == &v[0]);38    assert(&*std::begin(cv) == &cv[0]);39    *std::begin(v) = 10;40    assert(v[0] == 10);41 42    ASSERT_SAME_TYPE(decltype(std::end(v)), It);43    ASSERT_SAME_TYPE(decltype(std::end(cv)), CIt);44    assert(&*std::prev(std::end(v)) == &v[4]);45    assert(&*std::prev(std::end(cv)) == &cv[4]);46  }47#if TEST_STD_VER >= 1148  {49    int a[] = {1, 2, 3, 4, 5};50    std::valarray<int> v(a, 5);51    int sum = 0;52    for (int& i : v) {53      sum += i;54    }55    assert(sum == 15);56  }57  {58    int a[] = {1, 2, 3, 4, 5};59    const std::valarray<int> cv(a, 5);60    int sum = 0;61    for (const int& i : cv) {62      sum += i;63    }64    assert(sum == 15);65  }66#endif67 68  return 0;69}70