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// void swap(valarray& v);
15
16#include <valarray>
17#include <cassert>
18
19int main()
20{
21    {
22        typedef int T;
23        T a1[] = {1, 2, 3, 4, 5};
24        T a2[] = {6, 7, 8, 9, 10, 11, 12};
25        const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
26        const unsigned N2 = sizeof(a2)/sizeof(a2[0]);
27        std::valarray<T> v1(a1, N1);
28        std::valarray<T> v2(a2, N2);
29        std::valarray<T> v1_save = v1;
30        std::valarray<T> v2_save = v2;
31        v1.swap(v2);
32        assert(v1.size() == v2_save.size());
33        for (int i = 0; i < v1.size(); ++i)
34            assert(v1[i] == v2_save[i]);
35        assert(v2.size() == v1_save.size());
36        for (int i = 0; i < v2.size(); ++i)
37            assert(v2[i] == v1_save[i]);
38    }
39    {
40        typedef int T;
41        T a1[] = {1, 2, 3, 4, 5};
42        const unsigned N1 = sizeof(a1)/sizeof(a1[0]);
43        const unsigned N2 = 0;
44        std::valarray<T> v1(a1, N1);
45        std::valarray<T> v2;
46        std::valarray<T> v1_save = v1;
47        std::valarray<T> v2_save = v2;
48        v1.swap(v2);
49        assert(v1.size() == v2_save.size());
50        for (int i = 0; i < v1.size(); ++i)
51            assert(v1[i] == v2_save[i]);
52        assert(v2.size() == v1_save.size());
53        for (int i = 0; i < v2.size(); ++i)
54            assert(v2[i] == v1_save[i]);
55    }
56    {
57        typedef int T;
58        T a2[] = {6, 7, 8, 9, 10, 11, 12};
59        const unsigned N1 = 0;
60        const unsigned N2 = sizeof(a2)/sizeof(a2[0]);
61        std::valarray<T> v1;
62        std::valarray<T> v2(a2, N2);
63        std::valarray<T> v1_save = v1;
64        std::valarray<T> v2_save = v2;
65        v1.swap(v2);
66        assert(v1.size() == v2_save.size());
67        for (int i = 0; i < v1.size(); ++i)
68            assert(v1[i] == v2_save[i]);
69        assert(v2.size() == v1_save.size());
70        for (int i = 0; i < v2.size(); ++i)
71            assert(v2[i] == v1_save[i]);
72    }
73    {
74        typedef int T;
75        const unsigned N1 = 0;
76        const unsigned N2 = 0;
77        std::valarray<T> v1;
78        std::valarray<T> v2;
79        std::valarray<T> v1_save = v1;
80        std::valarray<T> v2_save = v2;
81        v1.swap(v2);
82        assert(v1.size() == v2_save.size());
83        for (int i = 0; i < v1.size(); ++i)
84            assert(v1[i] == v2_save[i]);
85        assert(v2.size() == v1_save.size());
86        for (int i = 0; i < v2.size(); ++i)
87            assert(v2[i] == v1_save[i]);
88    }
89}
90