Home | History | Annotate | Download | only in locale.time.get.members
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <locale>
     11 
     12 // class time_get<charT, InputIterator>
     13 
     14 // iter_type get_year(iter_type s, iter_type end, ios_base& str,
     15 //                    ios_base::iostate& err, tm* t) const;
     16 
     17 #include <locale>
     18 #include <cassert>
     19 #include "test_iterators.h"
     20 
     21 typedef input_iterator<const char*> I;
     22 
     23 typedef std::time_get<char, I> F;
     24 
     25 class my_facet
     26     : public F
     27 {
     28 public:
     29     explicit my_facet(std::size_t refs = 0)
     30         : F(refs) {}
     31 };
     32 
     33 int main()
     34 {
     35     const my_facet f(1);
     36     std::ios ios(0);
     37     std::ios_base::iostate err;
     38     std::tm t;
     39     {
     40         const char in[] = "0";
     41         err = std::ios_base::goodbit;
     42         t = std::tm();
     43         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     44         assert(i.base() == in+sizeof(in)-1);
     45         assert(t.tm_year == 100);
     46         assert(err == std::ios_base::eofbit);
     47     }
     48     {
     49         const char in[] = "00";
     50         err = std::ios_base::goodbit;
     51         t = std::tm();
     52         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     53         assert(i.base() == in+sizeof(in)-1);
     54         assert(t.tm_year == 100);
     55         assert(err == std::ios_base::eofbit);
     56     }
     57     {
     58         const char in[] = "1";
     59         err = std::ios_base::goodbit;
     60         t = std::tm();
     61         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     62         assert(i.base() == in+sizeof(in)-1);
     63         assert(t.tm_year == 101);
     64         assert(err == std::ios_base::eofbit);
     65     }
     66     {
     67         const char in[] = "68";
     68         err = std::ios_base::goodbit;
     69         t = std::tm();
     70         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     71         assert(i.base() == in+sizeof(in)-1);
     72         assert(t.tm_year == 168);
     73         assert(err == std::ios_base::eofbit);
     74     }
     75     {
     76         const char in[] = "69";
     77         err = std::ios_base::goodbit;
     78         t = std::tm();
     79         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     80         assert(i.base() == in+sizeof(in)-1);
     81         assert(t.tm_year == 69);
     82         assert(err == std::ios_base::eofbit);
     83     }
     84     {
     85         const char in[] = "99";
     86         err = std::ios_base::goodbit;
     87         t = std::tm();
     88         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     89         assert(i.base() == in+sizeof(in)-1);
     90         assert(t.tm_year == 99);
     91         assert(err == std::ios_base::eofbit);
     92     }
     93     {
     94         const char in[] = "100";
     95         err = std::ios_base::goodbit;
     96         t = std::tm();
     97         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
     98         assert(i.base() == in+sizeof(in)-1);
     99         assert(t.tm_year == -1800);
    100         assert(err == std::ios_base::eofbit);
    101     }
    102     {
    103         const char in[] = "1900";
    104         err = std::ios_base::goodbit;
    105         t = std::tm();
    106         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
    107         assert(i.base() == in+sizeof(in)-1);
    108         assert(t.tm_year == 0);
    109         assert(err == std::ios_base::eofbit);
    110     }
    111     {
    112         const char in[] = "1968";
    113         err = std::ios_base::goodbit;
    114         t = std::tm();
    115         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
    116         assert(i.base() == in+sizeof(in)-1);
    117         assert(t.tm_year == 68);
    118         assert(err == std::ios_base::eofbit);
    119     }
    120     {
    121         const char in[] = "2000";
    122         err = std::ios_base::goodbit;
    123         t = std::tm();
    124         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
    125         assert(i.base() == in+sizeof(in)-1);
    126         assert(t.tm_year == 100);
    127         assert(err == std::ios_base::eofbit);
    128     }
    129     {
    130         const char in[] = "2999c";
    131         err = std::ios_base::goodbit;
    132         t = std::tm();
    133         I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
    134         assert(i.base() == in+sizeof(in)-2);
    135         assert(t.tm_year == 1099);
    136         assert(err == std::ios_base::goodbit);
    137     }
    138 }
    139