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(int, char**) 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 return 0; 128 } 129