1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // <complex>
10 
11 // template<class T, class charT, class traits>
12 //   basic_istream<charT, traits>&
13 //   operator>>(basic_istream<charT, traits>& is, complex<T>& x);
14 
15 #include <complex>
16 #include <sstream>
17 #include <cassert>
18 
19 int main(int, char**)
20 {
21     {
22         std::istringstream is("5");
23         std::complex<double> c;
24         is >> c;
25         assert(c == std::complex<double>(5, 0));
26         assert(is.eof());
27     }
28     {
29         std::istringstream is(" 5 ");
30         std::complex<double> c;
31         is >> c;
32         assert(c == std::complex<double>(5, 0));
33         assert(is.good());
34     }
35     {
36         std::istringstream is(" 5, ");
37         std::complex<double> c;
38         is >> c;
39         assert(c == std::complex<double>(5, 0));
40         assert(is.good());
41     }
42     {
43         std::istringstream is(" , 5, ");
44         std::complex<double> c;
45         is >> c;
46         assert(c == std::complex<double>(0, 0));
47         assert(is.fail());
48     }
49     {
50         std::istringstream is("5.5 ");
51         std::complex<double> c;
52         is >> c;
53         assert(c == std::complex<double>(5.5, 0));
54         assert(is.good());
55     }
56     {
57         std::istringstream is(" ( 5.5 ) ");
58         std::complex<double> c;
59         is >> c;
60         assert(c == std::complex<double>(5.5, 0));
61         assert(is.good());
62     }
63     {
64         std::istringstream is("  5.5)");
65         std::complex<double> c;
66         is >> c;
67         assert(c == std::complex<double>(5.5, 0));
68         assert(is.good());
69     }
70     {
71         std::istringstream is("(5.5 ");
72         std::complex<double> c;
73         is >> c;
74         assert(c == std::complex<double>(0, 0));
75         assert(is.fail());
76     }
77     {
78         std::istringstream is("(5.5,");
79         std::complex<double> c;
80         is >> c;
81         assert(c == std::complex<double>(0, 0));
82         assert(is.fail());
83     }
84     {
85         std::istringstream is("( -5.5 , -6.5 )");
86         std::complex<double> c;
87         is >> c;
88         assert(c == std::complex<double>(-5.5, -6.5));
89         assert(!is.eof());
90     }
91     {
92         std::istringstream is("(-5.5,-6.5)");
93         std::complex<double> c;
94         is >> c;
95         assert(c == std::complex<double>(-5.5, -6.5));
96         assert(!is.eof());
97     }
98 
99   return 0;
100 }
101