1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <valarray>
11 
12 // template<class T> class valarray;
13 
14 // template<class T>
15 //   void
16 //   swap(valarray<T>& x, valarray<T>& y);
17 
18 #include <valarray>
19 #include <cassert>
20 #include <cstddef>
21 
22 int main()
23 {
24     {
25         typedef int T;
26         T a1[] = {1, 2, 3, 4, 5};
27         T a2[] = {6, 7, 8, 9, 10, 11, 12};
28         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
29         const unsigned N2 = sizeof(a2)/sizeof(a2[0]);
30         std::valarray<T> v1(a1, N1);
31         std::valarray<T> v2(a2, N2);
32         std::valarray<T> v1_save = v1;
33         std::valarray<T> v2_save = v2;
34         swap(v1, v2);
35         assert(v1.size() == v2_save.size());
36         for (std::size_t i = 0; i < v1.size(); ++i)
37             assert(v1[i] == v2_save[i]);
38         assert(v2.size() == v1_save.size());
39         for (std::size_t i = 0; i < v2.size(); ++i)
40             assert(v2[i] == v1_save[i]);
41     }
42     {
43         typedef int T;
44         T a1[] = {1, 2, 3, 4, 5};
45         const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
46         const unsigned N2 = 0;
47         std::valarray<T> v1(a1, N1);
48         std::valarray<T> v2;
49         std::valarray<T> v1_save = v1;
50         std::valarray<T> v2_save = v2;
51         swap(v1, v2);
52         assert(v1.size() == v2_save.size());
53         for (std::size_t i = 0; i < v1.size(); ++i)
54             assert(v1[i] == v2_save[i]);
55         assert(v2.size() == v1_save.size());
56         for (std::size_t i = 0; i < v2.size(); ++i)
57             assert(v2[i] == v1_save[i]);
58     }
59     {
60         typedef int T;
61         T a2[] = {6, 7, 8, 9, 10, 11, 12};
62         const unsigned N1 = 0;
63         const unsigned N2 = sizeof(a2)/sizeof(a2[0]);
64         std::valarray<T> v1;
65         std::valarray<T> v2(a2, N2);
66         std::valarray<T> v1_save = v1;
67         std::valarray<T> v2_save = v2;
68         swap(v1, v2);
69         assert(v1.size() == v2_save.size());
70         for (std::size_t i = 0; i < v1.size(); ++i)
71             assert(v1[i] == v2_save[i]);
72         assert(v2.size() == v1_save.size());
73         for (std::size_t i = 0; i < v2.size(); ++i)
74             assert(v2[i] == v1_save[i]);
75     }
76     {
77         typedef int T;
78         const unsigned N1 = 0;
79         const unsigned N2 = 0;
80         std::valarray<T> v1;
81         std::valarray<T> v2;
82         std::valarray<T> v1_save = v1;
83         std::valarray<T> v2_save = v2;
84         swap(v1, v2);
85         assert(v1.size() == v2_save.size());
86         for (std::size_t i = 0; i < v1.size(); ++i)
87             assert(v1[i] == v2_save[i]);
88         assert(v2.size() == v1_save.size());
89         for (std::size_t i = 0; i < v2.size(); ++i)
90             assert(v2[i] == v1_save[i]);
91     }
92 }
93