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 #include "test_macros.h"
20 
21 int main(int, char**)
22 {
23     {
24         std::istringstream is("5");
25         std::complex<double> c;
26         is >> c;
27         assert(c == std::complex<double>(5, 0));
28         assert(is.eof());
29     }
30     {
31         std::istringstream is(" 5 ");
32         std::complex<double> c;
33         is >> c;
34         assert(c == std::complex<double>(5, 0));
35         assert(is.good());
36     }
37     {
38         std::istringstream is(" 5, ");
39         std::complex<double> c;
40         is >> c;
41         assert(c == std::complex<double>(5, 0));
42         assert(is.good());
43     }
44     {
45         std::istringstream is(" , 5, ");
46         std::complex<double> c;
47         is >> c;
48         assert(c == std::complex<double>(0, 0));
49         assert(is.fail());
50     }
51     {
52         std::istringstream is("5.5 ");
53         std::complex<double> c;
54         is >> c;
55         assert(c == std::complex<double>(5.5, 0));
56         assert(is.good());
57     }
58     {
59         std::istringstream is(" ( 5.5 ) ");
60         std::complex<double> c;
61         is >> c;
62         assert(c == std::complex<double>(5.5, 0));
63         assert(is.good());
64     }
65     {
66         std::istringstream is("  5.5)");
67         std::complex<double> c;
68         is >> c;
69         assert(c == std::complex<double>(5.5, 0));
70         assert(is.good());
71     }
72     {
73         std::istringstream is("(5.5 ");
74         std::complex<double> c;
75         is >> c;
76         assert(c == std::complex<double>(0, 0));
77         assert(is.fail());
78     }
79     {
80         std::istringstream is("(5.5,");
81         std::complex<double> c;
82         is >> c;
83         assert(c == std::complex<double>(0, 0));
84         assert(is.fail());
85     }
86     {
87         std::istringstream is("( -5.5 , -6.5 )");
88         std::complex<double> c;
89         is >> c;
90         assert(c == std::complex<double>(-5.5, -6.5));
91         assert(!is.eof());
92     }
93     {
94         std::istringstream is("(-5.5,-6.5)");
95         std::complex<double> c;
96         is >> c;
97         assert(c == std::complex<double>(-5.5, -6.5));
98         assert(!is.eof());
99     }
100 
101   return 0;
102 }
103