xref: /llvm-project/libcxx/test/std/numerics/numarray/template.valarray/valarray.cons/size.pass.cpp (revision 2b20304def44a0e3c4ab4ae90f50d4c4449ce03d)
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 // explicit valarray(size_t);
15 
16 #include <valarray>
17 #include <cassert>
18 
19 struct S {
20     S() : x(1) {}
21     ~S() { ++cnt_dtor; }
22     int x;
23     static size_t cnt_dtor;
24 };
25 
26 size_t S::cnt_dtor = 0;
27 
28 int main()
29 {
30     {
31         std::valarray<int> v(100);
32         assert(v.size() == 100);
33         for (int i = 0; i < 100; ++i)
34             assert(v[i] == 0);
35     }
36     {
37         std::valarray<double> v(100);
38         assert(v.size() == 100);
39         for (int i = 0; i < 100; ++i)
40             assert(v[i] == 0);
41     }
42     {
43         std::valarray<std::valarray<double> > v(100);
44         assert(v.size() == 100);
45         for (int i = 0; i < 100; ++i)
46             assert(v[i].size() == 0);
47     }
48     {
49         std::valarray<S> v(100);
50         assert(v.size() == 100);
51         for (int i = 0; i < 100; ++i)
52             assert(v[i].x == 1);
53     }
54     assert(S::cnt_dtor == 100);
55 }
56