xref: /llvm-project/libcxx/test/std/numerics/numarray/template.valarray/valarray.members/cshift.pass.cpp (revision 57b08b0944046a6a57ee9b7b479181f548a5b9b4)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // <valarray>
10 
11 // template<class T> class valarray;
12 
13 // valarray cshift(int i) const;
14 
15 #include <valarray>
16 #include <cassert>
17 
18 int main()
19 {
20     {
21         typedef int T;
22         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
23         T a2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
24         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
25         std::valarray<T> v1(a1, N1);
26         std::valarray<T> v2 = v1.cshift(0);
27         assert(v2.size() == N1);
28         for (unsigned i = 0; i < N1; ++i)
29             assert(v2[i] == a2[i]);
30     }
31     {
32         typedef int T;
33         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
34         T a2[] = {4, 5, 6, 7, 8, 9, 10, 1, 2, 3};
35         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
36         std::valarray<T> v1(a1, N1);
37         std::valarray<T> v2 = v1.cshift(3);
38         assert(v2.size() == N1);
39         for (unsigned i = 0; i < N1; ++i)
40             assert(v2[i] == a2[i]);
41     }
42     {
43         typedef int T;
44         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
45         T a2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
46         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
47         std::valarray<T> v1(a1, N1);
48         std::valarray<T> v2 = v1.cshift(10);
49         assert(v2.size() == N1);
50         for (unsigned i = 0; i < N1; ++i)
51             assert(v2[i] == a2[i]);
52     }
53     {
54         typedef int T;
55         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
56         T a2[] = {8, 9, 10, 1, 2, 3, 4, 5, 6, 7};
57         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
58         std::valarray<T> v1(a1, N1);
59         std::valarray<T> v2 = v1.cshift(17);
60         assert(v2.size() == N1);
61         for (unsigned i = 0; i < N1; ++i)
62             assert(v2[i] == a2[i]);
63     }
64     {
65         typedef int T;
66         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
67         T a2[] = {8, 9, 10, 1, 2, 3, 4, 5, 6, 7};
68         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
69         std::valarray<T> v1(a1, N1);
70         std::valarray<T> v2 = v1.cshift(-3);
71         assert(v2.size() == N1);
72         for (unsigned i = 0; i < N1; ++i)
73             assert(v2[i] == a2[i]);
74     }
75     {
76         typedef int T;
77         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
78         T a2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
79         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
80         std::valarray<T> v1(a1, N1);
81         std::valarray<T> v2 = v1.cshift(-10);
82         assert(v2.size() == N1);
83         for (unsigned i = 0; i < N1; ++i)
84             assert(v2[i] == a2[i]);
85     }
86     {
87         typedef int T;
88         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
89         T a2[] = {4, 5, 6, 7, 8, 9, 10, 1, 2, 3};
90         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
91         std::valarray<T> v1(a1, N1);
92         std::valarray<T> v2 = v1.cshift(-17);
93         assert(v2.size() == N1);
94         for (unsigned i = 0; i < N1; ++i)
95             assert(v2[i] == a2[i]);
96     }
97     {
98         typedef int T;
99         const unsigned N1 = 0;
100         std::valarray<T> v1;
101         std::valarray<T> v2 = v1.cshift(-17);
102         assert(v2.size() == N1);
103     }
104     {
105         typedef int T;
106         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
107         T a2[] = {8, 10, 12, 14, 16, 18, 20, 2, 4, 6};
108         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
109         std::valarray<T> v1(a1, N1);
110         std::valarray<T> v2 = (v1 + v1).cshift(3);
111         assert(v2.size() == N1);
112         for (unsigned i = 0; i < N1; ++i)
113             assert(v2[i] == a2[i]);
114     }
115     {
116         typedef int T;
117         T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
118         T a2[] = {16, 18, 20, 2, 4, 6, 8, 10, 12, 14};
119         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
120         std::valarray<T> v1(a1, N1);
121         std::valarray<T> v2 = (v1 + v1).cshift(-3);
122         assert(v2.size() == N1);
123         for (unsigned i = 0; i < N1; ++i)
124             assert(v2[i] == a2[i]);
125     }
126 }
127