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 // XFAIL: with_system_lib=x86_64-apple-darwin11
11 // XFAIL: with_system_lib=x86_64-apple-darwin12
12 
13 // <complex>
14 
15 // template<class T, class charT, class traits>
16 //   basic_istream<charT, traits>&
17 //   operator>>(basic_istream<charT, traits>& is, complex<T>& x);
18 
19 #include <complex>
20 #include <sstream>
21 #include <cassert>
22 
23 int main()
24 {
25     {
26         std::istringstream is("5");
27         std::complex<double> c;
28         is >> c;
29         assert(c == std::complex<double>(5, 0));
30         assert(is.eof());
31     }
32     {
33         std::istringstream is(" 5 ");
34         std::complex<double> c;
35         is >> c;
36         assert(c == std::complex<double>(5, 0));
37         assert(is.good());
38     }
39     {
40         std::istringstream is(" 5, ");
41         std::complex<double> c;
42         is >> c;
43         assert(c == std::complex<double>(5, 0));
44         assert(is.good());
45     }
46     {
47         std::istringstream is(" , 5, ");
48         std::complex<double> c;
49         is >> c;
50         assert(c == std::complex<double>(0, 0));
51         assert(is.fail());
52     }
53     {
54         std::istringstream is("5.5 ");
55         std::complex<double> c;
56         is >> c;
57         assert(c == std::complex<double>(5.5, 0));
58         assert(is.good());
59     }
60     {
61         std::istringstream is(" ( 5.5 ) ");
62         std::complex<double> c;
63         is >> c;
64         assert(c == std::complex<double>(5.5, 0));
65         assert(is.good());
66     }
67     {
68         std::istringstream is("  5.5)");
69         std::complex<double> c;
70         is >> c;
71         assert(c == std::complex<double>(5.5, 0));
72         assert(is.good());
73     }
74     {
75         std::istringstream is("(5.5 ");
76         std::complex<double> c;
77         is >> c;
78         assert(c == std::complex<double>(0, 0));
79         assert(is.fail());
80     }
81     {
82         std::istringstream is("(5.5,");
83         std::complex<double> c;
84         is >> c;
85         assert(c == std::complex<double>(0, 0));
86         assert(is.fail());
87     }
88     {
89         std::istringstream is("( -5.5 , -6.5 )");
90         std::complex<double> c;
91         is >> c;
92         assert(c == std::complex<double>(-5.5, -6.5));
93         assert(!is.eof());
94     }
95     {
96         std::istringstream is("(-5.5,-6.5)");
97         std::complex<double> c;
98         is >> c;
99         assert(c == std::complex<double>(-5.5, -6.5));
100         assert(!is.eof());
101     }
102 }
103