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