brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 34ede10 Raw
182 lines · python
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# In addition to being available via inclusion of the <iterator> header,10# the function templates in [iterator.range] are available when any of the following11# headers are included: <array>, <deque>, <flat_map>, <flat_set>, <forward_list>,12# <list>, <map>, <regex>, <set>, <span>, <string>, <string_view>, <unordered_map>,13# <unordered_set>, <vector>.14 15# UNSUPPORTED: c++0316 17# RUN: %{python} %s %{libcxx-dir}/utils18# END.19 20import sys21 22sys.path.append(sys.argv[1])23from libcxx.header_information import (24    lit_header_restrictions,25    lit_header_undeprecations,26    Header,27)28 29headers = list(30    map(31        Header,32        [33            "array",34            "deque",35            "flat_map",36            "flat_set",37            "forward_list",38            "list",39            "map",40            "regex",41            "set",42            "span",43            "string",44            "string_view",45            "unordered_map",46            "unordered_set",47            "vector",48        ],49    )50)51 52for header in headers:53    print(54        f"""\55//--- {header}.pass.cpp56{lit_header_restrictions.get(header, '')}57{lit_header_undeprecations.get(header, '')}58 59#include <{header}>60#include <cassert>61#include <initializer_list>62 63#include "test_macros.h"64 65struct Container {{66  int a[3] = {{1, 2, 3}};67 68  int* begin() {{ return &a[0]; }}69  const int* begin() const {{ return &a[0]; }}70  int* rbegin() {{ return &a[2]; }}71  const int* rbegin() const {{ return &a[2]; }}72  int* end() {{ return &a[3]; }}73  const int* end() const {{ return &a[3]; }}74  int* rend() {{ return (&a[0]) - 1; }}75  const int* rend() const {{ return (&a[0]) - 1; }}76  std::size_t size() const {{ return 3; }}77  bool empty() const {{ return false; }}78  int* data() {{return &a[0]; }}79  const int* data() const {{ return &a[0]; }}80}};81 82int main(int, char**)  {{83  {{84    Container c;85    const auto& cc = c;86    assert(std::begin(c) == c.begin());87    assert(std::begin(cc) == cc.begin());88    assert(std::end(c) == c.end());89    assert(std::end(cc) == cc.end());90#if TEST_STD_VER >= 1491    assert(std::cbegin(c) == cc.begin());92    assert(std::cbegin(cc) == cc.begin());93    assert(std::cend(c) == cc.end());94    assert(std::cend(cc) == cc.end());95    assert(std::rbegin(c) == c.rbegin());96    assert(std::rbegin(cc) == cc.rbegin());97    assert(std::rend(c) == cc.rend());98    assert(std::rend(cc) == cc.rend());99    assert(std::crbegin(c) == cc.rbegin());100    assert(std::crbegin(cc) == cc.rbegin());101    assert(std::crend(c) == cc.rend());102    assert(std::crend(cc) == cc.rend());103#endif104#if TEST_STD_VER >= 17105    assert(std::data(c) == c.data());106    assert(std::data(cc) == cc.data());107    assert(std::size(cc) == cc.size());108    assert(std::empty(cc) == cc.empty());109#endif110#if TEST_STD_VER >= 20111    assert(std::ssize(cc) == 3);112#endif113  }}114  {{115    int a[]        = {{1, 2, 3}};116    const auto& ca = a;117    assert(std::begin(a) == &a[0]);118    assert(std::begin(ca) == &ca[0]);119    assert(std::end(a) == &a[3]);120    assert(std::end(ca) == &ca[3]);121#if TEST_STD_VER >= 14122    assert(std::cbegin(a) == &a[0]);123    assert(std::cbegin(ca) == &ca[0]);124    assert(std::cend(a) == &a[3]);125    assert(std::cend(ca) == &ca[3]);126    assert(std::rbegin(a) == std::reverse_iterator<int*>(std::end(a)));127    assert(std::rbegin(ca) == std::reverse_iterator<const int*>(std::end(ca)));128    assert(std::rend(a) == std::reverse_iterator<int*>(std::begin(a)));129    assert(std::rend(ca) == std::reverse_iterator<const int*>(std::begin(ca)));130    assert(std::crbegin(a) == std::reverse_iterator<const int*>(std::end(a)));131    assert(std::crbegin(ca) == std::reverse_iterator<const int*>(std::end(ca)));132    assert(std::crend(a) == std::reverse_iterator<const int*>(std::begin(a)));133    assert(std::crend(ca) == std::reverse_iterator<const int*>(std::begin(ca)));134#endif135#if TEST_STD_VER >= 17136    assert(std::size(ca) == 3);137    assert(!std::empty(ca));138    assert(std::data(a) == &a[0]);139    assert(std::data(ca) == &ca[0]);140#endif141#if TEST_STD_VER >= 20142    assert(std::ssize(ca) == 3);143#endif144  }}145  {{146    auto il         = {{1, 2, 3}};147    const auto& cil = il;148    assert(std::begin(il) == il.begin());149    assert(std::begin(cil) == cil.begin());150    assert(std::end(il) == il.end());151    assert(std::end(cil) == cil.end());152#if TEST_STD_VER >= 14153    assert(std::cbegin(il) == cil.begin());154    assert(std::cbegin(cil) == cil.begin());155    assert(std::cend(il) == cil.end());156    assert(std::cend(cil) == cil.end());157    assert(std::rbegin(il) == std::reverse_iterator<const int*>(std::end(il)));158    assert(std::rbegin(cil) == std::reverse_iterator<const int*>(std::end(il)));159    assert(std::rend(il) == std::reverse_iterator<const int*>(std::begin(il)));160    assert(std::rend(cil) == std::reverse_iterator<const int*>(std::begin(il)));161    assert(std::crbegin(il) == std::reverse_iterator<const int*>(std::end(il)));162    assert(std::crbegin(cil) == std::reverse_iterator<const int*>(std::end(il)));163    assert(std::crend(il) == std::reverse_iterator<const int*>(std::begin(il)));164    assert(std::crend(cil) == std::reverse_iterator<const int*>(std::begin(il)));165#endif166#if TEST_STD_VER >= 17167    assert(std::size(cil) == 3);168    assert(!std::empty(cil));169    assert(std::data(il) == &*std::begin(il));170    assert(std::data(cil) == &*std::begin(il));171#endif172#if TEST_STD_VER >= 20173    assert(std::ssize(cil) == 3);174#endif175  }}176 177  return 0;178}}179 180"""181    )182