1// 1999-04-12 bkoz 2 3// Copyright (C) 1999, 2000, 2002, 2003 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 2, 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 COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// 27.6.1.2.2 arithmetic extractors 22 23#include <cstdio> // for printf 24#include <istream> 25#include <sstream> 26#include <locale> 27#include <testsuite_hooks.h> 28 29std::string str_01; 30std::string str_02("true false 0 1 110001"); 31std::string str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5"); 32std::string str_04("0123"); 33 34std::stringbuf isbuf_01(std::ios_base::in); 35std::stringbuf isbuf_02(str_02, std::ios_base::in); 36std::stringbuf isbuf_03(str_03, std::ios_base::in); 37std::stringbuf isbuf_04(str_04, std::ios_base::in); 38 39std::istream is_01(NULL); 40std::istream is_02(&isbuf_02); 41std::istream is_03(&isbuf_03); 42std::istream is_04(&isbuf_04); 43std::stringstream ss_01(str_01); 44 45// minimal sanity check 46bool test01() { 47 48 bool test __attribute__((unused)) = true; 49 50 // Integral Types: 51 bool b1 = false; 52 short s1 = 0; 53 int i1 = 0; 54 long l1 = 0; 55 unsigned short us1 = 0; 56 unsigned int ui1 = 0; 57 unsigned long ul1 = 0; 58 59 // Floating-point Types: 60 float f1 = 0; 61 double d1 = 0; 62 long double ld1 = 0; 63 64 // process alphanumeric versions of bool values 65 std::ios_base::fmtflags fmt = is_02.flags(); 66 bool testfmt = fmt & std::ios_base::boolalpha; 67 is_02.setf(std::ios_base::boolalpha); 68 fmt = is_02.flags(); 69 testfmt = fmt & std::ios_base::boolalpha; 70 is_02 >> b1; 71 VERIFY( b1 == 1 ); 72 is_02 >> b1; 73 VERIFY( b1 == 0 ); 74 75 // process numeric versions of of bool values 76 is_02.unsetf(std::ios_base::boolalpha); 77 fmt = is_02.flags(); 78 testfmt = fmt & std::ios_base::boolalpha; 79 is_02 >> b1; 80 VERIFY( b1 == 0 ); 81 is_02 >> b1; 82 VERIFY( b1 == 1 ); 83 84 // is_03 == "-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5" 85 is_03 >> l1; 86 VERIFY( l1 == -19999999 ); 87 is_03 >> ul1; 88 VERIFY( ul1 == 777777 ); 89 is_03 >> i1; 90 VERIFY( i1 == -234234 ); 91 is_03 >> ui1; 92 VERIFY( ui1 == 233 ); 93 is_03 >> s1; 94 VERIFY( s1 == -234 ); 95 is_03 >> us1; 96 VERIFY( us1 == 33 ); 97 is_03 >> b1; 98 VERIFY( b1 == 1 ); 99 is_03 >> ld1; 100 VERIFY( ld1 == 66300.25 ); 101 is_03 >> d1; 102 VERIFY( d1 == .315 ); 103 is_03 >> f1; 104 VERIFY( f1 == 1.5 ); 105 106 is_04 >> std::hex >> i1; 107 std::printf ("%d %d %d\n", i1, i1 == 0x123, test); 108 VERIFY( i1 == 0x123 ); 109 std::printf ("%d %d %d\n", i1, i1 == 0x123, test); 110 111 // test void pointers 112 int i = 55; 113 void* po = &i; 114 void* pi; 115 116 ss_01 << po; 117 ss_01 >> pi; 118 std::printf ("%p %p\n", pi, po); 119 VERIFY( po == pi ); 120 return test; 121} 122 123int main() 124{ 125 test01(); 126 return 0; 127} 128