15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <valarray>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // template<class T> class valarray;
125a83710eSEric Fiselier
135a83710eSEric Fiselier // valarray operator[](const gslice& gs) const;
145a83710eSEric Fiselier
155a83710eSEric Fiselier #include <valarray>
165a83710eSEric Fiselier #include <cassert>
175a83710eSEric Fiselier
18*7fc6a556SMarshall Clow #include "test_macros.h"
19*7fc6a556SMarshall Clow
main(int,char **)202df59c50SJF Bastien int main(int, char**)
215a83710eSEric Fiselier {
2206571975SEric Fiselier {
235a83710eSEric Fiselier int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
245a83710eSEric Fiselier 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
255a83710eSEric Fiselier 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
265a83710eSEric Fiselier 36, 37, 38, 39, 40};
275a83710eSEric Fiselier std::valarray<int> v1(a, sizeof(a)/sizeof(a[0]));
285a83710eSEric Fiselier std::size_t sz[] = {2, 4, 3};
295a83710eSEric Fiselier std::size_t st[] = {19, 4, 1};
305a83710eSEric Fiselier typedef std::valarray<std::size_t> sizes;
315a83710eSEric Fiselier typedef std::valarray<std::size_t> strides;
325a83710eSEric Fiselier std::valarray<int> v(v1[std::gslice(3, sizes(sz, sizeof(sz)/sizeof(sz[0])),
335a83710eSEric Fiselier strides(st, sizeof(st)/sizeof(st[0])))]);
345a83710eSEric Fiselier assert(v.size() == 24);
355a83710eSEric Fiselier assert(v[ 0] == 3);
365a83710eSEric Fiselier assert(v[ 1] == 4);
375a83710eSEric Fiselier assert(v[ 2] == 5);
385a83710eSEric Fiselier assert(v[ 3] == 7);
395a83710eSEric Fiselier assert(v[ 4] == 8);
405a83710eSEric Fiselier assert(v[ 5] == 9);
415a83710eSEric Fiselier assert(v[ 6] == 11);
425a83710eSEric Fiselier assert(v[ 7] == 12);
435a83710eSEric Fiselier assert(v[ 8] == 13);
445a83710eSEric Fiselier assert(v[ 9] == 15);
455a83710eSEric Fiselier assert(v[10] == 16);
465a83710eSEric Fiselier assert(v[11] == 17);
475a83710eSEric Fiselier assert(v[12] == 22);
485a83710eSEric Fiselier assert(v[13] == 23);
495a83710eSEric Fiselier assert(v[14] == 24);
505a83710eSEric Fiselier assert(v[15] == 26);
515a83710eSEric Fiselier assert(v[16] == 27);
525a83710eSEric Fiselier assert(v[17] == 28);
535a83710eSEric Fiselier assert(v[18] == 30);
545a83710eSEric Fiselier assert(v[19] == 31);
555a83710eSEric Fiselier assert(v[20] == 32);
565a83710eSEric Fiselier assert(v[21] == 34);
575a83710eSEric Fiselier assert(v[22] == 35);
585a83710eSEric Fiselier assert(v[23] == 36);
5906571975SEric Fiselier }
6006571975SEric Fiselier {
6106571975SEric Fiselier int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
6206571975SEric Fiselier 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
6306571975SEric Fiselier 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
6406571975SEric Fiselier 36, 37, 38, 39, 40};
6506571975SEric Fiselier std::valarray<int> v1(a, sizeof(a)/sizeof(a[0]));
6606571975SEric Fiselier std::size_t sz[] = {2, 4, 3};
6706571975SEric Fiselier std::size_t st[] = {19, 4, 1};
6806571975SEric Fiselier typedef std::valarray<std::size_t> sizes;
6906571975SEric Fiselier typedef std::valarray<std::size_t> strides;
7006571975SEric Fiselier std::valarray<int> v((v1 + 0)[std::gslice(3, sizes(sz, sizeof(sz)/sizeof(sz[0])),
7106571975SEric Fiselier strides(st, sizeof(st)/sizeof(st[0])))]);
7206571975SEric Fiselier assert(v.size() == 24);
7306571975SEric Fiselier assert(v[ 0] == 3);
7406571975SEric Fiselier assert(v[ 1] == 4);
7506571975SEric Fiselier assert(v[ 2] == 5);
7606571975SEric Fiselier assert(v[ 3] == 7);
7706571975SEric Fiselier assert(v[ 4] == 8);
7806571975SEric Fiselier assert(v[ 5] == 9);
7906571975SEric Fiselier assert(v[ 6] == 11);
8006571975SEric Fiselier assert(v[ 7] == 12);
8106571975SEric Fiselier assert(v[ 8] == 13);
8206571975SEric Fiselier assert(v[ 9] == 15);
8306571975SEric Fiselier assert(v[10] == 16);
8406571975SEric Fiselier assert(v[11] == 17);
8506571975SEric Fiselier assert(v[12] == 22);
8606571975SEric Fiselier assert(v[13] == 23);
8706571975SEric Fiselier assert(v[14] == 24);
8806571975SEric Fiselier assert(v[15] == 26);
8906571975SEric Fiselier assert(v[16] == 27);
9006571975SEric Fiselier assert(v[17] == 28);
9106571975SEric Fiselier assert(v[18] == 30);
9206571975SEric Fiselier assert(v[19] == 31);
9306571975SEric Fiselier assert(v[20] == 32);
9406571975SEric Fiselier assert(v[21] == 34);
9506571975SEric Fiselier assert(v[22] == 35);
9606571975SEric Fiselier assert(v[23] == 36);
9706571975SEric Fiselier }
982df59c50SJF Bastien return 0;
995a83710eSEric Fiselier }
100