forked from OSchip/llvm-project
74 lines
2.0 KiB
C++
74 lines
2.0 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++03, c++11, c++14
|
|
|
|
// <valarray>
|
|
|
|
// template<class T, size_t cnt> valarray(const T(&)[cnt], size_t) -> valarray<T>;
|
|
|
|
#include <valarray>
|
|
|
|
#include "test_macros.h"
|
|
|
|
int main(int, char**)
|
|
{
|
|
{
|
|
// From (initializer_list<T>)
|
|
std::valarray v = {1, 2, 3, 4, 5};
|
|
ASSERT_SAME_TYPE(decltype(v), std::valarray<int>);
|
|
}
|
|
|
|
{
|
|
// From (const T(&)[N], size_t)
|
|
long a[] = {1, 2, 3, 4, 5};
|
|
std::valarray v(a, 5);
|
|
ASSERT_SAME_TYPE(decltype(v), std::valarray<long>);
|
|
}
|
|
|
|
{
|
|
// From (const T&, size_t)
|
|
long a[] = {1, 2, 3, 4, 5};
|
|
std::valarray v(&a[0], 5);
|
|
// Surprising but true.
|
|
ASSERT_SAME_TYPE(decltype(v), std::valarray<long*>);
|
|
}
|
|
|
|
{
|
|
// From (slice_array<T>)
|
|
std::valarray<long> v{1,2,3,4,5};
|
|
std::valarray v2 = v[std::slice(2,3,1)];
|
|
static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
|
|
}
|
|
|
|
{
|
|
// From (gslice_array<T>)
|
|
std::valarray<long> v{1,2,3,4,5};
|
|
std::valarray v2 = v[std::gslice(0, {5}, {1})];
|
|
static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
|
|
}
|
|
|
|
{
|
|
// From (mask_array<T>)
|
|
std::valarray<long> v = {1, 2, 3, 4, 5};
|
|
std::valarray<bool> m = {true, false, true, false, true};
|
|
std::valarray v2 = v[m];
|
|
static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
|
|
}
|
|
|
|
{
|
|
// From (indirect_array<T>)
|
|
std::valarray<long> v = {1, 2, 3, 4, 5};
|
|
std::valarray<size_t> i = {1, 2, 3};
|
|
std::valarray v2 = v[i];
|
|
static_assert(std::is_same_v<decltype(v2), std::valarray<long>>);
|
|
}
|
|
|
|
return 0;
|
|
}
|