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