xref: /llvm-project/libcxx/test/std/numerics/complex.number/complex.ops/stream_input.pass.cpp (revision a7f9895cc18995549c7facb96e72718da282a864)
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 // UNSUPPORTED: no-localization
10 
11 // <complex>
12 
13 // template<class T, class charT, class traits>
14 //   basic_istream<charT, traits>&
15 //   operator>>(basic_istream<charT, traits>& is, complex<T>& x);
16 
17 #include <complex>
18 #include <sstream>
19 #include <cassert>
20 
21 #include "test_macros.h"
22 
main(int,char **)23 int main(int, char**)
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   return 0;
104 }
105