xref: /llvm-project/libcxx/test/std/numerics/numarray/template.valarray/valarray.sub/gslice_const.pass.cpp (revision 7fc6a55688c816f5fc1a5481ae7af25be7500356)
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 // gslice_array<value_type> operator[](const gslice& gs);
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 a1[] = { 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         int a2[] = { -0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11,
285a83710eSEric Fiselier                     -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23};
295a83710eSEric Fiselier         std::valarray<int> v1(a1, sizeof(a1)/sizeof(a1[0]));
305a83710eSEric Fiselier         std::valarray<int> v2(a2, sizeof(a2)/sizeof(a2[0]));
315a83710eSEric Fiselier         std::size_t sz[] = {2, 4, 3};
325a83710eSEric Fiselier         std::size_t st[] = {19, 4, 1};
335a83710eSEric Fiselier         typedef std::valarray<std::size_t> sizes;
345a83710eSEric Fiselier         typedef std::valarray<std::size_t> strides;
355a83710eSEric Fiselier         v1[std::gslice(3, sizes(sz, sizeof(sz)/sizeof(sz[0])),
365a83710eSEric Fiselier                           strides(st, sizeof(st)/sizeof(st[0])))] = v2;
375a83710eSEric Fiselier         assert(v1.size() == 41);
385a83710eSEric Fiselier         assert(v1[ 0] ==  0);
395a83710eSEric Fiselier         assert(v1[ 1] ==  1);
405a83710eSEric Fiselier         assert(v1[ 2] ==  2);
415a83710eSEric Fiselier         assert(v1[ 3] ==  0);
425a83710eSEric Fiselier         assert(v1[ 4] == -1);
435a83710eSEric Fiselier         assert(v1[ 5] == -2);
445a83710eSEric Fiselier         assert(v1[ 6] ==  6);
455a83710eSEric Fiselier         assert(v1[ 7] == -3);
465a83710eSEric Fiselier         assert(v1[ 8] == -4);
475a83710eSEric Fiselier         assert(v1[ 9] == -5);
485a83710eSEric Fiselier         assert(v1[10] == 10);
495a83710eSEric Fiselier         assert(v1[11] == -6);
505a83710eSEric Fiselier         assert(v1[12] == -7);
515a83710eSEric Fiselier         assert(v1[13] == -8);
525a83710eSEric Fiselier         assert(v1[14] == 14);
535a83710eSEric Fiselier         assert(v1[15] == -9);
545a83710eSEric Fiselier         assert(v1[16] == -10);
555a83710eSEric Fiselier         assert(v1[17] == -11);
565a83710eSEric Fiselier         assert(v1[18] == 18);
575a83710eSEric Fiselier         assert(v1[19] == 19);
585a83710eSEric Fiselier         assert(v1[20] == 20);
595a83710eSEric Fiselier         assert(v1[21] == 21);
605a83710eSEric Fiselier         assert(v1[22] == -12);
615a83710eSEric Fiselier         assert(v1[23] == -13);
625a83710eSEric Fiselier         assert(v1[24] == -14);
635a83710eSEric Fiselier         assert(v1[25] == 25);
645a83710eSEric Fiselier         assert(v1[26] == -15);
655a83710eSEric Fiselier         assert(v1[27] == -16);
665a83710eSEric Fiselier         assert(v1[28] == -17);
675a83710eSEric Fiselier         assert(v1[29] == 29);
685a83710eSEric Fiselier         assert(v1[30] == -18);
695a83710eSEric Fiselier         assert(v1[31] == -19);
705a83710eSEric Fiselier         assert(v1[32] == -20);
715a83710eSEric Fiselier         assert(v1[33] == 33);
725a83710eSEric Fiselier         assert(v1[34] == -21);
735a83710eSEric Fiselier         assert(v1[35] == -22);
745a83710eSEric Fiselier         assert(v1[36] == -23);
755a83710eSEric Fiselier         assert(v1[37] == 37);
765a83710eSEric Fiselier         assert(v1[38] == 38);
775a83710eSEric Fiselier         assert(v1[39] == 39);
785a83710eSEric Fiselier         assert(v1[40] == 40);
7906571975SEric Fiselier     }
802df59c50SJF Bastien 
812df59c50SJF Bastien     return 0;
825a83710eSEric Fiselier }
83