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(iter_type s, iter_type end, ios_base& f,
     15 //               ios_base::iostate& err, tm *t, char format, char modifier = 0) 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[] = "mon";
     41         err = std::ios_base::goodbit;
     42         t = std::tm();
     43         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'a');
     44         assert(i.base() == in+sizeof(in)-1);
     45         assert(t.tm_wday == 1);
     46         assert(err == std::ios_base::eofbit);
     47     }
     48     {
     49         const char in[] = "wednesdaY";
     50         err = std::ios_base::goodbit;
     51         t = std::tm();
     52         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'A');
     53         assert(i.base() == in+sizeof(in)-1);
     54         assert(t.tm_wday == 3);
     55         assert(err == std::ios_base::eofbit);
     56     }
     57     {
     58         const char in[] = "June";
     59         err = std::ios_base::goodbit;
     60         t = std::tm();
     61         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'b');
     62         assert(i.base() == in+sizeof(in)-1);
     63         assert(t.tm_mon == 5);
     64         assert(err == std::ios_base::eofbit);
     65     }
     66     {
     67         const char in[] = "Jul";
     68         err = std::ios_base::goodbit;
     69         t = std::tm();
     70         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'B');
     71         assert(i.base() == in+sizeof(in)-1);
     72         assert(t.tm_mon == 6);
     73         assert(err == std::ios_base::eofbit);
     74     }
     75     {
     76         const char in[] = "Thu Jun  6 09:49:10 2009";
     77         err = std::ios_base::goodbit;
     78         t = std::tm();
     79         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'c');
     80         assert(i.base() == in+sizeof(in)-1);
     81         assert(t.tm_wday == 4);
     82         assert(t.tm_mon == 5);
     83         assert(t.tm_mday == 6);
     84         assert(t.tm_hour == 9);
     85         assert(t.tm_min == 49);
     86         assert(t.tm_sec == 10);
     87         assert(t.tm_year == 109);
     88         assert(err == std::ios_base::eofbit);
     89     }
     90     {
     91         const char in[] = "11";
     92         err = std::ios_base::goodbit;
     93         t = std::tm();
     94         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'd');
     95         assert(i.base() == in+sizeof(in)-1);
     96         assert(t.tm_mday == 11);
     97         assert(err == std::ios_base::eofbit);
     98     }
     99     {
    100         const char in[] = "2/1/1";
    101         err = std::ios_base::goodbit;
    102         t = std::tm();
    103         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'D');
    104         assert(i.base() == in+sizeof(in)-1);
    105         assert(t.tm_mon == 1);
    106         assert(t.tm_mday == 1);
    107         assert(t.tm_year == 101);
    108         assert(err == std::ios_base::eofbit);
    109     }
    110     {
    111         const char in[] = "11";
    112         err = std::ios_base::goodbit;
    113         t = std::tm();
    114         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'e');
    115         assert(i.base() == in+sizeof(in)-1);
    116         assert(t.tm_mday == 11);
    117         assert(err == std::ios_base::eofbit);
    118     }
    119     {
    120         const char in[] = "June";
    121         err = std::ios_base::goodbit;
    122         t = std::tm();
    123         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'h');
    124         assert(i.base() == in+sizeof(in)-1);
    125         assert(t.tm_mon == 5);
    126         assert(err == std::ios_base::eofbit);
    127     }
    128     {
    129         const char in[] = "19";
    130         err = std::ios_base::goodbit;
    131         t = std::tm();
    132         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'H');
    133         assert(i.base() == in+sizeof(in)-1);
    134         assert(t.tm_hour == 19);
    135         assert(err == std::ios_base::eofbit);
    136     }
    137     {
    138         const char in[] = "12";
    139         err = std::ios_base::goodbit;
    140         t = std::tm();
    141         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'm');
    142         assert(i.base() == in+sizeof(in)-1);
    143         assert(t.tm_mon == 11);
    144         assert(err == std::ios_base::eofbit);
    145     }
    146     {
    147         const char in[] = "59";
    148         err = std::ios_base::goodbit;
    149         t = std::tm();
    150         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'M');
    151         assert(i.base() == in+sizeof(in)-1);
    152         assert(t.tm_min == 59);
    153         assert(err == std::ios_base::eofbit);
    154     }
    155     {
    156         const char in[] = "\t\n ";
    157         err = std::ios_base::goodbit;
    158         t = std::tm();
    159         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'n');
    160         assert(i.base() == in+sizeof(in)-1);
    161         assert(err == std::ios_base::eofbit);
    162     }
    163     {
    164         const char in[] = "09:49:10 PM";
    165         err = std::ios_base::goodbit;
    166         t = std::tm();
    167         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
    168         assert(i.base() == in+sizeof(in)-1);
    169         assert(t.tm_hour == 21);
    170         assert(t.tm_min == 49);
    171         assert(t.tm_sec == 10);
    172         assert(err == std::ios_base::eofbit);
    173     }
    174     {
    175         const char in[] = "09:49:10 AM";
    176         err = std::ios_base::goodbit;
    177         t = std::tm();
    178         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
    179         assert(i.base() == in+sizeof(in)-1);
    180         assert(t.tm_hour == 9);
    181         assert(t.tm_min == 49);
    182         assert(t.tm_sec == 10);
    183         assert(err == std::ios_base::eofbit);
    184     }
    185     {
    186         const char in[] = "12:49:10 AM";
    187         err = std::ios_base::goodbit;
    188         t = std::tm();
    189         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
    190         assert(i.base() == in+sizeof(in)-1);
    191         assert(t.tm_hour == 0);
    192         assert(t.tm_min == 49);
    193         assert(t.tm_sec == 10);
    194         assert(err == std::ios_base::eofbit);
    195     }
    196     {
    197         const char in[] = "12:49:10 PM";
    198         err = std::ios_base::goodbit;
    199         t = std::tm();
    200         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
    201         assert(i.base() == in+sizeof(in)-1);
    202         assert(t.tm_hour == 12);
    203         assert(t.tm_min == 49);
    204         assert(t.tm_sec == 10);
    205         assert(err == std::ios_base::eofbit);
    206     }
    207     {
    208         const char in[] = "09:49";
    209         err = std::ios_base::goodbit;
    210         t = std::tm();
    211         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'R');
    212         assert(i.base() == in+sizeof(in)-1);
    213         assert(t.tm_hour == 9);
    214         assert(t.tm_min == 49);
    215         assert(t.tm_sec == 0);
    216         assert(err == std::ios_base::eofbit);
    217     }
    218     {
    219         const char in[] = "60";
    220         err = std::ios_base::goodbit;
    221         t = std::tm();
    222         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'S');
    223         assert(i.base() == in+sizeof(in)-1);
    224         assert(t.tm_hour == 0);
    225         assert(t.tm_min == 0);
    226         assert(t.tm_sec == 60);
    227         assert(err == std::ios_base::eofbit);
    228     }
    229     {
    230         const char in[] = "\t\n ";
    231         err = std::ios_base::goodbit;
    232         t = std::tm();
    233         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 't');
    234         assert(i.base() == in+sizeof(in)-1);
    235         assert(err == std::ios_base::eofbit);
    236     }
    237     {
    238         const char in[] = "21:49:10";
    239         err = std::ios_base::goodbit;
    240         t = std::tm();
    241         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'T');
    242         assert(i.base() == in+sizeof(in)-1);
    243         assert(t.tm_hour == 21);
    244         assert(t.tm_min == 49);
    245         assert(t.tm_sec == 10);
    246         assert(err == std::ios_base::eofbit);
    247     }
    248     {
    249         const char in[] = "3";
    250         err = std::ios_base::goodbit;
    251         t = std::tm();
    252         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'w');
    253         assert(i.base() == in+sizeof(in)-1);
    254         assert(t.tm_wday == 3);
    255         assert(err == std::ios_base::eofbit);
    256     }
    257     {
    258         const char in[] = "06/06/09";
    259         err = std::ios_base::goodbit;
    260         t = std::tm();
    261         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'x');
    262         assert(i.base() == in+sizeof(in)-1);
    263         assert(t.tm_mon == 5);
    264         assert(t.tm_mday == 6);
    265         assert(t.tm_year == 109);
    266         assert(err == std::ios_base::eofbit);
    267     }
    268     {
    269         const char in[] = "21:49:10";
    270         err = std::ios_base::goodbit;
    271         t = std::tm();
    272         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'X');
    273         assert(i.base() == in+sizeof(in)-1);
    274         assert(t.tm_hour == 21);
    275         assert(t.tm_min == 49);
    276         assert(t.tm_sec == 10);
    277         assert(err == std::ios_base::eofbit);
    278     }
    279     {
    280         const char in[] = "68";
    281         err = std::ios_base::goodbit;
    282         t = std::tm();
    283         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'y');
    284         assert(i.base() == in+sizeof(in)-1);
    285         assert(t.tm_year == 168);
    286         assert(err == std::ios_base::eofbit);
    287     }
    288     {
    289         const char in[] = "68";
    290         err = std::ios_base::goodbit;
    291         t = std::tm();
    292         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'Y');
    293         assert(i.base() == in+sizeof(in)-1);
    294         assert(t.tm_year == -1832);
    295         assert(err == std::ios_base::eofbit);
    296     }
    297     {
    298         const char in[] = "%";
    299         err = std::ios_base::goodbit;
    300         t = std::tm();
    301         I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, '%');
    302         assert(i.base() == in+sizeof(in)-1);
    303         assert(err == std::ios_base::eofbit);
    304     }
    305 }
    306