1*5a83710eSEric Fiselier //===----------------------------------------------------------------------===// 2*5a83710eSEric Fiselier // 3*5a83710eSEric Fiselier // The LLVM Compiler Infrastructure 4*5a83710eSEric Fiselier // 5*5a83710eSEric Fiselier // This file is dual licensed under the MIT and the University of Illinois Open 6*5a83710eSEric Fiselier // Source Licenses. See LICENSE.TXT for details. 7*5a83710eSEric Fiselier // 8*5a83710eSEric Fiselier //===----------------------------------------------------------------------===// 9*5a83710eSEric Fiselier 10*5a83710eSEric Fiselier // <valarray> 11*5a83710eSEric Fiselier 12*5a83710eSEric Fiselier // template<class T> class valarray; 13*5a83710eSEric Fiselier 14*5a83710eSEric Fiselier // valarray shift(int i) const; 15*5a83710eSEric Fiselier 16*5a83710eSEric Fiselier #include <valarray> 17*5a83710eSEric Fiselier #include <cassert> 18*5a83710eSEric Fiselier 19*5a83710eSEric Fiselier int main() 20*5a83710eSEric Fiselier { 21*5a83710eSEric Fiselier { 22*5a83710eSEric Fiselier typedef int T; 23*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 24*5a83710eSEric Fiselier T a2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 25*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 26*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 27*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(0); 28*5a83710eSEric Fiselier assert(v2.size() == N1); 29*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 30*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 31*5a83710eSEric Fiselier } 32*5a83710eSEric Fiselier { 33*5a83710eSEric Fiselier typedef int T; 34*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 35*5a83710eSEric Fiselier T a2[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 0}; 36*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 37*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 38*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(1); 39*5a83710eSEric Fiselier assert(v2.size() == N1); 40*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 41*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 42*5a83710eSEric Fiselier } 43*5a83710eSEric Fiselier { 44*5a83710eSEric Fiselier typedef int T; 45*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 46*5a83710eSEric Fiselier T a2[] = {10, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 47*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 48*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 49*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(9); 50*5a83710eSEric Fiselier assert(v2.size() == N1); 51*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 52*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 53*5a83710eSEric Fiselier } 54*5a83710eSEric Fiselier { 55*5a83710eSEric Fiselier typedef int T; 56*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 57*5a83710eSEric Fiselier T a2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 58*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 59*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 60*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(90); 61*5a83710eSEric Fiselier assert(v2.size() == N1); 62*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 63*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 64*5a83710eSEric Fiselier } 65*5a83710eSEric Fiselier { 66*5a83710eSEric Fiselier typedef int T; 67*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 68*5a83710eSEric Fiselier T a2[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 69*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 70*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 71*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(-1); 72*5a83710eSEric Fiselier assert(v2.size() == N1); 73*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 74*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 75*5a83710eSEric Fiselier } 76*5a83710eSEric Fiselier { 77*5a83710eSEric Fiselier typedef int T; 78*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 79*5a83710eSEric Fiselier T a2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; 80*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 81*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 82*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(-9); 83*5a83710eSEric Fiselier assert(v2.size() == N1); 84*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 85*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 86*5a83710eSEric Fiselier } 87*5a83710eSEric Fiselier { 88*5a83710eSEric Fiselier typedef int T; 89*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 90*5a83710eSEric Fiselier T a2[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 91*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 92*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 93*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(-90); 94*5a83710eSEric Fiselier assert(v2.size() == N1); 95*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 96*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 97*5a83710eSEric Fiselier } 98*5a83710eSEric Fiselier { 99*5a83710eSEric Fiselier typedef int T; 100*5a83710eSEric Fiselier const unsigned N1 = 0; 101*5a83710eSEric Fiselier std::valarray<T> v1; 102*5a83710eSEric Fiselier std::valarray<T> v2 = v1.shift(-90); 103*5a83710eSEric Fiselier assert(v2.size() == N1); 104*5a83710eSEric Fiselier } 105*5a83710eSEric Fiselier { 106*5a83710eSEric Fiselier typedef int T; 107*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 108*5a83710eSEric Fiselier T a2[] = {8, 10, 12, 14, 16, 18, 20, 0, 0, 0}; 109*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 110*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 111*5a83710eSEric Fiselier std::valarray<T> v2 = (v1 + v1).shift(3); 112*5a83710eSEric Fiselier assert(v2.size() == N1); 113*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 114*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 115*5a83710eSEric Fiselier } 116*5a83710eSEric Fiselier { 117*5a83710eSEric Fiselier typedef int T; 118*5a83710eSEric Fiselier T a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 119*5a83710eSEric Fiselier T a2[] = {0, 0, 0, 2, 4, 6, 8, 10, 12, 14}; 120*5a83710eSEric Fiselier const unsigned N1 = sizeof(a1)/sizeof(a1[0]); 121*5a83710eSEric Fiselier std::valarray<T> v1(a1, N1); 122*5a83710eSEric Fiselier std::valarray<T> v2 = (v1 + v1).shift(-3); 123*5a83710eSEric Fiselier assert(v2.size() == N1); 124*5a83710eSEric Fiselier for (unsigned i = 0; i < N1; ++i) 125*5a83710eSEric Fiselier assert(v2[i] == a2[i]); 126*5a83710eSEric Fiselier } 127*5a83710eSEric Fiselier } 128