Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / libstdc++-v3 / testsuite / 27_io / basic_istream / extractors_arithmetic / char / 01.cc
1 // 1999-04-12 bkoz
2
3 // Copyright (C) 1999-2013 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library.  This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING3.  If not see
18 // <http://www.gnu.org/licenses/>.
19
20 // 27.6.1.2.2 arithmetic extractors
21
22 #include <cstdio> // for printf
23 #include <istream>
24 #include <sstream>
25 #include <locale>
26 #include <testsuite_hooks.h>
27
28 std::string str_01;
29 std::string str_02("true false 0 1 110001");
30 std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5");
31 std::string str_04("0123");
32
33 std::stringbuf isbuf_01(std::ios_base::in);
34 std::stringbuf isbuf_02(str_02, std::ios_base::in);
35 std::stringbuf isbuf_03(str_03, std::ios_base::in);
36 std::stringbuf isbuf_04(str_04, std::ios_base::in);
37
38 std::istream is_01(0);
39 std::istream is_02(&isbuf_02);
40 std::istream is_03(&isbuf_03);
41 std::istream is_04(&isbuf_04);
42 std::stringstream ss_01(str_01);
43  
44 // minimal sanity check
45 bool test01() {
46
47   bool test __attribute__((unused)) = true;
48
49   // Integral Types:
50   bool                  b1  = false;
51   short                 s1  = 0;
52   int                   i1  = 0;
53   long                  l1  = 0;
54   unsigned short        us1 = 0;
55   unsigned int          ui1 = 0;
56   unsigned long         ul1 = 0;
57
58   // Floating-point Types:
59   float                 f1  = 0;
60   double                d1  = 0;
61   long double           ld1 = 0;
62
63   // process alphanumeric versions of bool values
64   is_02.setf(std::ios_base::boolalpha);
65   is_02.flags();
66   is_02 >> b1;
67   VERIFY( b1 == 1 );
68   is_02 >> b1;
69   VERIFY( b1 == 0 );
70
71   // process numeric versions of of bool values
72   is_02.unsetf(std::ios_base::boolalpha);
73   is_02.flags();
74   is_02 >> b1;
75   VERIFY( b1 == 0 );
76   is_02 >> b1;
77   VERIFY( b1 == 1 );
78
79   // is_03 == "-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"
80   is_03 >> l1;
81   VERIFY( l1 == -19999999 );
82   is_03 >> ul1;
83   VERIFY( ul1 == 777777 );
84   is_03 >> i1;
85   VERIFY( i1 == -234234 );
86   is_03 >> ui1;
87   VERIFY( ui1 == 233 );
88   is_03 >> s1;
89   VERIFY( s1 == -234 );
90   is_03 >> us1;
91   VERIFY( us1 == 33 );
92   is_03 >> b1;
93   VERIFY( b1 == 1 );
94   is_03 >> ld1;
95   VERIFY( ld1 == 66300.25 );
96   is_03 >> d1;
97   VERIFY( d1 == .315 );
98   is_03 >> f1;
99   VERIFY( f1 == 1.5 );
100
101   is_04 >> std::hex >> i1;
102   std::printf ("%d %d %d\n", i1, i1 == 0x123, test);
103   VERIFY( i1 == 0x123 );
104   std::printf ("%d %d %d\n", i1, i1 == 0x123, test);
105
106   // test void pointers
107   int i = 55;
108   void* po = &i;
109   void* pi;
110
111   ss_01 << po;
112   ss_01 >> pi;
113   std::printf ("%p %p\n", pi, po);
114   VERIFY( po == pi );
115   return test;
116 }
117
118 int main()
119 {
120   test01();
121   return 0;
122 }