mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-23 13:35:42 -04:00

LLVM uses .h as its extension for header files. Files renamed using: for f in libcxx/test/support/*.hpp; do git mv $f ${f%.hpp}.h; done References to the files updated using: for f in $(git diff master | grep 'rename from' | cut -f 3 -d ' '); do a=$(basename $f); echo $a; rg -l $a libcxx | xargs sed -i '' "s/$a/${a%.hpp}.h/"; done HPP include guards updated manually using: for f in $(git diff master | grep 'rename from' | cut -f 3 -d ' '); do echo ${f%.hpp}.h ; done | xargs mvim Differential Revision: https://reviews.llvm.org/D66104 llvm-svn: 369481
95 lines
3.4 KiB
C++
95 lines
3.4 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// <algorithm>
|
|
|
|
// template<InputIterator InIter, OutputIterator<auto, InIter::reference> OutIter>
|
|
// constexpr OutIter // constexpr after C++17
|
|
// copy_n(InIter first, InIter::difference_type n, OutIter result);
|
|
|
|
#include <algorithm>
|
|
#include <cassert>
|
|
|
|
#include "test_macros.h"
|
|
#include "test_iterators.h"
|
|
#include "user_defined_integral.h"
|
|
|
|
// #if TEST_STD_VER > 17
|
|
// TEST_CONSTEXPR bool test_constexpr() {
|
|
// int ia[] = {1, 2, 3, 4, 5};
|
|
// int ic[] = {6, 6, 6, 6, 6, 6, 6};
|
|
//
|
|
// auto p = std::copy_n(std::begin(ia), 4, std::begin(ic));
|
|
// return std::equal(std::begin(ic), p, std::begin(ia))
|
|
// && std::all_of(p, std::end(ic), [](int a){return a == 6;})
|
|
// ;
|
|
// }
|
|
// #endif
|
|
|
|
typedef UserDefinedIntegral<unsigned> UDI;
|
|
|
|
template <class InIter, class OutIter>
|
|
void
|
|
test()
|
|
{
|
|
const unsigned N = 1000;
|
|
int ia[N];
|
|
for (unsigned i = 0; i < N; ++i)
|
|
ia[i] = i;
|
|
int ib[N] = {0};
|
|
|
|
OutIter r = std::copy_n(InIter(ia), UDI(N/2), OutIter(ib));
|
|
assert(base(r) == ib+N/2);
|
|
for (unsigned i = 0; i < N/2; ++i)
|
|
assert(ia[i] == ib[i]);
|
|
}
|
|
|
|
int main(int, char**)
|
|
{
|
|
test<input_iterator<const int*>, output_iterator<int*> >();
|
|
test<input_iterator<const int*>, input_iterator<int*> >();
|
|
test<input_iterator<const int*>, forward_iterator<int*> >();
|
|
test<input_iterator<const int*>, bidirectional_iterator<int*> >();
|
|
test<input_iterator<const int*>, random_access_iterator<int*> >();
|
|
test<input_iterator<const int*>, int*>();
|
|
|
|
test<forward_iterator<const int*>, output_iterator<int*> >();
|
|
test<forward_iterator<const int*>, input_iterator<int*> >();
|
|
test<forward_iterator<const int*>, forward_iterator<int*> >();
|
|
test<forward_iterator<const int*>, bidirectional_iterator<int*> >();
|
|
test<forward_iterator<const int*>, random_access_iterator<int*> >();
|
|
test<forward_iterator<const int*>, int*>();
|
|
|
|
test<bidirectional_iterator<const int*>, output_iterator<int*> >();
|
|
test<bidirectional_iterator<const int*>, input_iterator<int*> >();
|
|
test<bidirectional_iterator<const int*>, forward_iterator<int*> >();
|
|
test<bidirectional_iterator<const int*>, bidirectional_iterator<int*> >();
|
|
test<bidirectional_iterator<const int*>, random_access_iterator<int*> >();
|
|
test<bidirectional_iterator<const int*>, int*>();
|
|
|
|
test<random_access_iterator<const int*>, output_iterator<int*> >();
|
|
test<random_access_iterator<const int*>, input_iterator<int*> >();
|
|
test<random_access_iterator<const int*>, forward_iterator<int*> >();
|
|
test<random_access_iterator<const int*>, bidirectional_iterator<int*> >();
|
|
test<random_access_iterator<const int*>, random_access_iterator<int*> >();
|
|
test<random_access_iterator<const int*>, int*>();
|
|
|
|
test<const int*, output_iterator<int*> >();
|
|
test<const int*, input_iterator<int*> >();
|
|
test<const int*, forward_iterator<int*> >();
|
|
test<const int*, bidirectional_iterator<int*> >();
|
|
test<const int*, random_access_iterator<int*> >();
|
|
test<const int*, int*>();
|
|
|
|
// #if TEST_STD_VER > 17
|
|
// static_assert(test_constexpr());
|
|
// #endif
|
|
|
|
return 0;
|
|
}
|