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 // <complex>
11 
12 // constexpr complex(const T& re = T(), const T& im = T());
13 
14 #include <complex>
15 #include <cassert>
16 
17 #include "test_macros.h"
18 
19 template <class T>
20 void
test()21 test()
22 {
23     {
24     const std::complex<T> c;
25     assert(c.real() == 0);
26     assert(c.imag() == 0);
27     }
28     {
29     const std::complex<T> c = 7.5;
30     assert(c.real() == 7.5);
31     assert(c.imag() == 0);
32     }
33     {
34     const std::complex<T> c(8.5);
35     assert(c.real() == 8.5);
36     assert(c.imag() == 0);
37     }
38     {
39     const std::complex<T> c(10.5, -9.5);
40     assert(c.real() == 10.5);
41     assert(c.imag() == -9.5);
42     }
43 #if TEST_STD_VER >= 11
44     {
45     constexpr std::complex<T> c;
46     static_assert(c.real() == 0, "");
47     static_assert(c.imag() == 0, "");
48     }
49     {
50     constexpr std::complex<T> c = 7.5;
51     static_assert(c.real() == 7.5, "");
52     static_assert(c.imag() == 0, "");
53     }
54     {
55     constexpr std::complex<T> c(8.5);
56     static_assert(c.real() == 8.5, "");
57     static_assert(c.imag() == 0, "");
58     }
59     {
60     constexpr std::complex<T> c(10.5, -9.5);
61     static_assert(c.real() == 10.5, "");
62     static_assert(c.imag() == -9.5, "");
63     }
64 #endif
65 }
66 
main()67 int main()
68 {
69     test<float>();
70     test<double>();
71     test<long double>();
72 }
73