Home | History | Annotate | Download | only in locale.time.get.byname
      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_byname<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 #include "platform_support.h" // locale name macros
     22 
     23 typedef input_iterator<const char*> I;
     24 
     25 typedef std::time_get_byname<char, I> F;
     26 
     27 class my_facet
     28     : public F
     29 {
     30 public:
     31     explicit my_facet(const std::string& nm, std::size_t refs = 0)
     32         : F(nm, refs) {}
     33 };
     34 
     35 int main()
     36 {
     37     std::ios ios(0);
     38     std::ios_base::iostate err;
     39     std::tm t;
     40     {
     41         const my_facet f(LOCALE_en_US_UTF_8, 1);
     42         const char in[] = "Sat Dec 31 23:55:59 2061";
     43         err = std::ios_base::goodbit;
     44         t = std::tm();
     45         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
     46         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
     47         assert(t.tm_sec == 59);
     48         assert(t.tm_min == 55);
     49         assert(t.tm_hour == 23);
     50         assert(t.tm_mday == 31);
     51         assert(t.tm_mon == 11);
     52         assert(t.tm_year == 161);
     53         assert(t.tm_wday == 6);
     54         assert(err == std::ios_base::eofbit);
     55     }
     56     {
     57         const my_facet f(LOCALE_en_US_UTF_8, 1);
     58         const char in[] = "23:55:59";
     59         err = std::ios_base::goodbit;
     60         t = std::tm();
     61         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
     62         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
     63         assert(t.tm_sec == 59);
     64         assert(t.tm_min == 55);
     65         assert(t.tm_hour == 23);
     66         assert(err == std::ios_base::eofbit);
     67     }
     68     {
     69         const my_facet f(LOCALE_fr_FR_UTF_8, 1);
     70         const char in[] = "Sam 31 d""\xC3\xA9""c 23:55:59 2061";
     71         err = std::ios_base::goodbit;
     72         t = std::tm();
     73         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
     74         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
     75         assert(t.tm_sec == 59);
     76         assert(t.tm_min == 55);
     77         assert(t.tm_hour == 23);
     78         assert(t.tm_mday == 31);
     79         assert(t.tm_mon == 11);
     80         assert(t.tm_year == 161);
     81         assert(t.tm_wday == 6);
     82         assert(err == std::ios_base::eofbit);
     83     }
     84     {
     85         const my_facet f(LOCALE_fr_FR_UTF_8, 1);
     86         const char in[] = "23:55:59";
     87         err = std::ios_base::goodbit;
     88         t = std::tm();
     89         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
     90         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
     91         assert(t.tm_sec == 59);
     92         assert(t.tm_min == 55);
     93         assert(t.tm_hour == 23);
     94         assert(err == std::ios_base::eofbit);
     95     }
     96     {
     97         const my_facet f(LOCALE_ru_RU_UTF_8, 1);
     98         const char in[] = "\xD1\x81\xD1\x83\xD0\xB1\xD0\xB1"
     99                           "\xD0\xBE\xD1\x82\xD0\xB0"
    100                           ", 31 "
    101                           "\xD0\xB4\xD0\xB5\xD0\xBA\xD0\xB0"
    102                           "\xD0\xB1\xD1\x80\xD1\x8F"
    103                           " 2061 "
    104                           "\xD0\xB3"
    105                           ". 23:55:59";
    106         err = std::ios_base::goodbit;
    107         t = std::tm();
    108         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
    109         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
    110         assert(t.tm_sec == 59);
    111         assert(t.tm_min == 55);
    112         assert(t.tm_hour == 23);
    113         assert(t.tm_mday == 31);
    114         assert(t.tm_mon == 11);
    115         assert(t.tm_year == 161);
    116         assert(t.tm_wday == 6);
    117         assert(err == std::ios_base::eofbit);
    118     }
    119     {
    120         const my_facet f(LOCALE_ru_RU_UTF_8, 1);
    121         const char in[] = "23:55:59";
    122         err = std::ios_base::goodbit;
    123         t = std::tm();
    124         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
    125         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
    126         assert(t.tm_sec == 59);
    127         assert(t.tm_min == 55);
    128         assert(t.tm_hour == 23);
    129         assert(err == std::ios_base::eofbit);
    130     }
    131     {
    132         const my_facet f(LOCALE_zh_CN_UTF_8, 1);
    133         const char in[] = "\xE5\x85\xAD"
    134                           " 12/31 23:55:59 2061";
    135         err = std::ios_base::goodbit;
    136         t = std::tm();
    137         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
    138         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
    139         assert(t.tm_sec == 59);
    140         assert(t.tm_min == 55);
    141         assert(t.tm_hour == 23);
    142         assert(t.tm_mday == 31);
    143         assert(t.tm_mon == 11);
    144         assert(t.tm_year == 161);
    145         assert(t.tm_wday == 6);
    146         assert(err == std::ios_base::eofbit);
    147     }
    148     {
    149         const my_facet f(LOCALE_zh_CN_UTF_8, 1);
    150         const char in[] = "23""\xE6\x97\xB6""55""\xE5\x88\x86""59""\xE7\xA7\x92";
    151         err = std::ios_base::goodbit;
    152         t = std::tm();
    153         I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
    154         assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
    155         assert(t.tm_sec == 59);
    156         assert(t.tm_min == 55);
    157         assert(t.tm_hour == 23);
    158         assert(err == std::ios_base::eofbit);
    159     }
    160 }
    161