get_long_long.pass.cpp revision 22a74dcf50ff4338767607fa5a9d2916c2c85525
12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===// 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// The LLVM Compiler Infrastructure 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is distributed under the University of Illinois Open Source 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// License. See LICENSE.TXT for details. 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===// 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// <locale> 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// class num_get<charT, InputIterator> 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// iter_type get(iter_type in, iter_type end, ios_base&, 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// ios_base::iostate& err, long long& v) const; 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <locale> 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <ios> 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <cassert> 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <streambuf> 212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "iterators.h" 222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 235d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinestypedef std::num_get<char, input_iterator<const char*> > F; 242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesclass my_facet 262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines : public F 272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{ 282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinespublic: 292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines explicit my_facet(std::size_t refs = 0) 302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines : F(refs) {} 312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}; 322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesclass my_numpunct 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines : public std::numpunct<char> 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{ 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinespublic: 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines my_numpunct() : std::numpunct<char>() {} 382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesprotected: 405d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines virtual char_type do_thousands_sep() const {return '_';} 412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines virtual std::string do_grouping() const {return std::string("\1\2\3");} 422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}; 432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main() 452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{ 462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines const my_facet f(1); 472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines std::ios ios(0); 482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines long long v = -1; 492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines const char str[] = "0"; 512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines std::ios_base::iostate err = ios.goodbit; 522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*> iter = 532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines f.get(input_iterator<const char*>(str), 542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*>(str+sizeof(str)), 552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ios, err, v); 565d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(iter.base() == str+sizeof(str)-1); 575d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(err == ios.goodbit); 585d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(v == 0); 595d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines } 602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines const char str[] = "1"; 622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines std::ios_base::iostate err = ios.goodbit; 632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*> iter = 642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines f.get(input_iterator<const char*>(str), 652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*>(str+sizeof(str)), 662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ios, err, v); 672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(iter.base() == str+sizeof(str)-1); 682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(err == ios.goodbit); 695d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(v == 1); 705d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines } 715d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines { 722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines const char str[] = "-1"; 732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines std::ios_base::iostate err = ios.goodbit; 742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*> iter = 752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines f.get(input_iterator<const char*>(str), 762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*>(str+sizeof(str)), 772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ios, err, v); 782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(iter.base() == str+sizeof(str)-1); 792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(err == ios.goodbit); 802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(v == -1); 812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines hex(ios); 832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines { 842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines const char str[] = "0x7FFFFFFFFFFFFFFF"; 855d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines std::ios_base::iostate err = ios.goodbit; 865d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines input_iterator<const char*> iter = 875d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines f.get(input_iterator<const char*>(str), 882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*>(str+sizeof(str)), 892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ios, err, v); 902d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(iter.base() == str+sizeof(str)-1); 912d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(err == ios.goodbit); 925d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines assert(v == 0x7FFFFFFFFFFFFFFFLL); 935d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines } 945d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines { 955d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines const char str[] = "-0x8000000000000000"; 962d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines std::ios_base::iostate err = ios.goodbit; 972d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*> iter = 982d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines f.get(input_iterator<const char*>(str), 992d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines input_iterator<const char*>(str+sizeof(str)), 1002d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines ios, err, v); 1012d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(iter.base() == str+sizeof(str)-1); 1022d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(err == ios.goodbit); 1032d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines assert(v == 0x8000000000000000LL); 1042d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines } 1052d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 1062d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines