get_long_double.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
1//===----------------------------------------------------------------------===// 2// 3// ��������������������The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <locale> 11 12// class num_get<charT, InputIterator> 13 14// iter_type get(iter_type in, iter_type end, ios_base&, 15// ios_base::iostate& err, long double& v) const; 16 17#include <locale> 18#include <ios> 19#include <cassert> 20#include <streambuf> 21#include <cmath> 22#include "iterators.h" 23 24typedef std::num_get<char, input_iterator<const char*> > F; 25 26class my_facet 27 : public F 28{ 29public: 30 explicit my_facet(std::size_t refs = 0) 31 : F(refs) {} 32}; 33 34int main() 35{ 36 const my_facet f(1); 37 std::ios ios(0); 38 long double v = -1; 39 { 40 const char str[] = "123"; 41 assert((ios.flags() & ios.basefield) == ios.dec); 42 assert(ios.getloc().name() == "C"); 43 std::ios_base::iostate err = ios.goodbit; 44 input_iterator<const char*> iter = 45 f.get(input_iterator<const char*>(str), 46 input_iterator<const char*>(str+sizeof(str)), 47 ios, err, v); 48 assert(iter.base() == str+sizeof(str)-1); 49 assert(err == ios.goodbit); 50 assert(v == 123); 51 } 52 { 53 const char str[] = "-123"; 54 std::ios_base::iostate err = ios.goodbit; 55 input_iterator<const char*> iter = 56 f.get(input_iterator<const char*>(str), 57 input_iterator<const char*>(str+sizeof(str)), 58 ios, err, v); 59 assert(iter.base() == str+sizeof(str)-1); 60 assert(err == ios.goodbit); 61 assert(v == -123); 62 } 63 { 64 const char str[] = "123.5"; 65 std::ios_base::iostate err = ios.goodbit; 66 input_iterator<const char*> iter = 67 f.get(input_iterator<const char*>(str), 68 input_iterator<const char*>(str+sizeof(str)), 69 ios, err, v); 70 assert(iter.base() == str+sizeof(str)-1); 71 assert(err == ios.goodbit); 72 assert(v == 123.5); 73 } 74 { 75 const char str[] = "125e-1"; 76 hex(ios); 77 std::ios_base::iostate err = ios.goodbit; 78 input_iterator<const char*> iter = 79 f.get(input_iterator<const char*>(str), 80 input_iterator<const char*>(str+sizeof(str)), 81 ios, err, v); 82 assert(iter.base() == str+sizeof(str)-1); 83 assert(err == ios.goodbit); 84 assert(v == 125e-1); 85 } 86 { 87 const char str[] = "0x125p-1"; 88 hex(ios); 89 std::ios_base::iostate err = ios.goodbit; 90 input_iterator<const char*> iter = 91 f.get(input_iterator<const char*>(str), 92 input_iterator<const char*>(str+sizeof(str)), 93 ios, err, v); 94 assert(iter.base() == str+sizeof(str)-1); 95 assert(err == ios.goodbit); 96 assert(v == 0x125p-1); 97 } 98 { 99 const char str[] = "inf"; 100 hex(ios); 101 std::ios_base::iostate err = ios.goodbit; 102 input_iterator<const char*> iter = 103 f.get(input_iterator<const char*>(str), 104 input_iterator<const char*>(str+sizeof(str)), 105 ios, err, v); 106 assert(iter.base() == str+sizeof(str)-1); 107 assert(err == ios.goodbit); 108 assert(v == INFINITY); 109 } 110 { 111 const char str[] = "INF"; 112 hex(ios); 113 std::ios_base::iostate err = ios.goodbit; 114 input_iterator<const char*> iter = 115 f.get(input_iterator<const char*>(str), 116 input_iterator<const char*>(str+sizeof(str)), 117 ios, err, v); 118 assert(iter.base() == str+sizeof(str)-1); 119 assert(err == ios.goodbit); 120 assert(v == INFINITY); 121 } 122 { 123 const char str[] = "-inf"; 124 hex(ios); 125 std::ios_base::iostate err = ios.goodbit; 126 input_iterator<const char*> iter = 127 f.get(input_iterator<const char*>(str), 128 input_iterator<const char*>(str+sizeof(str)), 129 ios, err, v); 130 assert(iter.base() == str+sizeof(str)-1); 131 assert(err == ios.goodbit); 132 assert(v == -INFINITY); 133 } 134 { 135 const char str[] = "-INF"; 136 hex(ios); 137 std::ios_base::iostate err = ios.goodbit; 138 input_iterator<const char*> iter = 139 f.get(input_iterator<const char*>(str), 140 input_iterator<const char*>(str+sizeof(str)), 141 ios, err, v); 142 assert(iter.base() == str+sizeof(str)-1); 143 assert(err == ios.goodbit); 144 assert(v == -INFINITY); 145 } 146 { 147 const char str[] = "nan"; 148 hex(ios); 149 std::ios_base::iostate err = ios.goodbit; 150 input_iterator<const char*> iter = 151 f.get(input_iterator<const char*>(str), 152 input_iterator<const char*>(str+sizeof(str)), 153 ios, err, v); 154 assert(iter.base() == str+sizeof(str)-1); 155 assert(err == ios.goodbit); 156 assert(std::isnan(v)); 157 } 158 { 159 const char str[] = "NAN"; 160 hex(ios); 161 std::ios_base::iostate err = ios.goodbit; 162 input_iterator<const char*> iter = 163 f.get(input_iterator<const char*>(str), 164 input_iterator<const char*>(str+sizeof(str)), 165 ios, err, v); 166 assert(iter.base() == str+sizeof(str)-1); 167 assert(err == ios.goodbit); 168 assert(std::isnan(v)); 169 } 170} 171