15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
3*57b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*57b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*57b08b09SChandler 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 gslice_array
125a83710eSEric Fiselier 
135a83710eSEric Fiselier // void operator=(const valarray<value_type>& v) const;
145a83710eSEric Fiselier 
155a83710eSEric Fiselier #include <valarray>
165a83710eSEric Fiselier #include <cassert>
175a83710eSEric Fiselier 
185a83710eSEric Fiselier int main()
195a83710eSEric Fiselier {
205a83710eSEric Fiselier     int a1[] = { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,
215a83710eSEric Fiselier                 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
225a83710eSEric Fiselier                 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
235a83710eSEric Fiselier                 36, 37, 38, 39, 40};
245a83710eSEric Fiselier     int a2[] = { -0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11,
255a83710eSEric Fiselier                 -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23};
265a83710eSEric Fiselier     std::valarray<int> v1(a1, sizeof(a1)/sizeof(a1[0]));
275a83710eSEric Fiselier     std::valarray<int> v2(a2, sizeof(a2)/sizeof(a2[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     v1[std::gslice(3, sizes(sz, sizeof(sz)/sizeof(sz[0])),
335a83710eSEric Fiselier                       strides(st, sizeof(st)/sizeof(st[0])))] = v2;
345a83710eSEric Fiselier     assert(v1.size() == 41);
355a83710eSEric Fiselier     assert(v1[ 0] ==  0);
365a83710eSEric Fiselier     assert(v1[ 1] ==  1);
375a83710eSEric Fiselier     assert(v1[ 2] ==  2);
385a83710eSEric Fiselier     assert(v1[ 3] == 0);
395a83710eSEric Fiselier     assert(v1[ 4] == -1);
405a83710eSEric Fiselier     assert(v1[ 5] == -2);
415a83710eSEric Fiselier     assert(v1[ 6] ==  6);
425a83710eSEric Fiselier     assert(v1[ 7] == -3);
435a83710eSEric Fiselier     assert(v1[ 8] == -4);
445a83710eSEric Fiselier     assert(v1[ 9] == -5);
455a83710eSEric Fiselier     assert(v1[10] == 10);
465a83710eSEric Fiselier     assert(v1[11] == -6);
475a83710eSEric Fiselier     assert(v1[12] == -7);
485a83710eSEric Fiselier     assert(v1[13] == -8);
495a83710eSEric Fiselier     assert(v1[14] == 14);
505a83710eSEric Fiselier     assert(v1[15] == -9);
515a83710eSEric Fiselier     assert(v1[16] == -10);
525a83710eSEric Fiselier     assert(v1[17] == -11);
535a83710eSEric Fiselier     assert(v1[18] == 18);
545a83710eSEric Fiselier     assert(v1[19] == 19);
555a83710eSEric Fiselier     assert(v1[20] == 20);
565a83710eSEric Fiselier     assert(v1[21] == 21);
575a83710eSEric Fiselier     assert(v1[22] == -12);
585a83710eSEric Fiselier     assert(v1[23] == -13);
595a83710eSEric Fiselier     assert(v1[24] == -14);
605a83710eSEric Fiselier     assert(v1[25] == 25);
615a83710eSEric Fiselier     assert(v1[26] == -15);
625a83710eSEric Fiselier     assert(v1[27] == -16);
635a83710eSEric Fiselier     assert(v1[28] == -17);
645a83710eSEric Fiselier     assert(v1[29] == 29);
655a83710eSEric Fiselier     assert(v1[30] == -18);
665a83710eSEric Fiselier     assert(v1[31] == -19);
675a83710eSEric Fiselier     assert(v1[32] == -20);
685a83710eSEric Fiselier     assert(v1[33] == 33);
695a83710eSEric Fiselier     assert(v1[34] == -21);
705a83710eSEric Fiselier     assert(v1[35] == -22);
715a83710eSEric Fiselier     assert(v1[36] == -23);
725a83710eSEric Fiselier     assert(v1[37] == 37);
735a83710eSEric Fiselier     assert(v1[38] == 38);
745a83710eSEric Fiselier     assert(v1[39] == 39);
755a83710eSEric Fiselier     assert(v1[40] == 40);
765a83710eSEric Fiselier }
77